文/朱季謙
我最近使用四臺Centos虛擬機器搭建了一套分散式hadoop環境,簡單模擬了線上上的hadoop真實分散式叢集,主要用於業餘學習大資料相關體系。
其中,一臺伺服器作為NameNode,一臺作為Secondary NameNode,剩下兩臺當做DataNodes節點伺服器,類似下面這樣一個架構——
NameNode | Secondary NameNode | DataNodes | |
---|---|---|---|
master1(192.168.200.111) | √ | ||
master2(192.168.200.112) | √ | ||
slave1(192.168.200.117) | √ | ||
slave2(192.168.200.115) | √ |
接下來,就是開始通過hadoop自帶的wordcount來統計一下檔案當中的字元數量。
啟動hadoop叢集后,在叢集可用情況下,按照以下步驟:
一、進入到hadoop安裝目錄,建立一個測試檔案example.txt
我的安裝目錄是:/opt/hadoop/app/hadoop/hadoop-2.7.5
[root@192 hadoop-2.7.5]# pwd
/opt/hadoop/app/hadoop/hadoop-2.7.5
新建一個example.txt,並隨機寫入一些字元:
aaa
bbb
cccc
dedef
dedf
dedf
ytrytrgtrcdscdscdsc
dedaxa
cdsvfbgf
uyiuyi
ss
xaxaxaxa
接著,在hdfs檔案系統上新建一個input資料夾,用來存放example.txt檔案——
[root@192 hadoop-2.7.5]# hdfs dfs -mkdir /input
然後,將example.txt複製到hdfs系統上的input目錄下——
[root@192 hadoop-2.7.5]# hdfs dfs -put example.txt /input
檢查一下,可以看到,example.txt檔案已經在input目錄底下了——
[root@192 hadoop-2.7.5]# hdfs dfs -ls /input
Found 1 items
-rw-r--r-- 3 root supergroup 84 2021-10-20 12:43 /input/example.txt
這些準備工作做好後,就可以開始使用hadoop自帶的jar包來統計檔案example.txt當中各字元的數量了。
二、執行wordcount對檔案字元進行統計
直接在NameNode節點對應的伺服器上執行——
[root@192 hadoop-2.7.5]# hadoop jar /opt/hadoop/app/hadoop/hadoop-2.7.5/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.5.jar wordcount /input /output
這行指令的大概意思是,分散式計算統計input目錄底下的檔案中的字元數量,將統計結果reduce到output當中,故而,最後若執行沒問題,可以在output目錄下獲取到統計結果記錄。
我第一次執行時,發生了一個異常,即執行完後,日誌執行到INFO mapreduce.Job: Running job: job_1631618032849_0002這一行時,就直接卡在了這裡,沒有任何動靜了——
[hadoop@192 bin]$ hadoop jar /opt/hadoop/app/hadoop/hadoop-2.7.5/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.5.jar wordcount /input /output
21/10/20 10:43:29 INFO client.RMProxy: Connecting to ResourceManager at master1/192.168.200.111:8032
21/10/20 10:43:30 INFO input.FileInputFormat: Total input paths to process : 1
21/10/20 10:43:30 INFO mapreduce.JobSubmitter: number of splits:1
21/10/20 10:43:31 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1631618032849_0002
21/10/20 10:43:31 INFO impl.YarnClientImpl: Submitted application application_1631618032849_0002
21/10/20 10:43:31 INFO mapreduce.Job: The url to track the job: http://master1:8088/proxy/application_1631618032849_0002/
21/10/20 10:43:31 INFO mapreduce.Job: Running job: job_1631618032849_0002
百度了一番後,根據一些思路,最後將mapred-site.xml最開始的配置由
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
改成這裡——
<configuration>
<property>
<name>mapreduce.job.tracker</name>
<value>hdfs://master1:8001</value>
<final>true</final>
</property>
</configuration>
接著,重啟了hadoop叢集,就正常了,日誌資訊就沒有卡頓,而是一步執行完成,列印以下的日誌記錄——
過程如果沒有出現問題,就可以到最後一步,檢視統計完的結果。
三、獲取統計結果
以上步驟執行完後,直接輸入指令檢視output目錄下的資訊,可以看到,裡面生成了兩個檔案——
[root@192 hadoop-2.7.5]# hdfs dfs -ls /output
Found 2 items
-rw-r--r-- 3 root supergroup 0 2021-10-20 12:47 /output/_SUCCESS
-rw-r--r-- 3 root supergroup 101 2021-10-20 12:47 /output/part-r-00000
part-r-00000檔案是存放統計結果的,我們檢視一下——
[root@192 hadoop-2.7.5]# hdfs dfs -cat /output/part-r-00000
aaa 1
bbb 1
cccc 1
cdsvfbgf 1
dedaxa 1
dedef 1
dedf 2
ss 1
uyiuyi 1
xaxaxaxa 1
ytrytrgtrcdscdscdsc 1
對比前面的example.txt檔案,可以看到,當中dedf字串是有兩個,其他都是1個,hadoop統計結果也確實如此。
以上,便是初步認識hadoop的一個小案例,接下來,我會在學習過程當中把值得分享的經驗都總結下來。