Hadoop集群的基本操作(一:HDFS操作及MapReduce程序练习)
| 實驗 目的 要求 | 目的:
(上傳WordCount的jar執行程序;使用WordCount進行MapReduce計算) 要求:
? | ||||||||||||||||||
| ? ? ? ? ? ? ? ? ? 實 驗 環 境 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 實 驗 環 境 ? ? ? ? ? | ?
? 集群規劃: ????? ????* Hadoop的高可用完全分布模式中有HDFS的主節點和數據節點、MapReduce的主節點和任務節點、數據同步通信節點、主節點切換控制節點總共6類服務節點,其中HDFS的主節點、MapReduce的主節點、主節點切換控制節點共用相同主機Cluster-01和Cluster-02,HDFS的數據節點、MapReduce的任務節點共用相同主機Cluster-03、Cluster-04,Cluster-05,數據同步通信節點可以使用集群中的任意主機,但因為其存放的是元數據備份,所以一般不與主節點使用相同主機。 *高可用完全分布模式中需要滿足主節點有備用的基本要求, 所以需要兩臺或以上的主機作為主節點,而完全分布模式中需要滿足數據有備份和數據處理能夠分布并行的基本要求,所以需要兩臺或以上的主機作為HDFS的數據節點和MapReduce的任務節點,同時數據同步通信節點工作原理同Zookeeper類似,需要三臺或以上的奇數臺主機,具體規劃如下:
? ? ? |
練習內容
練習一:熟悉常用的HDFS操作;
1、向HDFS中上傳任意文本文件,如果指定的文件在HDFS中已經存在,由于用戶指定是追加到原有文件末尾還是覆蓋原有的文件;(追加文件內容以編程方式進行)
2、從HDFS中下載指定文件,如果本地文件與要下載的文件名稱相同,則自動對下載的文件重命名;
3、將HDFS中指定文件的內容輸出到終端中;
4、顯示HDFS中指定的文件的讀寫權限、大小、創建時間、路徑等信息;
5、給定HDFS中某一個目錄,輸出改目錄下的所有文件的讀寫權限、大小、創建時間、路徑等信息,如果該文件是目錄,則遞歸輸出該目錄下所有文件相關信息;
6、提供一個HDFS內的文件的路徑,對該文件進行創建和刪除操作。如果文件所在目錄不存在,則自動創建目錄;
7、提供一個HDFS的目錄的路徑,對該目錄進行創建和刪除操作,創建目錄時,如果目錄文件所在目錄不存在則自動創建相應的目錄;刪除目錄時,由用戶指定當該目錄不為空時是否還刪除該目錄;
8、向HDFS中指定的文件追加內容,由用戶指定內容追加到原有文件的開頭或者結尾;
練習二:MapReduce-WordCount程序練習;
1、上傳jar包;
1.1、現在以“admin”普通用戶登錄“Master。Hadoop”服務器。即在主節點操作;
?
a)創建本地示例文件;
首先在“/home/admin”目錄下創建文件夾“file”.
命令:
$mkdir ~/file
接著創建兩個文本文件file1.txt和file2.txt。
使fiel1.txt內容為“Hello World”,而file2.txt的內容為“Hello Hadoop”。
命令:
$cd file
$echo “Hello World”>file1.txt
$echo “Hello Hadoop”>file2.txt
?
?
b)在HDFS上創建輸入文件夾;
命令:
$hadoop fs -mkdir input
?
c)上傳本地file中文件到集群的input目錄下;
命令:
$hadoop fs -put ~/file/file*.txt input
$hadoop fs -ls input
?
1.2、上傳jar包
先使用Xftp工具把WordCount的jar執行程序包,上傳到“~/hadoop/hadoop-2.7.3/share/Hadoop/mapreduce”目錄下;
命令:
$ls
2、示例運行;
2.1、在集群上運行WordCount程序;
?? 注:以input作為輸入目錄,output目錄作為輸出目錄。
?? 命令:
??$hadoop jar ~/ hadoop/hadoop-2.7.3/share/Hadoop/mapreduce/Hadoop-0.20.2-examples.jar wordcount input output
Hadoop命令會啟動一個JVM來運行達個MapReduce程序,并自動獲得Hadoop的配置,同時把類的路徑(及其依賴關系)加入到Hadoop的庫中。
以上就是Hadoop Job的運行記錄,從達里可以看到,達個Job被賦予了一個ID號:job_1533748123309_0002,而且得知輸入文件有兩個(Totalinput paths to process:2),同時還可以了解map的輸入輸出記錄(record數及字節數),以及reduce輸入輸出記錄。比如說,在本例中,map的task數量是2個,reduce的task數量是一個。map的輸入record數是2個,輸出record數是4個等信息。
2.2、查看結果;
a)查看HDFS上output目錄內容;
??命令:
????? $hadoop fs -ls output
從上圖中知道生成了兩個文件,我們的結果在“part-r-00000”中。
b)查看結果輸出文件內容;
??命令:
????? $hadoop fs -cat output/part-r-00000
3、Hadoop的Web驗證練習;
3.1、使用瀏覽器訪問192.168.10.111:8088,ResourceManager狀態查看;
3.2、使用瀏覽器訪問192.168.10.111:50070,查看HDFS情況;
??
3.3、使用瀏覽器訪問192.168.10.112:50070,在從節點上查看NodeManager信息:
?
出現的問題與解決方案
問題:
1、Namenode沒有啟動;
2、在使用 -rmr 遞歸刪除命令時報錯;
3、追加到文件的開頭(-copyFromLocal)
a)如圖,向HDSFS中的file2.txt中導file2.txt的類容,提示文件已經存在,直接寫一個不存在的文件file3.txt,發現導入成功,再次向file3.txt導入類容,又提示文件已經存在
b).hadoop fs -copyFromLocal -f產看文件file2.txt中的類容
向文件fil2.txt 導入類容,然后產看,發現文件中之前的類容被覆蓋了
?
解決方案:
- 格式化namenode,命令“hdfs namenode -format”;
- -rmr命令不適配CentOS7環境,應改為“-rm -R”;
- a)此方法只適用于把一個文件中的類容導入到一個不存在的文件中;
? ? ? ? ?b) 此方法導入到文件開頭時會覆蓋源文件類容;
?
知識拓展
1、Hadoop是一種分布式系統的基礎構架。
核心是HDFS和MapReduce,hadoop2.0還包括YARN
2、HDFS:Hadoop Distributed FileSystem 分布式文件系統。
//很多時候的數據量超過了單臺機器允許存儲的范圍……故而需要分布式
前身是GFS,谷歌開源的分布式存儲系統。
是一個高容錯(允許錯誤發生)的系統,能檢測應對硬件故障。
適用于低成本的通用硬件(比如樹莓派么)
通過流式數據訪問,提供高吞吐量應用程序的訪問功能。
?
3、異常處理:
因為數量多,所以出故障是常態。
【可靠性】存在故障的時候也能較為有效地存儲數據。(名字節點故障,數據節點故障,網絡斷開)
【重新復制】定時會發送“心跳包”檢測節點是否健康,失去聯系標記為死亡狀態,需要重新復制到其他節點。
【數據正確性】校驗數據是否有壞塊(類似于葡萄的校驗?,驗證的校驗碼存儲在HDFS命名空間的隱藏文件中)
【元數據失效】FsImage和Editlog是HDFS的核心數據結構。(損壞就崩盤了)名字節點(NameNode)如果崩了就需要人工的干預了。//第二名字節點不支持直接恢復
4、目標
- 數據訪問:適合批量處理而非交互式,重點是數據吞吐量而非反應時間
- 大數據:支持大文件,單個文件GB-TB級別
- 簡單一致模式:一次寫入,多次讀,一般寫入之后就不再修改了
- 主從結構:一個名字節點和很多數據節點,通常一臺機器一個數據節點。
- 硬件故障處理:是設計的核心目標之一
?
總結
以上是生活随笔為你收集整理的Hadoop集群的基本操作(一:HDFS操作及MapReduce程序练习)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Hadoop集群搭建(九:各服务的启动)
- 下一篇: Hadoop集群的基本操作(二:HBas