Hadoop權威指南學習筆記三,hadoop權威學習筆記

來源:互聯網
上載者:User

Hadoop權威指南學習筆記三,hadoop權威學習筆記
HDFS簡介

Hadoop說白了就是一個提供了處理分析大資料的檔案叢集,其中最重要的無疑是HDFS(Hadoop Distributed File System)即HadoopDistributed File System。

 

1、

         HDFS是一種以流式資料訪問模式(一次寫入多次讀取的模式)儲存超大檔案的系統。其不需要的高端的硬體系統,普通市面上的硬體就能滿足要求。

         目前不適合應用HDFS的有:低延遲的資料訪問、大量小的檔案、多使用者寫入任意修改檔案等。

2、

         HDFS儲存以塊為單位,通常塊大小為64M。之所以要分為這麼大的塊,主要是為了減少定址時間,因為目前來看,資料轉送速率越來越快,對於HDFS處理大資料時,如果頻繁的定址必然會使得已耗用時間變長。

         HDFS叢集有兩種節點名稱節點和多個資料節點。其中名稱節點充當管理者,資料節點充當工作者。名稱節點相當於HDFS檔案樹上的枝幹分叉點,而資料節點則標註著所有塊的儲存資訊。所以名稱節點的丟失就意味著HDFS的癱瘓。因此Hadoop提供了兩種機制解決這一問題:

一種是複製組成檔案系統中繼資料的持久狀態檔案。即在本地磁碟寫入的同時也寫入一個遠程NFS掛載。

另一種是設定一個二級名稱節點。

3、

         HDFS提供命令列介面的互動。

4、

         Hadoop是一個抽象的檔案系統概念,HDFS是其中的一個具體實現,java抽象類別org.apache.hadoop.fs.FileSystem展示了Hadoop的一個檔案系統,而且有幾個具體實現。



如所示,Hadoop提供了許多檔案的介面,通常是通過URL來確定使用何種檔案系統實現互動。

5、

         Hadoop是java實現的所以,java介面無疑是其中重中之重,下面是java介面的一些具體實現。

(1)      資料讀取:

 

使用URL讀取資料

Java識別Hadoop檔案系統的URL方案,就是通過一個FsUrlStreamHandlerFactory執行個體來調用在URL中的setURLStreamHandlerFactory方法。

注意:這種方法在java虛擬機器中只能被調用一次,所以通常設定為static,也因此如果程式其他組件(可能不是在你控制的第三方組件)設定了一個URLStreamHandlerFactory,那麼久再也不能從Hadoop讀取資料。

 

代碼:


輸入運行:

% hadoop URLCat hdfs://localhost/user/tom/test.txt

結果:

Hello world Hello world

Hello world

Hello world Hello world

 

使用FileSystem API讀取資料

直接看代碼吧,注意看注釋

 

(2)      資料寫入

FileSystem類有一系列建立檔案的方法。

public FSDataOutputStream create(Pathf) throws IOException

用create建立檔案是可用exists()判斷其父目錄是否存在。

還有一個用於傳遞迴調介面的重載方法 Progressable,如此一來,我們所寫的應用就會被告知資料寫入資料節點的進度。

package org.apache.hadoop.util;

public interface Progressable{

            publicvoid progress();

}

建立檔案的還可以用如下方法:

Public FSDataOutputStream append(Pathf) throws IOException

此方法允許在開啟檔案的末尾追加資料。

 

(3)      目錄

FileSystem題目了建立目錄的方法:

public Boolean mkdirs(Path f) thorwsIOException

(4)      查詢檔案系統

FileStatus類封裝了檔案系統中檔案和目錄的中繼資料,包括檔案長度、塊大小、副本、修改時間、所有者以及許可資訊。

FileSystem的getFileStatus()提供了擷取一個檔案或目錄的狀態物件方法。

如果只是判斷一個檔案是否存在,則可以使用前文提到的exists(Path f)方法。

 

Hadoop有時要查詢批量檔案時通常要用到萬用字元,所以它為執行萬用字元提供了

Hadoop支援與Unix bash相同的萬用字元兩個FileSystem方法:

public FileStatus[] globStatus (PathpathPattern) throws IOException

public FileStatus[] globStatus (Path pathPattern,PathFileter filter)throws IOException

萬用字元:


(5)      刪除資料

FileSystem中的delete()方法可以永久刪除目錄。

public Boolean delete(Path f,Boolean recursive) throwsIOException

         

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.