hadoop使用(五)

來源:互聯網
上載者:User
第1章 引言1.1 編寫目的

對關於hadoop的文檔及資料進行進一步的整理。

1.2 相關網站

   毋庸置疑 http://hadoop.apache.org/

   國內  http://www.hadoopor.com/   專門研究hadoop的,《hadoop開發人員》由該站創辦,已發4期

   中國雲端運算論壇hadoop專區; http://bbs.chinacloud.cn/showforum-16.aspx

   中科院計算所辦的hadoop:http://www.hadooper.cn/

1.3 資料及研究成果

  http://code.google.com/p/mycloub/

  我會搜集更多更好的資料,方便交流。

第2章 hadoop基本命令2.1 hadoop基本命令

直接輸入hadoop得到的文法文檔如下:

namenode -format     format the DFS filesystem 格式化DFS檔案系統

namenode -format     format the DFS filesystem 運行第2個namenode

datanode             run a DFS datanode 運行DFS的namenode

dfsadmin             run a DFS admin client 運行一個DFS的admin用戶端

mradmin              run a Map-Reduce admin client 運行一個map-reduce檔案系統的檢查工具

fsck                 run a DFS filesystem checking utility 運行一個DFS檔案系統的檢查工具

fs                   run a generic filesystem user client  運行一個普通的檔案系統使用者用戶端

balancer             run a cluster balancing utility 運行MapReduce的jobTracker節點

fetchdt              fetch a delegation token from the NameNode 運行一個代理的namenode

jobtracker           run the MapReduce job Tracker node 運行一個MapReduce的taskTracker節點

pipes                run a Pipes job 運行一個pipes作業

tasktracker          run a MapReduce task Tracker node 運行一個MapReduce的taskTracker節點

historyserver        run job history servers as a standalone daemon 運行曆史服務作為一個單獨的線程

job                  manipulate MapReduce jobs 處理mapReduce作業

queue                get information regarding JobQueues

version              print the version 版本

jar <jar>            run a jar file 運行一個jar

distcp <srcurl> <desturl> copy file or directories recursively 遞迴地複製檔案或者目錄

archive -archiveName NAME -p <parent path> <src>* <dest> create a hadoop archive

 產生一個hadoop檔案

daemonlog            get/set the log level for each daemon 擷取或設定每個daemon的log層級

2.2 hadoop核心內容

   Hadoop架構中最核心的設計就是:MapReduce和HDFS。

l  MapReduce的思想是由Google的一篇論文所提及而被廣為流傳的,簡單的一句話解釋MapReduce就是“任務的分解與結果的匯總”。

l  HDFS是HadoopDistributed File System(Hadoop Distributed File System)的縮寫,為分散式運算儲存提供了底層支援。

2.3 為什麼選擇hadoop

   下面列舉hadoop主要的一些特點:

1)擴容能力(Scalable):能可靠地(reliably)儲存和處理千MB(PB)資料。

2)成本低(Economical):可以通過普通機器組成的伺服器群來分發以及處理資料。這些伺服器群總計可達數千個節點。

3)高效率(Efficient):通過分發資料,hadoop可以在資料所在的節點上並行地(parallel)處理它們,這使得處理非常的快速。

4)可靠性(Reliable):hadoop能自動地維護資料的多份複製,並且在任務失敗後能自動地重新部署(redeploy)計算任務。

2.4 HDFS設計特點

   下面說說HDFS的幾個設計特點(對於架構設計值得借鑒):

1. Block的放置

預設不配置。一個Block會有三份備份,一份放在NameNode指定的DataNode,另一份放在與指定DataNode非同一Rack上的DataNode,最後一份放在與指定DataNode同一Rack上的DataNode上。

備份無非就是為了資料安全,考慮同一Rack的失敗情況以及不同Rack之間數

據拷貝效能問題就採用這種配置方式。

2. 心跳檢測

心跳檢測DataNode的健康情況,如果發現問題就採取資料備份的方式來保證資料的安全性。

3. 資料複製

資料複製(情境為DataNode失敗、需要平衡DataNode的儲存利用率和需要平衡DataNode資料互動壓力等情況) 這裡先說一下,:使用HDFS的balancer命令,

可以配置一個Threshold來平衡每一個DataNode磁碟利用率。例如設定了Threshold為10%,那麼執行balancer命令的時候,

首先統計所有DataNode的磁碟利用率的均值,然後判斷如果某一個DataNode的磁碟利用率超過這個均值Threshold以上,那麼將會把這個DataNode的block轉移到磁碟利用率低的DataNode,這對於新節點的加入來說十分有用。

