在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ 大數(shù)據(jù)/ Hadoop HDFS入門
Hadoop命令參考
Hadoop教程
Hadoop介紹快速入門
Pig & Hive介紹
Hadoop MapReduce
Hadoop安裝
Hadoop環(huán)境安裝設(shè)置
Hadoop HDFS入門
理解 MapReducer
Hadoop多節(jié)點集群
OOZIE 五分鐘入門學(xué)習(xí)
Flume和Sqoop
Hadoop是什么?
MapReduce計數(shù)器和連接
MapReduce Hadoop程序連接數(shù)據(jù)
Hadoop Streaming
Hadoop HDFS
Hadoop程序入門實踐
MapReduce簡介和入門
Hadoop大數(shù)據(jù)解決方案
Hadoop HDFS操作

Hadoop HDFS入門

Hadoop 附帶了一個名為 HDFS(Hadoop分布式文件系統(tǒng))的分布式文件系統(tǒng),基于 Hadoop 的應(yīng)用程序使用 HDFS 。HDFS 是專為存儲超大數(shù)據(jù)文件,運行在集群的商品硬件上。它是容錯的,可伸縮的,并且非常易于擴展。
    你知道嗎?  當數(shù)據(jù)超過一個單個物理機器上存儲的容量,除以跨獨立機器數(shù)。管理跨越機器的網(wǎng)絡(luò)存儲特定操作被稱為分布式文件系統(tǒng)。

HDFS集群主要由 NameNode 管理文件系統(tǒng) Metadata 和 DataNodes 存儲的實際數(shù)據(jù)。

  • NameNode: NameNode可以被認為是系統(tǒng)的主站。它維護所有系統(tǒng)中存在的文件和目錄的文件系統(tǒng)樹和元數(shù)據(jù) 。 兩個文件:“命名空間映像“和”編輯日志“是用來存儲元數(shù)據(jù)信息。Namenode 有所有包含數(shù)據(jù)塊為一個給定的文件中的數(shù)據(jù)節(jié)點的知識,但是不存儲塊的位置持續(xù)。從數(shù)據(jù)節(jié)點在系統(tǒng)每次啟動時信息重構(gòu)一次。
  • DataNode : DataNodes作為從機,每臺機器位于一個集群中,并提供實際的存儲. 它負責為客戶讀寫請求服務(wù)。

HDFS中的讀/寫操作運行在塊級。HDFS數(shù)據(jù)文件被分成塊大小的塊,這是作為獨立的單元存儲。默認塊大小為64 MB。

HDFS操作上是數(shù)據(jù)復(fù)制的概念,其中在數(shù)據(jù)塊的多個副本被創(chuàng)建,分布在整個節(jié)點的群集以使在節(jié)點故障的情況下數(shù)據(jù)的高可用性。

注:  在HDFS的文件,比單個塊小,不占用塊的全部存儲。

在HDFS讀操作

數(shù)據(jù)讀取請求將由 HDFS,NameNode和DataNode來服務(wù)。讓我們把讀取器叫 “客戶”。下圖描繪了文件的讀取操作在 Hadoop 中。

  1. 客戶端啟動通過調(diào)用文件系統(tǒng)對象的 open() 方法讀取請求; 它是 DistributedFileSystem 類型的對象。
  2. 此對象使用 RPC 連接到 namenode 并獲取的元數(shù)據(jù)信息,如該文件的塊的位置。 請注意,這些地址是文件的前幾個塊。
  3. 響應(yīng)該元數(shù)據(jù)請求,具有該塊副本的 DataNodes 地址被返回。
  4. 一旦接收到 DataNodes 的地址,F(xiàn)SDataInputStream 類型的一個對象被返回到客戶端。 FSDataInputStream 包含 DFSInputStream 這需要處理交互 DataNode 和 NameNode。在上圖所示的步驟4,客戶端調(diào)用 read() 方法,這將導(dǎo)致 DFSInputStream 建立與第一個 DataNode 文件的第一個塊連接。
  5. 以數(shù)據(jù)流的形式讀取數(shù)據(jù),其中客戶端多次調(diào)用 “read() ” 方法。 read() 操作這個過程一直持續(xù),直到它到達塊結(jié)束位置。
  6. 一旦到模塊的結(jié)尾,DFSInputStream 關(guān)閉連接,移動定位到下一個 DataNode 的下一個塊
  7. 一旦客戶端已讀取完成后,它會調(diào)用 close()方法。

HDFS寫操作

