前言
上一篇文章《從0開始學大數據(2):hadoop安裝》我們對hadoop工具進行了安裝,這章我們對hadoop的官網案例進行講解,讓我們對hadoop進行初步入門。
Hadoop運行模式
Hadoop運行模式
- 本地模式(默認模式):不需要啓用單獨進程,直接可以運行,測試和開發使用
- 僞分佈模式:等同於完全分佈式,只有一個節點。
- 完全分佈模式:多個節點一起運行
1.本地文件運行Hadoop案例
1.1 官方grep案例
- 拷貝hadoop的etc/hadoop下的xml文件到input目錄下
[martin@hadoop101 hadoop-2.7.2]$ sudo cp etc/hadoop/*.xml input
- 執行share目錄下的mapreduce程序
sudo bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar grep input output 'dfs[a-z.]+'
- 查看輸入結果
將用例集合中的已dfs開頭的文件過濾,從輸入文件input到輸出到output文件夾中,其中output文件夾不能創建。
我們通過觀察part-r-00000
文件,就找到了裏面的結果集顯示配置文件中的以dfs開頭的文件dfsadmin
。
1.2 官方wordcount案例
這次我就將步驟和命令分開,這樣比較容易分析:
- 創建在hadoop-2.7.2文件下創建一個wcinput文件夾
- 在wcinput文件下創建一個wc.input文件
- 編輯wc.input文件
- 回到hadoop目錄/opt/module/hadoop-2.7.2
- 執行程序
- 查看結果
[martin@hadoop101 hadoop-2.7.2]$ mkdir wcinput
[martin@hadoop101 hadoop-2.7.2]$ cd wcinput/
[martin@hadoop101 wcinput]$ ls
[martin@hadoop101 wcinput]$ touch wc.input
[martin@hadoop101 wcinput]$ vim wc.input
[martin@hadoop101 wcinput]$ cd ..
[martin@hadoop101 hadoop-2.7.2]$ ls
LICENSE.txt NOTICE.txt README.txt bin etc include input lib libexec output sbin share wcinput
[martin@hadoop101 hadoop-2.7.2]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount wcinput/ wcoutput
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount wcinput/ wcoutput
[martin@hadoop101 hadoop-2.7.2]$ cd wcoutput/
[martin@hadoop101 wcoutput]$ ls
_SUCCESS part-r-00000
[martin@hadoop101 wcoutput]$ cat part-r-00000
date 1
david 1
franky 1
hadoop 1
jacky 1
java 1
jimmy 1
kafka 1
martin 1
sarah 1
whisly 1
2.僞分佈式運行Hadoop案例
2.1 HDFS上運行MapReduce程
配置集羣
- 1.修改
/hadoop-2.7.2/etc/hadoop/core-site.xml
文件,如果是在Mac下我推薦在Sublime Text3 安裝sftp的插件,我們將下面的內容複製到xml文件中。
<configuration>
<!-- 指定HDFS中NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop101:8020</value>
</property>
</configuration>
在官網的core-default.xml中fs.defaultFS
默認是本地文件,這裏是將本地文件修改爲我們制定的節點。
- 2.修改
hdfs-default.xml
配置文件
數據需要備份,我們需要配置數據配置在地方,同樣,我們可以在官網查看一下默認值。
<configuration>
<!-- 指定HDFS副本的數量 -->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
集羣中增加了節點,我們可以對數據再次進行備份。
啓動集羣
- 格式化namenode(第一次啓動時格式化,以後就不要總格式化)
hdfs namenode -format
- 啓動namenode
sbin/hadoop-daemon.sh start namenode
- 啓動datanode
sbin/hadoop-daemon.sh start datanode
查看集羣
- 查看是否啓動成功
jps:查看java進程
[martin@hadoop101 sbin]$ jps
24519 Jps
24428 DataNode
23832 NameNode
- 查看產生的log日誌
[martin@hadoop101 hadoop-2.7.2]$ cd logs
[martin@hadoop101 logs]$ ll
total 60
-rw-rw-r--. 1 martin martin 0 Feb 15 17:17 SecurityAuth-martin.audit
-rw-rw-r--. 1 martin martin 23678 Feb 15 17:20 hadoop-martin-datanode-hadoop101.log
-rw-rw-r--. 1 martin martin 716 Feb 15 17:20 hadoop-martin-datanode-hadoop101.out
-rw-rw-r--. 1 martin martin 27470 Feb 15 17:20 hadoop-martin-namenode-hadoop101.log
-rw-rw-r--. 1 martin martin 716 Feb 15 17:17 hadoop-martin-namenode-hadoop101.out
[martin@hadoop101 logs]$ cat hadoop-martin-namenode-hadoop101.log
- Web端查看HDFS文件系統
我們在宿主機瀏覽器中輸入10.211.55.101:50070/
就可以查看我們的HDFS了,提示一下有些原因不能訪問,是虛擬機的防火牆沒有關閉可以查看這篇文章《CentOS7查看和關閉防火牆》使用命令將防火牆關閉即可訪問。
操作集羣
- 創建目錄
在HDFS文件系統中,根目錄與Linux一樣都是用\
表示。
hadoop fs -mkdir -p /user/martin/input
PS:mkdir -p :表示創建多級目錄
- 向文件夾中上傳文件
hadoop fs -put wcinput/wc.input /user/martin/input
- 在HDFS上運行Mapreduce程序
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/martin/input/ /user/martin/output
下載文件結果後即可查看。
- 刪除輸出結果
hadoop fs -rmr /user/martin/output
2.2 HDFS上運行MapReduce程序
配置集羣
- 修改yarn-env.sh配置文件的Java_Home
$vi /opt/module/hadoop-2.7.2/etc/hadoop/yarn-env.sh
- 修改yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<!-- reducer the way of getting data -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- ResourceManager address is sepecified on YARN -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop101</value>
</property>
</configuration>
yarn.nodemanager.aux-services
:是獲取數據的方式
yarn.resourcemanager.hostname
:資源管理所在的主機名稱
- 修改
mapred-env.sh
配置文件的Java_Home
$vi /opt/module/hadoop-2.7.2/etc/hadoop/mapred-env.sh
- 修改
mapred-site.xml
配置文件
<configuration>
<!-- 指定mr運行在yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
啓動集羣
- namenode:目錄節點
sbin/hadoop-daemon.sh stop namenode
sbin/hadoop-daemon.sh start namenode
- datanode:數據節點
sbin/hadoop-daemon.sh stop datanode
sbin/hadoop-daemon.sh start datanode
- resourcemanager:資源管理器
sbin/yarn-daemon.sh start resourcemanager
- nodemanager:節點管理器
sbin/yarn-daemon.sh start nodemanager
- 查看結果
[martin@hadoop101 hadoop-2.7.2]$ jps
23733 ResourceManager
22940 NodeManager
20853 NameNode
23773 Jps
20982 DataNode
集羣操作
- yarn的瀏覽器頁面查看,輸入網址
http://10.211.55.101:8088/cluster
上圖主要是查看MapReduce應用程序運行過程。 - 執行MapReduce應用程序
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/martin/input /user/martin/output
可以看結果就是,先Map完成後纔會執行Reduce操作。
2.3 修改本地臨時存儲目錄
默認情況下,在執行結果的時候會產生一些臨時文件保存到/tmp
上面運行結果中的臨時文件命名:hadoop-[當前用戶]
,現在我們需要對這個臨時目錄修改到我們的制定的目錄下。
- 創建臨時目錄
mkdir -p data/tmp
- 添加下面配置到core-site.xml
vi etc/hadoop/core-site.xml
<!-- 指定hadoop運行時產生文件的存儲目錄 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-2.7.2/data/tmp</value>
</property>
修改好配置以後,讀取配置文件是在服務啓動的時候纔會產生,所以,我們需要重啓服務。
- 停止所有服務
sbin/yarn-daemon.sh stop resourcemanager
sbin/yarn-daemon.sh stop nodemanager
sbin/hadoop-daemon.sh stop datanode
sbin/hadoop-daemon.sh stop namenode
- 刪除臨時文件
rm -rf /tmp/hadoop-martin/
- 刪除logs
rm -rf logs/
- 格式化namenode
bin/hdfs namenode -format
- 開啓所有的服務。
sbin/yarn-daemon.sh start resourcemanager
sbin/yarn-daemon.sh start nodemanager
sbin/hadoop-daemon.sh start datanode
sbin/hadoop-daemon.sh start namenode
- 查看所有服務
[martin@hadoop101 hadoop-2.7.2]$ jps
16678 ResourceManager
16263 NameNode
17024 Jps
16491 DataNode
16958 NodeManager
- 查看修改後臨時文件夾
看見紅框後代表修改成功。
小結
這篇文章我們學習到了Hadoop的運行模式:
- 本地模式
- 僞分佈模式
- 完全分佈模式
通過配置前兩種模式,我們使用官網的wordcount
案例對我們的單詞數據進行了分析讓我們對hadoop進行了入門學習,由於篇幅原因下篇我在講解完全分佈式部署。