4. 資料校正:

採用CRC32作資料交驗。在檔案Block寫入的時候除了寫入資料還會寫入交驗資訊,在讀取的時候需要交驗後再讀入。

5. NameNode是單點

如果失敗的話,任務處理資訊將會記錄在本地檔案系統和遠端的檔案系統中。

6. 資料管道性的寫入

當用戶端要寫入檔案到DataNode上,首先用戶端讀取一個Block然後寫到第一個DataNode上,然後由第一個DataNode傳遞到備份的DataNode上,一直到所有需要寫入這個Block的DataNode都成功寫入,用戶端才會繼續開始寫下一個Block。

7. 安全模式

安全模式主要是為了系統啟動的時候檢查各個DataNode上資料區塊的有效性,同時根據策略必要的複製或者刪除部分資料區塊。

在Distributed File System啟動的時候,開始的時候會有安全模式,當Distributed File System處於安全模式的情況下,檔案系統中的內容不允許修改也不允許刪除,

直到安全模式結束。運行期通過命令也可以進入安全模式。在實踐過程中,系統啟動的時候去修改和刪除檔案也會有安全模式不允許修改的出錯提示,只需要等待一會兒即可。

2.5 說說MapReduce

   MapReduce從它名字上來看就大致可以看出個緣由,兩個動詞Map和Reduce,“Map(展開)”就是將一個任務分解成為多個任務,“Reduce”就是將分解後多任務處理的結果匯總起來,得出最後的分析結果。

具體過程式如下:

1) Input輸入

從檔案中讀取未經處理資料

未經處理資料   <InputKey, InputValue>

2) Map映射

將未經處理資料映射成用於Reduce的資料

<InputKey, InputValue> List<<MapKey, MapValue>>

3) Reduce合并

將相同Key值的中間資料合併成最終資料

<MapKey, List<MapValue>>   <OutputKey, OutputValue>

4) Output輸出

將最終處理結果輸出到檔案

<OutputKey, OutputValue> 結果檔案

上述就是MapReduce大致處理過程,在Map前還可能會對輸入的資料有Split(分割)的過程,保證任務並行效率,在Map之後還會有Shuffle(混合)的過程,對於提高Reduce的效率以及減小資料轉送的壓力有很大的協助。後面會具體提及這些部分的細節。

再來看看hadoop下的MapReduce

最簡單的 MapReduce 應用程式至少包含 3 個部分:一個 Map 函數、一個 Reduce函數和一個 main 函數。main 函數將作業控制和檔案輸入/輸出結合起來。在這點上,Hadoop 提供了大量的介面和抽象類別,從而為 Hadoop 應用程式開發人員提供許多工具,可用於調試和效能度量等。

MapReduce 本身就是用於平行處理大資料集的軟體架構。

MapReduce 的根源是函數性編程中的 map 和 reduce 函數。它由兩個可能包含有許多執行個體(許多 Map 和Reduce)的操作組成。Map 函數接受一組資料並將其轉換為一個鍵/值對列表,輸入欄位中的每個元素對應一個鍵/值對。Reduce 函數接受 Map 函數產生的列表,然後根據它們的鍵(為每個鍵產生一個鍵/值對)縮小鍵/值對列表。

2.6 hadoop結構

  

MapReduce從它名字上在Hadoop的系統中,會有一台Master,主要負責NameNode的工作以及JobTracker的工作。

JobTracker的主要職責就是啟動、跟蹤和調度各個Slave的任務執行。還會有多台Slave,每一台Slave通常具有DataNode的功能並負責TaskTracker的工作。TaskTracker根據應用要求來結合本機資料執行Map任務以及Reduce任務。

第3章 FSShell 命令指南3.1 FSShell 命令指南

調用檔案系統(FS)Shell 命令應使用 bin/hadoop fs<args>的形式。所有的的 FSshell命令使用 URI 路徑作為參數。URI 格式是 scheme://authority/path。對 HDFS 檔案系統,scheme 是 hdfs,對本地檔案系統,scheme 是 file。其中 scheme 和 authority 參數都是可選的,如果未加指定,就會使用配置中指定的預設 scheme。一個 HDFS 檔案或目錄比如/parent/child可以表示成 hdfs://namenode:namenodeport/parent/child,或者更簡單的/parent/child(假設你設定檔中的預設值是 namenode:namenodeport)。大多數 FSShell命令的行為和對應的 UnixShell 命令類似,不同之處會在下面介紹各命令使用詳情時指出。

出錯資訊會輸出到 stderr,其他資訊輸出到 stdout。

1) cat