在本節(jié)中,我們將了解如何通過的文件將數(shù)據(jù)寫入到 HDFS。

  1. 客戶端通過調(diào)用 DistributedFileSystem對象的 create() 方法創(chuàng)建一個新的文件,并開始寫操作 - 在上面的圖中的步驟1
  2. DistributedFileSystem對象使用 RPC 調(diào)用連接到 NameNode,并啟動新的文件創(chuàng)建。但是,此文件創(chuàng)建操作不與文件任何塊相關(guān)聯(lián)。NameNode 的責任是驗證文件(其正被創(chuàng)建的)不存在,并且客戶端具有正確權(quán)限來創(chuàng)建新文件。如果文件已經(jīng)存在,或者客戶端不具有足夠的權(quán)限來創(chuàng)建一個新的文件,則拋出 IOException 到客戶端。否則操作成功,并且該文件新的記錄是由 NameNode 創(chuàng)建。
  3. 一旦 NameNode 創(chuàng)建一條新的記錄,返回FSDataOutputStream 類型的一個對象到客戶端。客戶端使用它來寫入數(shù)據(jù)到 HDFS。數(shù)據(jù)寫入方法被調(diào)用(圖中的步驟3)。
  4. FSDataOutputStream包含DFSOutputStream對象,它使用 DataNodes 和 NameNode 通信后查找。當客戶機繼續(xù)寫入數(shù)據(jù),DFSOutputStream 繼續(xù)創(chuàng)建這個數(shù)據(jù)包。這些數(shù)據(jù)包連接排隊到一個隊列被稱為 DataQueue
  5. 還有一個名為 DataStreamer 組件,用于消耗DataQueue。DataStreamer 也要求 NameNode 分配新的塊,揀選 DataNodes 用于復(fù)制。
  6. 現(xiàn)在,復(fù)制過程始于使用 DataNodes 創(chuàng)建一個管道。 在我們的例子中,選擇了復(fù)制水平3,因此有 3 個 DataNodes 管道。
  7. 所述 DataStreamer 注入包分成到第一個 DataNode 的管道中。
  8. 在每個 DataNode 的管道中存儲數(shù)據(jù)包接收并同樣轉(zhuǎn)發(fā)在第二個 DataNode 的管道中。
  9. 另一個隊列,“Ack Queue”是由 DFSOutputStream 保持存儲,它們是 DataNodes 等待確認的數(shù)據(jù)包。
  10. 一旦確認在隊列中的分組從所有 DataNodes 已接收在管道,它從 'Ack Queue' 刪除。在任何 DataNode 發(fā)生故障時,從隊列中的包重新用于操作。
  11. 在客戶端的數(shù)據(jù)寫入完成后,它會調(diào)用close()方法(第9步圖中),調(diào)用close()結(jié)果進入到清理緩存剩余數(shù)據(jù)包到管道之后等待確認。
  12. 一旦收到最終確認,NameNode 連接告訴它該文件的寫操作完成。

使用JAVA API訪問HDFS

在本節(jié)中,我們來了解 Java 接口并用它們來訪問Hadoop的文件系統(tǒng)。

為了使用編程方式與 Hadoop 文件系統(tǒng)進行交互,Hadoop 提供多種 Java 類。org.apache.hadoop.fs 包中包含操縱 Hadoop 文件系統(tǒng)中的文件類工具。這些操作包括,打開,讀取,寫入,和關(guān)閉。實際上,對于 Hadoop 文件 API 是通用的,可以擴展到 HDFS 的其他文件系統(tǒng)交互。

編程從 HDFS 讀取文件

java.net.URL 對象是用于讀取文件的內(nèi)容。首先,我們需要讓 Java 識別 Hadoop 的 HDFS URL架構(gòu)。這是通過調(diào)用 URL 對象的 setURLStreamHandlerFactory方法和 FsUrlStreamHandlerFactory 的一個實例琮傳遞給它。此方法只需要執(zhí)行一次在每個JVM,因此,它被封閉在一個靜態(tài)塊中。

示例代碼

 
publicclassURLCat {
    static{
        URL.setURLStreamHandlerFactory(newFsUrlStreamHandlerFactory());
    }
    publicstaticvoidmain(String[] args) throwsException {
        InputStream in = null;
        try{
            in = newURL(args[0]).openStream();
            IOUtils.copyBytes(in, System.out, 4096, false);
        } finally{
            IOUtils.closeStream(in);
        }
    }
}

這段代碼用于打開和讀取文件的內(nèi)容。HDFS文件的路徑作為命令行參數(shù)傳遞給該程序。

使用命令行界面訪問HDFS

這是與 HDFS 交互的最簡單的方法之一。 命令行接口支持對文件系統(tǒng)操作,例如:如讀取文件,創(chuàng)建目錄,移動文件,刪除數(shù)據(jù),并列出目錄。

可以執(zhí)行 '$HADOOP_HOME/bin/hdfs dfs -help' 來獲得每一個命令的詳細幫助。這里, 'dfs' HDFS是一個shell命令,它支持多個子命令。首先要啟動 Haddop 服務(wù)(使用 hduser_用戶),執(zhí)行命令如下:

hduser_@ubuntu:~$ su hduser_
hduser_@ubuntu:~$ $HADOOP_HOME/sbin/start-dfs.sh
hduser_@ubuntu:~$ $HADOOP_HOME/sbin/start-yarn.sh

一些廣泛使用的命令的列表如下

1. 從本地文件系統(tǒng)復(fù)制文件到 HDFS

hduser_@ubuntu:~$ $HADOOP_HOME/bin/hdfs dfs -copyFromLocal temp.txt /

此命令將文件從本地文件系統(tǒng)拷貝 temp.txt 文件到 HDFS。

2. 我們可以通過以下命令列出一個目錄下存在的文件 -ls

hduser_@ubuntu:~$ $HADOOP_HOME/bin/hdfs dfs -ls /

我們可以看到一個文件 'temp.txt“(之前復(fù)制)被列在”/“目錄。

3. 以下命令將文件從 HDFS 拷貝到本地文件系統(tǒng)

hduser_@ubuntu:~$ $HADOOP_HOME/bin/hdfs dfs -copyToLocal /temp.txt

我們可以看到 temp.txt 已經(jīng)復(fù)制到本地文件系統(tǒng)。

4. 以下命令用來創(chuàng)建新的目錄

hduser_@ubuntu:~$ $HADOOP_HOME/bin/hdfs dfs -mkdir /mydirectory

接下來檢查是否已經(jīng)建立了目錄。現(xiàn)在,應(yīng)該知道怎么做了吧?