Hadoop學習筆記:運行wordcount對文件字符串進行統計案例


文/朱季謙

我最近使用四台Centos虛擬機搭建了一套分布式hadoop環境,簡單模擬了線上上的hadoop真實分布式集群,主要用於業余學習大數據相關體系。

其中,一台服務器作為NameNode,一台作為Secondary NameNode,剩下兩台當做DataNodes節點服務器,類似下面這樣一個架構——
image

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集群,就正常了,日志信息就沒有卡頓,而是一步執行完成,打印以下的日志記錄——
image

image
過程如果沒有出現問題,就可以到最后一步,查看統計完的結果。

三、獲取統計結果

以上步驟執行完后,直接輸入指令查看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的一個小案例,接下來,我會在學習過程當中把值得分享的經驗都總結下來。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM