hadoop集群環(huán)境搭建之完全分布式集群環(huán)境搭建(二)
我們?cè)谏弦黄?hadoop集群環(huán)境搭建之偽分布式集群環(huán)境搭建(一)中介紹了hadoop偽分布式集群環(huán)境的搭建蚕涤,下面我們介紹下完全分布式集群環(huán)境搭建。
完全分布式集群是指在多臺(tái)機(jī)器上部署hadoop的服務(wù)茬祷。下面我以三臺(tái)機(jī)器(server1是牢,server2溢吻,server3)為例铆铆。搭建一個(gè)完全分布式的集群環(huán)境建车。
1俺夕、Linux機(jī)器環(huán)境配置
首先在使用VMware虛擬機(jī)創(chuàng)建一臺(tái)虛擬機(jī)server1裳凸。配置好虛擬機(jī)的基本環(huán)境。
1.1 修改主機(jī)名
切換成root用戶
su root
編輯/etc/sysconfig/network
文件
vim /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=server1 # 主機(jī)名
1.2 修改ip
編輯/etc/sysconfig/network-scripts/ifcfg-eno16777736
文件
vim /etc/sysconfig/network-scripts/ifcfg-eno16777736
修改內(nèi)容如下:
TYPE=Ethernet
DEFROUTE=no # 設(shè)置no
BOOTPROTO=none # 設(shè)置none
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
NAME=eno16777736
UUID=2ce59a48-ae92-483b-a73c-7844147b6ba0
HWADDR=00:0C:29:21:8D:08
PREFIX0=24
ONBOOT=yes # 開始機(jī)自動(dòng)網(wǎng)絡(luò)
IPADDR=192.168.108.99 # 設(shè)置IP
NETMASK=255.255.255.0 # 子網(wǎng)掩碼
GATEWAY0=192.168.108.2 # 設(shè)置網(wǎng)關(guān)
1.3 修改主機(jī)名和ip映射關(guān)系
編輯/etc/hosts
文件
# 編輯/etc/hosts文件
vim /etc/hosts
192.168.108.11 server1
編輯/etc/hostname
文件
vim /etc/hostname
zhang
1.4 關(guān)閉防火墻
chkconfig iptables off
1.5 給hadoop用戶添加root操作權(quán)限
修改/etc/sudoers
權(quán)限
chmod u+w /etc/sudoers
編輯/etc/sudoers
文件劝贸,給hadoop用戶添加root操作權(quán)限
# hadoop 用戶名
hadoop ALL=(root) NOPASSWD:ALL
1.6 關(guān)閉linux圖形化界面
centos 7以下版本:
vim /etc/inittab
id:5:initdefault:
改為
id:3:initdefault:
centos 7.x版本:
- 刪除已經(jīng)存在的符號(hào)鏈接
rm /etc/systemd/system/default.target
- 默認(rèn)級(jí)別轉(zhuǎn)換為3
# 默認(rèn)級(jí)別轉(zhuǎn)換為3(文本模式)
ln -sf /lib/systemd/system/multi-user.target /etc/systemd/system/default.target
# 默認(rèn)級(jí)別轉(zhuǎn)換為5(圖形模式)
ln -sf /lib/systemd/system/graphical.target /etc/systemd/system/default.target
- 重啟
reboot
如果需要切換圖形界面執(zhí)行命令:startx
2姨谷、java環(huán)境搭建
2.1 刪除自帶的jdk
執(zhí)行
java -version
查看java環(huán)境,如果沒有則可以忽略查看自帶的jdk映九,
rpm -qa | grep jdk
刪除自帶的jdk梦湘,
yum -y remove java-1.7.0-openjdk-xxxx
2.2 上傳jdk壓縮包
通過Windows客戶端,上傳jdk壓縮包件甥。(使用git命令窗口)
scp D:/dsoftmanager/jdk-8u151-linux-x64.tar.gz root@192.168.108.11:/home/hadoop
2.3 解壓jdk捌议,配置環(huán)境變量
創(chuàng)建/java目錄,
sudo mkdir /java
-
將上傳的jdk壓縮包復(fù)制到
/java
目錄sudo cp /home/hadoop/jdk-8u151-linux-x64.tar.gz /java
-
解壓壓縮包
# 切換到/java目錄 cd /java # 解壓jdk sudo tar -zxvf jdk-8u151-linux-x64.tar.gz
-
配置java環(huán)境變量
# 編輯/etc/profile文件 vim /etc/profile # java環(huán)境變量 JAVA_HOME=/java/jdk1.8.0_151 PATH=$PATH:$JAVA_HOME/bin:/usr/bin:/usr/sbin:/bin:/sbin:/usr/X11R6/bin CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar export JAVA_HOME PATH CLASSPATH
重啟后引有,測(cè)試
java -version
瓣颅,出現(xiàn)如下,表示成功
java version "1.8.0_151"
Java(TM) SE Runtime Environment (build 1.8.0_151-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.151-b12, mixed mode)
3譬正、克隆機(jī)器修改Linux基本的配置
3.1 克隆機(jī)器server2宫补,server3
關(guān)于VMware虛擬機(jī)克隆檬姥,這里不截圖展示,在克隆時(shí)粉怕,選擇完全克隆健民。
3.2 修改server2和server3的配置
需要修改server2和server3的如下文件:
- 3.2.1 修改
/etc/sysconfig/network
vim /etc/sysconfig/network
# server2機(jī)器HOSTNAME改為server2,server3機(jī)器HOSTNAME改為server3
HOSTNAME=server2
- 3.2.2 修改
/etc/sysconfig/network-scripts/ifcfg-eno16777736
vim /etc/sysconfig/network-scripts/ifcfg-eno16777736
# server2機(jī)器將ip改為192.168.108.12斋荞,server3的ip改為192.168.108.13
IPADDR=192.168.108.12
在克隆時(shí)荞雏,會(huì)把網(wǎng)卡信息也一起克隆,所以需要修改網(wǎng)卡的mac值平酿。
修改/etc/sysconfig/network--scripts/ifcfg-eno16777736
中的HWADDR
的mac值。mac值是每臺(tái)機(jī)器唯一的悦陋。
mac值獲取蜈彼,如圖:
具體參考:Linux虛擬機(jī)復(fù)制后eth0不能啟動(dòng)解決方法
- 3.2.3 修改
/etc/hostname
# server2機(jī)器改為server2,server3機(jī)器改為server3
server2
- 3.2.4 修改
/etc/hosts
將server1俺驶,server2幸逆,server3的/etc/hosts
都改為
192.168.108.11 server1
192.168.108.12 server2
192.168.108.13 server3
- 3.2.5 重啟后相互
ping
一下,能ping
通就沒問題
ping 192.168.108.11
ping 192.168.108.12
ping 192.168.108.13
4暮现、SSH無秘登錄
以下操作还绘,每臺(tái)機(jī)器都需要執(zhí)行
4.1 在server1,server2栖袋,server3分別生成公鑰拍顷,私鑰
執(zhí)行ssh-keygen -t rsa
命令,一路回車就行
ssh-keygen -t rsa
4.2 將生成好的公鑰塘幅,發(fā)送到其他的主機(jī)上
ssh-copy-id server1
ssh-copy-id server2
ssh-copy-id server3
4.3 相互以ssh 主機(jī)名
進(jìn)行切換
ssh server1
ssh server2
ssh server3
如果不需要輸入密碼昔案,表示無秘登入成功
5、hadoop的壓縮包解壓及環(huán)境變量配置
hadoop的完全分布式集群电媳,先server1
機(jī)器將hadoop的環(huán)境配置好踏揣,通過scp
命令同步到server2
和server3
機(jī)器上。
5.1 上傳hadoop的壓縮包
scp d:/dsoftmanager/hadoop-2.7.5.tar.gz hadoop@192.168.108.11:/home/hadoop
5.2 壓縮hadoop包
- 5.2.1 創(chuàng)建
/hadoop
目錄
sudo mkdir /hadoop
- 5.2.2 將hadoop壓縮包復(fù)制到
/hadoop
目錄
sudo cp /home/hadoop/hadoop-2.7.5.tar.gz /hadoop
- 5.2.3 解壓hadoop包
# 進(jìn)入/hadoop目錄
cd /hadoop
# 解壓hadoop包
sudo tar -zxvf hadoop-2.7.5.tar.gz
5.3 配置hadoop環(huán)境變量
打開/etc/profile文件匾乓,配置hadoop環(huán)境變量
sudo vim /etc/profile
export HADOOP_HOME=/hadoop/hadoop-2.7.5
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
5.4 重啟捞稿,測(cè)試hadoop環(huán)境變量
echo ${HADOOP_HOME}
輸出:/hadoop/hadoop2.7.5
6、hadoop的服務(wù)基本環(huán)境配置
在配置環(huán)境之前拼缝,我們需要對(duì)server1娱局,server2,server3進(jìn)行hadoop服務(wù)分配珍促。
分配如下:
server1 | server2 | server3 |
---|---|---|
namenode | --- | --- |
datanode | datanode | datanode |
--- | secondarynode | --- |
resourcemanager | --- | --- |
nodemanager | nodemanager | nodemanager |
--- | --- | historyserver |
6.1 hadoop開發(fā)目錄權(quán)限設(shè)置
把當(dāng)前目錄切換到根目錄/
铃辖。執(zhí)行ls -l
目錄。
我們可以看到hadoop目錄是root用戶權(quán)限猪叙。我們需要將權(quán)限更改為hadoop用戶娇斩。
# 更改/hadoop目錄權(quán)限
sudo chown -R hadoop:hadoop /hadoop
6.2 hadoop-env.sh文件配置
修改hadoop-env.sh的JAVA_HOME環(huán)境
# 將目錄切換到${HADOOP_HOME}目錄下
cd ${HADOOP_HOME}
# 打開etc/hadoop/hadoop-env.sh文件
sudo vim etc/hadoop/hadoop-env.sh
# 修改JAVA_HOME路徑
JAVA_HOME=/java/jdk1.8.0_151
6.3 core-site.xml文件配置
在${HADOOP_HOME}目錄下創(chuàng)建data/tmp目錄
# 創(chuàng)建data目錄
mkdir data
# 切換到data目錄
cd data
# 創(chuàng)建tmp目錄
mkdir tmp
修改core-site.xml文件
# 進(jìn)入${HADOOP_HOME}
cd ${HADOOP_HOME}
# 打開 etc/hadoop/core-site.xml文件
sudo vim etc/hadoop/core-site.xml
修改內(nèi)容:
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://server1:8020</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/hadoop/hadoop-2.7.5/data/tmp</value>
</property>
</configuration>
6.4 hdfs-site.xml文件配置
修改 etc/hadoop/hdfs-site.xml文件
sudo vim etc/hadoop/hdfs-site.xml
修改內(nèi)容:
<configuration>
<!-- 指定HDFS副本的數(shù)量 -->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<!--指定secondaryNameNode的地址和端口號(hào)-->
<name>dfs.namenode.secondary.http-address</name>
<value>server2:50090</value>
</property>
</configuration>
6.5 配置slaves
打開slaves文件
sudo vim etc/hadoop/slaves
修改內(nèi)容如下:
server1
server2
server3
6.5 yarn-site.xml文件配置
打開yarn-site.xml文件
sudo vim etc/hadoop/yarn-site.xml
修改內(nèi)容:
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<!--resourcemanager服務(wù)指定地址-->
<name>yarn.resourcemanager.hostname</name>
<value>server1</value>
</property>
<property>
<!--啟動(dòng)日志聚集功能-->
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<!--日志保存時(shí)間-->
<name>yarn.log-aggregation.retain-seconds</name>
<value>106800</value>
</property>
</configuration>
6.6 mapred-site.xml文件配置
從mapred-site.xml.template復(fù)制一個(gè)mapred-site.xml
sudo cp etc/hadoop/mapred-site.xml.template etc/hadoop/mapred-site.xml
修改mapred-site.xml文件
sudo vim etc/hadoop/mapred-site.xml
修改內(nèi)容:
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<!--historyserver地址為server3-->
<name>mapreduce.jobhistory.address</name>
<value>server3:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>server3:19888</value>
</property>
</configuration>
7 將/hadoop目錄通過scp命令傳輸?shù)絪erver2和server3機(jī)器
7.1 分別在server2和server3機(jī)器上創(chuàng)建一個(gè)/hadoop目錄
sudo mkdir /hadoop
7.2 修改/hadoop用戶權(quán)限
sudo chown -R hadoop:hadoop /hadoop
7.3 scp命令將server1的/hadoop/hadoop2.7.5目錄發(fā)送到server2和server3的/hadoop目錄
# 將server1的/hadoop/hadoop2.7.5通過scp發(fā)送到server2的/hadoop目錄
scp /hadoop/hadoop2.7.5 server2:/hadoop
scp /hadoop/hadoop2.7.5 server3:/hadoop
7.4 配置server2和server3的hadoop環(huán)境變量
server2和server3的hadoop的環(huán)境配置
sudo vim /etc/profile
export HADOOP_HOME=/hadoop/hadoop-2.7.5
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
8仁卷、格式化namenode
bin/hdfs namenode -format
9、hadoop的服務(wù)啟動(dòng)
9.1 server1啟動(dòng)dfs服務(wù)
sbin/start-dfs.sh
9.2 server1啟動(dòng)yarn服務(wù)
sbin/start-yarn.sh
9.3 啟動(dòng)server3的historyserver
sbin/mr-jobhistory-daemon.sh start historyserver
9犬第、hadoop的wordcount案例測(cè)試
9.1 創(chuàng)建一個(gè)wc.input文件
在/home/hadoop目錄下锦积,創(chuàng)建一個(gè)wc.input文件
vim /home/hadoop/wc.input
9.2 在HDFS創(chuàng)建輸入目錄/wordcounttest/input
bin/hdfs dfs -mkdir -p /wordcounttest/input
9.3 將wc.inpt文件上傳到hdfs中
bin/hdfs dfs -put /home/hadoop/wc.input /wordcounttest/input
9.4 運(yùn)行wordcount的demo
bin/yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.5.jar wordcount /wordcounttest/input /wordcounttest/output
9.5 運(yùn)行結(jié)果查看
- 9.5.1 查看輸出目錄
bin/hdfs dfs -ls /wordcounttest/output/
結(jié)果:
Found 2 items
-rw-r--r-- 3 hadoop supergroup 0 2018-01-31 06:33 /wordcounttest/output/_SUCCESS
-rw-r--r-- 3 hadoop supergroup 140 2018-01-31 06:33 /wordcounttest/output/part-r-00000
- 9.5.2 查看輸出結(jié)果
bin/hdfs dfs -cat /wordcounttest/output/part-r-00000
10、關(guān)閉服務(wù)
10.1 關(guān)閉dfs服務(wù)
sbin/stop-dfs.sh
10.2關(guān)閉yarn服務(wù)
sbin/stop-yarn.sh
10.3 關(guān)閉historyserver服務(wù)
sbin/mr-jobhistory-daemon.sh stop historyserver
10.4 關(guān)閉所有服務(wù)
sbin/stop-all.sh