使用方法:hadoop fs -catURI[URI...]

將路徑指定檔案的內容輸出到 stdout。

樣本:

hadoop fs-cat hdfs://host1:port1/file1hdfs://host2:port2/file2

hadoop fs-cat file:///file3/user/hadoop/file4

傳回值:

成功返回 0,失敗返回-1。

2) copyFromLocal

使用方法:hadoop fs -copyFromLocal<localsrc>URI 除了限定源路徑是一個本地檔案外,和 put 命令相似。

3) copyToLocal

使用方法:hadoop fs -copyToLocal[-ignorecrc][-crc]URI<localdst>

除了限定目標路徑是一個本地檔案外,和 get 命令類似。

4) cp

使用方法:hadoopfs-cpURI[URI...]<dest>

將檔案從源路徑複製到目標路徑。這個 Hadoop Shell 命令允許有多個源路徑,此時目標路徑必須是一個目錄。

樣本:

Hadoopfs –cp /user/hadoop/file1/user/hadoop/file2

hadoopfs –cp /user/hadoop/file1/user/hadoop/file2/user/hadoop/dir

傳回值:

成功返回 0,失敗返回-1。

5) du

使用方法:hadoop fs –du URI[URI...]

此 Hadoop Shell 命令顯示目錄中所有檔案的大小,或者當只指定一個檔案時,顯示此檔案的大小。

樣本:

Hadoop fs –du

/user/hadoop/dir1/user/hadoop/file1hdfs://host:port/user/hadoop/dir1

傳回值:

成功返回 0,失敗返回-1。

6) dus

使用方法:hadoop fs -dus<args>

顯示檔案的大小。

7) expunge

使用方法:hadoop fs -expunge

清空資源回收筒。請參考 HDFS 設計文檔以擷取更多關於資源回收筒特性的資訊。

8) get

使用方法:hadoop fs -get[-ignorecrc][-crc]<src><localdst>

複製檔案到本地檔案系統。可用-ignorecrc 選項複製 CRC 校正失敗的檔案。使用-crc 選項

複製檔案以及 CRC 資訊。

樣本:

hadoop fs –get /user/hadoop/filelocalfile

hadoop fs –get hdfs://host:port/user/hadoop/filelocalfile

傳回值:

成功返回 0,失敗返回-1。Hadoop Shell 命令還有很多,這裡只介紹了其中的一部分。

第4章 eclipse測試hadoop4.1 配置eclipse

下載外掛程式hadoop-1.03,拷貝到eclipse外掛程式目錄

啟動hadoop

然後運行jps,看是否服務都已經啟動

啟動eclipse

配置hadoop,選擇window->preferences->Hadoop Map/Reduce,選擇hadoop安裝路徑

編輯map/reduce location

然後建立map/reduce工程

建立類

PutMerge.java

public class PutMerge {/** * @throws IOException * @Title: main * @Description: 測試逐一讀取inputFiles中的檔案,並寫入目標HDFS檔案 * @param args *            設定檔案 * @return void 傳回型別 * @throws */public static void main(String[] args) throws IOException {Configuration conf = new Configuration();FileSystem local = FileSystem.getLocal(conf);/** 設定檔案的輸入輸出目錄 */Path inputDir = new Path(args[0]);Path hdfsFile = new Path(args[1]);// 偽分布式下這樣處理FileSystem hdfs = hdfsFile.getFileSystem(conf);// 正常分布式// FileSystem hdfs = FileSystem.get(conf);try {FileStatus[] inputFiles = local.listStatus(inputDir);FSDataOutputStream out = hdfs.create(hdfsFile);for (int i = 0; i < inputFiles.length; i++) {System.out.println(inputFiles[i].getPath().getName());FSDataInputStream in = local.open(inputFiles[i].getPath());byte buffer[] = new byte[256];int bytesRead = 0;while ((bytesRead = in.read(buffer)) > 0) {out.write(buffer, 0, bytesRead);}in.close();}out.close();} catch (IOException e) {e.printStackTrace();}}}

 在本地建立input檔案夾,建立file01,file02檔案

配置java application,加入參數

 加入本地路徑和伺服器上的路徑

然後運行程式,得到輸出結果

file02

file01

使用命令查看

bin/hadoop fs -ls /user

查看檔案上傳情況

 

hadoop使用:
  1. hadoop使用(一)
  2. hadoop使用(二)
  3. hadoop使用(三)
  4. hadoop使用(四)
  5. hadoop使用(五)
  6. hadoop使用(六)

hbase實戰:

  1. hbase實戰——(1.1  nosql介紹)

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

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.