在Linux上搭建Hadoop系列:1.Hadoop環境搭建流程圖2.搭建Hadoop單機模式3.搭建Hadoop僞分佈式模式4.搭建Hadoop完全分佈式模式
注:此教程皆是以範例講述的,當然你可以按照教程搭建一個與教程一樣的Hadoop環境,如果你想搭建一個與本教程有一些差異的Hadoop環境,這時請注意配置文件的參數可能不一樣以及文件路徑不一樣。
目錄
1.在完全分佈式模式下使用wordcount示例程序完成單詞統計
2.在完全分佈式模式下使用wordmean示例程序計算文件中單詞的平均長度
1.Hadoop集羣規劃與部署
一個完全分佈式模式Hadoop集羣至少由三臺機器構成,此處搭建一個三臺機器構成的小集羣。
節點角色 | 虛擬機名 | 機器IP | 主機名 | 運行進程 |
---|---|---|---|---|
主節點 | master | 192.168.232.200 | node |
NameNode ResourceManager SecondaryNameNode |
從節點 | slave1 | 192.168.232.201 | node1 |
DataNode NodeManager |
從節點 | slave2 | 192.168.232.202 | node2 |
DataNode NodeManager |
(1)準備3臺虛擬機
3臺虛擬機可以是已部署單機模式Hadoop,已部署僞分佈模式Hadoop,當然也可以是從零開始的基礎環境。
克隆出三臺虛擬機
注:爲方便管理可以建一個文件夾(full-Distributed),將三臺虛擬機放入其中。
(2)分別映射好三臺虛擬機的IP與主機名
//1.修改IP避免衝突
vi /etc/sysconfig/network-scripts/ifcfg-ens33 //編輯網絡配置
systemctl restart network //重啓網絡服務
此處爲方便記憶,建議master節點IP尾數用200,slave1用201,slave2用202.
//2.修改主機名
hostname //查看主機名
hostnamectl set-hostname node //將主機名改爲node
hostnamectl set-hostname node1 //將主機名改爲node1
hostnamectl set-hostname node2 //將主機名改爲node2
master用node,slave1用node1,slave2用node2.
//3.映射IP與主機名
vi /etc/hosts
(3)設置三臺機器時鐘同步
完全分佈式模式由多臺主機組成,如果主機間時間差異較大,運行Hadoop的時候會出現問題,因此需要對每個節點配置時鐘同步。
採用NTP服務通過獲取網絡時間使集羣內不同主機的時間保持一致
此處選取阿里雲的時間服務器aliyun.com
//1.安裝NTP服務
yum install ntp
//2.手動同步時間
ntpdate -u ntp1.aliyun.com
//3.查看時間
date
(4)設置三臺機器兩兩之間SSH密碼登錄
在完全分佈式模式下,集羣內任意一臺主機可免密登錄集羣內所有主機,實現兩兩免密登錄。
若是以僞分佈模式爲基礎的機器則需要先刪除node,node1,node2主機上原有的.ssh目錄
然後分別在node,node1,node2主機上生成公鑰/私鑰密鑰對,再將公鑰發送給集羣內的所有主機。
//1.在各節點上刪除原有.ssh目錄,然後重新生成密鑰對
rm -rf /root/.ssh //刪除原有.ssh目錄
ssh-keygen -t rsa //生成密鑰對
cd ~/.ssh //進入.ssh目錄
ll //查看密鑰對
//2.在各節點的.ssh目錄下將公鑰複製到node節點
cd ~ //進入根目錄
ssh-copy-id node //複製公鑰到node節點
ssh-copy-id node1 //複製公鑰到node1節點
ssh-copy-id node2 //複製公鑰到node2節點
//3.查看node節點上的authorized_key文件
cd .ssh //進入.ssh目錄
more authorized_keys
//4.將node節點上的authorized_keys文件遠程拷貝到node1,node2
scp authorized_keys node1:~/.ssh/authorized_keys //執行過程中輸入yes與密碼
scp authorized_keys node2:~/.ssh/authorized_keys //執行過程中輸入yes與密碼
//5.驗證免密登錄,注意查看提示符中主機名稱的變化
ssh node2 //免密登錄node2節點
exit //退出遠程登錄
ssh node1 //免密登錄node1節點
exit //退出遠程登錄
(5)修改主節點配置文件並遠程拷貝到從節點
概要:
1.在主節點上修改配置文件(以下皆以僞分佈式Hadoop爲基礎的虛擬機作爲示範)
核心配置文件
core-site.xml 修改
HDFS配置文件
hadoop-env.sh 不變
hdfs-site.xml 修改
MapReduce配置文件
mapred-env.sh 修改
mapred-site.xml 不變
Yarn配置文件
yarn-env.sh 修改
yarn-site.xml 修改
slaves 修改
1.在主節點上修改配置文件
核心配置文件
core-site.xml 修改
cd /export/server/hadoop-2.7.2/etc/hadoop
vi core-site.xml
//在<configuration></configuration>中插入<property></property>中的代碼。注意主機名與文件路徑是否是自己的
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://node:9000</value>
<description>HDFS的URI,設定namenode的主機名及端口</description>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/export/server/tmp</value>
<description>節點上本地的hadoop臨時文件夾,之前一定要先建立好</description>
</property>
</configuration>
HDFS配置文件
hadoop-env.sh 不變 //在僞分佈式已修改過
hdfs-site.xml 修改
vi hdfs-site.xml
//在<configuration></configuration>中插入<property></property>中的代碼。注意主機名與文件路徑是否是自己的
<configuration>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/export/server/hdfs/name</value>
<description>namenode上存儲hdfs名字空間元數據 </description>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/export/server/hdfs/data</value>
<description>datanode上數據塊的物理存儲位置</description>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
<description>副本個數,默認是3,應小於datanode機器數量</description>
</property>
</configuration>
MapReduce配置文件
mapred-env.sh 修改
mapred-site.xml 不變
which java //查看java安裝路徑
vi mapred-env.sh
插入export JAVA_HOME=/bin以前的java安裝路徑
Yarn配置文件
yarn-env.sh 修改
yarn-site.xml 修改
which java //獲取java安裝路徑
vi yarn-env.sh
插入export JAVA_HOME=/bin以前的java安裝路徑
vi yarn-site.xml
//在<configuration></configuration>中插入<property></property>中的代碼。注意主機名是否是自己的
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>node</value>
<description>指定resourcemanager所在的hostname,
即指定yarn的老大即ResourceManger的地址
</description>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
<description>NodeManager上運行的附屬服務。
指定NodeManager獲取數據的方式是shuffle
需配置成mapreduce_shuffle,纔可運行MapReduce程序
</description>
</property>
</configuration>
slaves 修改
slaves文件給出了Hadoop集羣的slave節點列表。啓動Hadoop時,系統總是根據當前slaves文件中slave節點名稱列表啓動集羣,不在列表中的Slave節點便不會被視爲計算節點。
vi slaves
插入各節點名
2.將主節點的配置文件分發到兩個從節點
分發到node1從節點
scp -r /export/server/hadoop-2.7.2/etc/hadoop node1:/export/server/hadoop-2.7.2/etc/
分發到node2從節點
scp -r /export/server/hadoop-2.7.2/etc/hadoop node2:/export/server/hadoop-2.7.2/etc/
2.格式化HDFS並啓動Hadoop
(1)在主節點上格式化HDFS
hdfs namenode -format
(2)在主節點上啓動Hadoop
start-all.sh //啓動所有進程
//或
start-dfs.sh
start-yarn.sh
(3)在各節點上用JPS查看進程
(4)web界面上查看
在瀏覽器輸入主機的IP地址:50070
3.在完全分佈式模式下運行Hadoop自帶示例程序
1.在完全分佈式模式下使用wordcount示例程序完成單詞統計
(1)準備數據
(2)運行wordcount程序
cd /export/server/hadoop-2.7.2/share/hadoop/mapreduce/
hadoop jar hadoop-mapreduce-examples-2.7.2.jar wordcount/input/wcoutput
(3)查看運行結果
hadoop fs -ls /wcoutput
hadoop fs -cat wcoutput/part*
2.在完全分佈式模式下使用wordmean示例程序計算文件中單詞的平均長度
(1)準備數據:HDFS上的/input
(2)運行wordmean程序
hadoop jar hadoop-mapreduce-examples-2.7.2.jar wordmean/input/wmoutput
(3)查看結果
hadoop fs -ls /wmoutput
hadoop fs -cat /wmouput/part*
準備3臺虛擬機 | 克隆 |
在3臺機器上分別設置IP和主機名並映射關係 |
vi /etc/sysconfig/network-scripts/ifcfg-ens33 //更改IP hostnamectl set-hostname node //更改主機名 vi /etc/hosts //映射關係 |
設置3臺機器時鐘同步 |
yum install ntp //安裝ntp服務 ntpdate -u ntp1.aliyun.com //手動同步時間 |
配置3臺機器兩兩之間SSH免密登錄 |
ssh-keygen -t rsa //獲取密鑰 ssh-copy-id node //複製公鑰到node節點 |
修改主節點配置文件並遠程拷貝到從節點 |
vi 各配置文件 scp -r /export/server/hadoop-2.7.2/etc/hadoop node1:/export/server/hadoop-2.7.2/etc/ |
格式化HDFS並啓動Hadoop |
hdfs namenode -format //格式化HDFS start-all.sh //啓動Hadoop所有進程 jps //查看進程 |
完全分佈式模式運行Hadoop自帶示例程序 | hadoop jar hadoop-mapreduce-examples-2.7.2.jar wordcount/input/wcoutput |