【hadoop之翊】——hadoop大核心之HDFS初識

今天來說說hadoop的一大核心——HDFS,這個是很重要的,它呢,是分佈式文件系統。爲什麼說hadoop能存儲海量數據?其實主要還是依賴與hdfs的能力,主要依賴的是hdfs能存儲海量數據。

1、 爲什麼hdfs能存儲海量數據呢?

一開始拋出這樣的問題來想想。至於HDFS的基本概念什麼的都不用多說了的~我們重在使用,而不是去做“研究”。扯蛋的話就是,“專家的研究”已經成爲名副其實的貶義詞了,很帶有諷刺意義了,在現在這個時代~你們懂的~因爲他們有的沒有真正經歷過,而卻要說着要去“研究”~所以我們不“糾結於”概念,我們只要使用就可以了的~

回到問題,這個是爲什麼呢?其實很簡單,hdfs包含兩大核心——NameNode和DataNode,namenode在集羣中是隻能有一個的,datanode可以有多個,我們要知道,數據其主要實是保存在datanode上的,從字面上也能理解的~並且datanode可以平滑擴展的~這就好比數據可以存儲在一個大型的datanode中的,所以能支持海量數據的存儲。

2、怎麼使用hdfs?

安裝了hadoop的就可以直接使用hdfs了的,一般有兩種方式:

一種是命令式:

我們知道hadoop的bin目錄下有一個hadoop的命令,這個其實算是hadoop的一個管理命令,我們可以使用這個來對hdfs操作的。

hadoop fs -lsr /
以上是遞歸列出hdfs根目錄下的所有文件(夾)

解釋一下:

hadoop 不用解釋了的,fs 指的是hdfs, -ls(r) 這個類似linux的目錄列表命令,列出所有文件(夾),括弧的r表示遞歸,/ 表示根目錄。

其他常用的命令還有:

hadoop fs -mkdir [path] 表示創建文件夾

hadoop fs -put [path] 表示上傳文件到hdfs

hadoop fs -put ~/hello.txt /tmp/input/
等等相關的一系列命令,這邊就不一一講出~



一種是api式:

看下面程序:

	public static void main(String[] args) throws Exception {
		URL.setURLStreamHandlerFactory(new FsUrlStreamHandlerFactory());
		final URL url = new URL(PathConstant.FILE01);
		final InputStream in = url.openStream();

		/**
		 * @param in
		 *            輸出流
		 * @param out
		 *            輸出流
		 * @param buffSize
		 *            緩衝區大小
		 * @param close
		 *            是否關閉流
		 */
		IOUtils.copyBytes(in, System.out, 1024, true);
	}

public class PathConstant {
	public static final String FILE01 = "hdfs://192.168.0.167:9000/tmp/input/micmiu-01.txt";
	
	public static final String DIR_PATH = "hdfs://192.168.0.167:9000/tmp/";
	
	public static final String TEST_PATH = "hdfs://192.168.0.167:9000/tmp/test/";

	public static final String FILE_PATH = "hdfs://192.168.0.167:9000/tmp/test/demo.txt";
}
運行上面的程序如下:

直接輸出的是hdfs裏面文件的內容。org.apache.hadoop.io.IOUtils; 這個是hadoop裏面提供的一個操作工具類

以上這種是java.socket的方式,其實hadoop裏面推薦了使用FileSystem這個類來操作:

public static void main(String[] args) throws Exception {
		// 創建文件夾
		// mkdir();

		// 上傳文件
		// uploadData();

		// 下載文件
		// getContent();
		// 刪除文件(夾)
		// delete();
	}

	public static void delete() throws IOException {
		FileSystem testFileSystem = FileSystem.get(
				URI.create(PathConstant.TEST_PATH), new Configuration());
		/**
		 * @param f
		 *            目錄
		 * @param recursive
		 *            遞歸
		 */
		boolean flag = testFileSystem.delete(new Path(PathConstant.TEST_PATH),
				true);
		System.out.println(flag);
	}

	public static void uploadData() throws IOException, FileNotFoundException {
		FileSystem testFileSystem = FileSystem.get(
				URI.create(PathConstant.TEST_PATH), new Configuration());

		FSDataOutputStream out = testFileSystem.create(new Path(
				PathConstant.FILE_PATH));
		FileInputStream in = new FileInputStream(
				"F:\\hadoop.file\\demo\\hello.txt");

		IOUtils.copyBytes(in, out, 1024, true);
	}

	public static void getContent() throws Exception {
		FileSystem fileSystem = FileSystem.get(
				URI.create(PathConstant.FILE_PATH), new Configuration());

		InputStream in = fileSystem.open(new Path(PathConstant.FILE_PATH));

		IOUtils.copyBytes(in, System.out, 1024, true);
	}

	public static void mkdir() throws Exception {
		FileSystem fileSystem = FileSystem.get(
				URI.create(PathConstant.DIR_PATH), new Configuration());

		boolean flag = fileSystem.mkdirs(new Path(PathConstant.TEST_PATH));
		System.out.println(flag);
	}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章