讀書無論資性高低,但能勤學好問,凡事思一個所以然,自有義理貫通之日
立身不嫌家世貧賤,但能忠厚老成,所行無一毫苟且處,便爲鄉黨仰望之人
注意事項
- 本分佈式集羣包含3臺虛擬機,操作系統均爲Linux
- 本次使用的統計文本大小爲4.32MB
- 若使用單臺虛擬機,即僞分佈式集羣,或者分佈式集羣運算能力較弱,可以使用該4.32MB的文本
- 若想嘗試大數據量運算,可將該文本進行自我複製到1GB大小,並以此產生多個副本
- 本分佈式集羣HDFS架構如下
節點 | 主機名 | NameNode | DataNode | Secondary NameNode | Resource Manager | Node Manager |
---|---|---|---|---|---|---|
主節點 | master | √ | √ | √ | √ | |
從節點 | slave1 | √ | √ | √ | ||
從節點 | slave2 | √ | √ |
準備工作
統計文本
該統計文本大小爲4.32MB,也可使用自己生成的統計文本 提取碼w3ci
軟件
- Xftp (類似的SFTP、FTP文件傳輸軟件均可,如國產的FinalShell)
- Xshell (類似的安全終端模擬軟件均可,如SecureCRT)
具體步驟
注意:以下操作均在主節點虛擬機(master)上執行,無需在各虛擬機均執行
使用Xsehll連接虛擬機
- 點擊“文件”→“新建”
- 填寫“名稱”和“主機”,“主機”爲IP地址,“名稱”儘量填寫IP地址,點擊“確定”
- 在會話中選擇“172.16.29.94”,點擊“連接”,依次輸入“用戶名”和“密碼”,“用戶名”和“密碼”爲登錄該虛擬機的用戶名和密碼,最後點擊“確定”
在Xshell顯示界面顯示如下信息即爲連接成功
Connecting to 172.16.29.94:22…
Connection established.
To escape to local shell, press ‘Ctrl+Alt+]’.
Last login: Wed Oct 9 12:07:14 2019 from 172.28.54.186
[root@master ~]#
其中[root@master~]
中的master爲該虛擬機的主機名,即hostname,每臺虛擬機可能會不一樣
創建本地存放文件目錄
- 輸入命令
cd /hadoop/
,進入/hadoop目錄
([root@master~]# cd /hadoop/
) - 輸入命令
mkdir localfile
,創建本地存放統計文件的目錄
([root@master~]# mkdir localfile
) - 輸入命令
cd localfile
,進入localfile目錄
使用Xftp導入統計文本
- 打開Xftp,點擊“文件”→“新建”
- 填寫“名稱”、“主機”、“用戶名”和“密碼”,“主機”填寫IP地址,名稱儘量填寫IP地址,“用戶名”和“密碼”爲登錄該虛擬機的用戶名和密碼
- “協議”更改爲“SFTP”
- 點擊“選項”,勾選“使用UTF-8”編碼,點擊“確定”,否則連接時虛擬機中的文件名稱會產生亂碼
- 選擇名稱爲“172.16.29.94”的會話,點擊“連接”
- 在虛擬機地址欄輸入
/hadoop/localfile
,進入該目錄 - 將本地統計文件拖拽到虛擬機localfile目錄下
傳輸完成如下
- 在Xshell中輸入命令
ll
,顯示信息如下
([root@master localfile]# ll
)
總用量 4436
-rw-r–r-- 1 root root 4538523 10月 9 12:20 data.txt
在HDFS文件系統中創建統計文本數據輸入目錄
當前目錄爲localfile時,輸入命令hadoop fs -mkdir /input
創建統計文本數據輸入目錄
([root@master localfile]# hadoop fs -mkdir /input
)
向輸入目錄傳輸統計文本
當前目錄爲localfile時,輸入命令hadoop fs -put data.txt /input
,向/input目錄傳輸data.txt文件(該文件名以自己的統計文本名爲準)
([root@master localfile]# hadoop fs -put data.txt /input
)
傳輸完成後,輸入命令hadoop fs -ls /input
,若出現如下信息,則文件傳輸成功
([root@master localfile]# hadoop fs -ls /input
)
Found 1 items
-rw-r–r-- 3 root supergroup 4538523 2019-10-09 12:38 /input/data.txt
使用Hadoop自帶的MapReduce編程模型進行統計運算
- 輸入命令
cd ~
,進入根目錄 - 輸入命令
cd /hadoop/hadoop-2.7.7/share/hadoop/mapreduce/
,進入mapreduce目錄
(`[root@master ~]# cd /hadoop/hadoop-2.7.7/share/hadoop/mapreduce/``) - 輸入命令
hadoop jar hadoop-mapreduce-examples-2.7.7.jar wordcount /input /output
進行統計運算
([root@master mapreduce]# hadoop jar hadoop-mapreduce-examples-2.7.7.jar wordcount /input /output
)
19/10/09 12:47:55 INFO client.RMProxy: Connecting to ResourceManager at master/172.16.29.94:8032
19/10/09 12:47:56 INFO input.FileInputFormat: Total input paths to process : 1
19/10/09 12:47:56 INFO mapreduce.JobSubmitter: number of splits:1
19/10/09 12:47:56 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1569750862651_0004
19/10/09 12:47:56 INFO impl.YarnClientImpl: Submitted application application_1569750862651_0004
19/10/09 12:47:56 INFO mapreduce.Job: The url to track the job: http://master:8088/proxy/application_1569750862651_0004/
19/10/09 12:47:56 INFO mapreduce.Job: Running job: job_1569750862651_0004
19/10/09 12:48:01 INFO mapreduce.Job: Job job_1569750862651_0004 running in uber mode : false
19/10/09 12:48:01 INFO mapreduce.Job: map 0% reduce 0%
19/10/09 12:48:07 INFO mapreduce.Job: map 100% reduce 0%
19/10/09 12:48:12 INFO mapreduce.Job: map 100% reduce 100%
19/10/09 12:48:12 INFO mapreduce.Job: Job job_1569750862651_0004 completed successfully
19/10/09 12:48:12 INFO mapreduce.Job: Counters: 49
File System Counters
FILE: Number of bytes read=483860
(省略)
File Input Format Counters
Bytes Read=4538523
File Output Format Counters
Bytes Written=356409
注意:由於各個虛擬機版本不一致,hadoop-mapreduce-examples-2.7.7.jar需要根據自己虛擬機的mapreduce目錄中的JAR包來寫,可以在寫hadoop-mapreduce-examples時使用Tab
鍵自動補全,或者在mapreduce目錄下使用ll
命令查找虛擬機上自帶的JAR包名,如下所示
[root@master mapreduce]# ll
總用量 4984
-rw-r–r-- 1 user ftp 540117 7月 19 2018 hadoop-mapreduce-client-app-2.7.7.jar
-rw-r–r-- 1 user ftp 773735 7月 19 2018 hadoop-mapreduce-client-common-2.7.7.jar
-rw-r–r-- 1 user ftp 1556812 7月 19 2018 hadoop-mapreduce-client-core-2.7.7.jar
-rw-r–r-- 1 user ftp 189951 7月 19 2018 hadoop-mapreduce-client-hs-2.7.7.jar
-rw-r–r-- 1 user ftp 27831 7月 19 2018 hadoop-mapreduce-client-hs-plugins-2.7.7.jar
-rw-r–r-- 1 user ftp 62388 7月 19 2018 hadoop-mapreduce-client-jobclient-2.7.7.jar
-rw-r–r-- 1 user ftp 1556921 7月 19 2018 hadoop-mapreduce-client-jobclient-2.7.7-tests.jar
-rw-r–r-- 1 user ftp 71617 7月 19 2018 hadoop-mapreduce-client-shuffle-2.7.7.jar
-rw-r–r-- 1 user ftp 296044 7月 19 2018 hadoop-mapreduce-examples-2.7.7.jar
drwxr-xr-x 2 user ftp 4096 7月 19 2018 lib
drwxr-xr-x 2 user ftp 30 7月 19 2018 lib-examples
drwxr-xr-x 2 user ftp 4096 7月 19 2018 sources
查看程序運行結果並導出文件
- 輸入命令
cd ~
,進入根目錄 - 輸入命令
hadoop fs -ls /output
,顯示如下信息
([root@master ~]# hadoop fs -ls /output
)
其中output目錄下的part-r-00000爲統計結果
Found 2 items
-rw-r–r-- 3 root supergroup 0 2019-10-09 12:48 /output/_SUCCESS
-rw-r–r-- 3 root supergroup 356409 2019-10-09 12:48 /output/part-r-00000
- 輸入命令
hadoop fs -get /output/part-r-00000 result.txt
,將part-r-00000文件從HDFS複製到root目錄中,重命名爲result,文本格式爲txt
([root@master ~]# hadoop fs -get /output/part-r-00000 result.txt
) - 打開Xftp並連接到主節點虛擬機,進入根目錄,將result.txt文件傳輸到本地
傳輸完成如下
- 查看本地運行結果文件
打開result.txt,內容如下
! 10526
!’ 183
!'By 1
!'t 1
!'twas 1
!, 1
!About 1
(省略)
zodiac 1
zodiacs 1
zone 1
zur 2
zwaggered 1
刪除HDFS中output目錄中的內容
輸入命令hadoop fs -rm -r /output
,刪除output目錄,顯示如下信息
19/10/09 13:20:46 INFO fs.TrashPolicyDefault: Namenode trash configuration: Deletion interval = 0 minutes, Emptier interval = 0 minutes.
Deleted /output
輸入命令hadoop fs -ls /output
,若output目錄刪除成功則會顯示如下信息
ls: `/output’: No such file or directory
若不刪除該目錄,程序會在下一次執行WordCount程序時報錯
命令爲[root@master mapreduce]# hadoop jar hadoop-mapreduce-examples-2.7.7.jar wordcount /input /output
錯誤內容如下
19/10/09 13:17:15 INFO client.RMProxy: Connecting to ResourceManager at master/172.16.29.94:8032
org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory hdfs://master:9000/output already exists
at org.apache.hadoop.mapreduce.lib.output.FileOutputFormat.checkOutputSpecs(FileOutputFormat.java:146)
at org.apache.hadoop.mapreduce.JobSubmitter.checkSpecs(JobSubmitter.java:266)
at org.apache.hadoop.mapreduce.JobSubmitter.submitJobInternal(JobSubmitter.java:139)
(省略)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.hadoop.util.RunJar.run(RunJar.java:226)
at org.apache.hadoop.util.RunJar.main(RunJar.java:141)
錯誤信息爲output目錄在HDFS中已存在
基於Hadoop的WordCount案例實現到此就告一段落
有疑問的朋友可以在下方留言或者私信我,我儘量儘早回答
歡迎各路大神指點、交流!
求關注!求點贊!求轉發!