Hadoop-全分佈式配置
一、配置基礎環境
需要用到三台主機,一台做master節點,兩台做slave節點。三個節點分別配置網絡、主機名、及主機名與IP的映射關係
1、配置網絡信息
master_wzg節點的IP為192.168.100.10
slave1_wzg節點的IP為192.168.100.20
slave2_wzg節點的IP為192.168.100.30
以master_wzg節點為例(在所有節點上執行)
[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=da1a701d-8cee-4e1d-9423-56280232e595
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.100.10
PREFIX=24
GATEWAY=192.168.100.2
DNS1=114.114.114.114
[root@localhost ~]# systemctl restart network
[root@localhost ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:af:2f:d2 brd ff:ff:ff:ff:ff:ff
inet 192.168.100.10/24 brd 192.168.100.255 scope global ens33
valid_lft forever preferred_lft forever
inet6 fe80::9ef7:e697:cc63:418b/64 scope link
valid_lft forever preferred_lft forever
2、配置主機名
以master_wzg節點為例(在所有節點上執行)
[root@localhost ~]# hostnamectl set-hostname master_wzg.example.com
[root@localhost ~]# bash
[root@master_wzg ~]# hostname
master_wzg.example.com
3、主機名與IP的映射關係
以master_wzg節點為例(在所有節點上執行)
[root@master_wzg ~]# vi /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.100.10 master_wzg master_wzg.example.com
192.168.100.20 slave1_wzg slave1_wzg.example.com
192.168.100.30 slave2_wzg slave2_wzg.example.com
4、測試互通性
以master_wzg節點為例(在所有節點上執行)
[root@master_wzg ~]# ping master_wzg
PING master_wzg (192.168.100.10) 56(84) bytes of data.
64 bytes from master_wzg (192.168.100.10): icmp_seq=1 ttl=64 time=0.031 ms
64 bytes from master_wzg (192.168.100.10): icmp_seq=2 ttl=64 time=0.017 ms
^C
--- master_wzg ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 0.017/0.024/0.031/0.007 ms
[root@master_wzg ~]# ping slave1_wzg
PING slave1_wzg (192.168.100.20) 56(84) bytes of data.
64 bytes from slave1_wzg (192.168.100.20): icmp_seq=1 ttl=64 time=0.207 ms
64 bytes from slave1_wzg (192.168.100.20): icmp_seq=2 ttl=64 time=0.394 ms
^C
--- slave1_wzg ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 0.207/0.300/0.394/0.095 ms
[root@master_wzg ~]# ping slave2_wzg
PING slave2_wzg (192.168.100.30) 56(84) bytes of data.
64 bytes from slave2_wzg (192.168.100.30): icmp_seq=1 ttl=64 time=0.342 ms
64 bytes from slave2_wzg (192.168.100.30): icmp_seq=2 ttl=64 time=0.464 ms
^C
--- slave2_wzg ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.342/0.403/0.464/0.061 ms
二、關閉防火牆和SELinux
以master_wzg節點為例(在所有節點上執行)
1、關閉防火牆
[root@master_wzg ~]# systemctl stop firewalld
[root@master_wzg ~]# systemctl enabled firewalld
2、關閉SELinux
[root@master_wzg ~]# setenforce 0
[root@master_wzg ~]# vi /etc/selinux/config
SELINUX=disabled
三、安裝 Hadoop
首先連接SecureCRT,傳輸壓縮包jdk-8u152-linux-x64.tar.gz和hadoop-2.7.1.tar.gz到/root目錄下
(以下5步只在master_wzg節點上執行)
1、解壓hadoop和jdk安裝包
需要解壓hadoop和jdk安裝包到/usr/local/src/目錄下
[root@master_wzg ~]# tar -zxf hadoop-2.7.1.tar.gz -C /usr/local/src/
[root@master_wzg ~]# tar -zxf jdk-8u152-linux-x64.tar.gz -C /usr/local/src/
[root@master_wzg ~]# cd /usr/local/src/
[root@master_wzg src]# ls
hadoop-2.7.1 jdk1.8.0_152
2、重命名為hadoop和jdk
[root@master_wzg src]# mv hadoop-2.7.1/ hadoop
[root@master_wzg src]# mv jdk1.8.0_152/ jdk
[root@master_wzg src]# ls
hadoop jdk
3、配置Hadoop環境變量
因為每個節點的配置信息可能不一樣,所以我們可以自己創建一個文件,方便後面複製到slave節點
[root@master_wzg ~]# vi /etc/profile.d/hadoop.sh
export JAVA_HOME=/usr/local/src/jdk
export HADOOP_HOME=/usr/local/src/hadoop
export PATH=${JAVA_HOME}/bin:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin:$PATH
4、使環境變量生效
[root@master_wzg ~]# source /etc/profile.d/hadoop.sh
[root@master_wzg ~]# echo $PATH
/usr/local/src/jdk/bin:/usr/local/src/hadoop/bin:/usr/local/src/hadoop/sbin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
看到jdk/bin:,hadoop/bin:,hadoop/sbin:,就說明環境變量地址配置正確了
5、修改hadoop-env.sh配置文件
將JAVA_HOME環境變量地址修改為/usr/local/src/jdk
[root@master_wzg ~]# vi /usr/local/src/hadoop/etc/hadoop/hadoop-env.sh
將
export JAVA_HOME=${JAVA_HOME}
改為:
export JAVA_HOME=/usr/local/src/jdk
四、配置hdfs-site.xml文件
對於 Hadoop 的分佈式文件系統 HDFS 而言,一般都是採用冗餘存儲,冗餘因子通常為 3,也就是說,一份數據保存三份副本,實驗環境下可以設置為2。
hdfs-site.xml配置文件主要參數
參數名 | 默認值 | 參數解釋 |
---|---|---|
dfs.namenode.secondary.http-address | 0.0.0.0:50090 | 定義 HDFS 對應的 HTTP 服務器地址和端口 |
dfs.namenode.name.dir | file://${hadoop.tmp.dir}/dfs/name | 定義 DFS 的名稱節點在本地文件系統的位置 |
dfs.datanode.data.dir | file://${hadoop.tmp.dir}/dfs/data | 定義 DFS 數據節點存儲數據塊時存儲在本地文件系統的位置 |
dfs.replication | 3 | 缺省的塊複製數量 |
dfs.webhdfs.enabled | true | 是否通過 http 協議讀取 hdfs 文件, 如果選是,則集群安全性較差 |
(只在master_wzg節點執行)
[root@master_wzg ~]# vi /usr/local/src/hadoop/etc/hadoop/hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/src/hadoop/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/src/hadoop/dfs/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
</configuration>
# 創建路徑中的文件夾
[root@master_wzg ~]# mkdir -p /usr/local/src/hadoop/dfs/{name,data}
五、配置core-site.xml文件
如沒有配置 hadoop.tmp.dir 參數,此時系統默認的臨時目錄為:/tmp/hadoop-hadoop。 該目錄在每次 Linux 系統重啟後會被刪除,必須重新執行 Hadoop 文件系統格式化命令,否則 Hadoop 運行會出錯。
core-site.xml配置文件主要參數
參數名 | 默認值 | 參數解釋 |
---|---|---|
fs.defaultFS | file:/// | 文件系統主機和端口 |
io.file.buffer.size | 4096 | 流文件的緩衝區大小 |
hadoop.tmp.dir | /tmp/hadoop-${user.name} | 臨時文件夾 |
(只在master_wzg節點執行)
[root@master_wzg ~]# vi /usr/local/src/hadoop/etc/hadoop/core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master_wzg:9000</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/src/hadoop/tmp</value>
</property>
</configuration>
# 創建路徑中的文件夾
[root@master_wzg ~]# mkdir -p /usr/local/src/hadoop/tmp
六、配置mapred-site.xml文件
Hadoop 提供了一種機制,管理員可以通過該機制配置 NodeManager 定期運行管理員提供的腳本,以確定節點是否健康。
管理員可以通過在腳本中執行他們選擇的任何檢查來確定節點是否處於健康狀態。如果腳本檢測到節點處於不健康狀態,則必須打印以字符串 ERROR 開始的一行信息到標準輸出。NodeManager 定期生成腳本並檢查該腳本的輸出。如果腳本的輸出包含如上所述的字符串 ERROR,就報告該節點的狀態為不健康的,且由 NodeManager 將該節點列入黑名單,沒有進一步的任務分配給這個節點。但是,NodeManager 繼續運行腳本,如果該節點再次變得正常, 該節點就會從 ResourceManager 黑名單節點中自動刪除。節點的健康狀況隨着腳本輸出,如果節點有故障,管理員可用 ResourceManager Web 界面報告,節點健康的時間也在 Web 界面上顯示。
注意:默認是沒有mapred-site.xml文件的,需要將mapred-site.xml.template複製一份命名為 mapred-site.xml
mapred-site.xml配置文件主要參數
參數名 | 默認值 | 參數解 |
---|---|---|
mapreduce.framework.name | local | 取值local、classic或 yarn 其中之一,如果不是yarn,則不會使用 YARN 集群來實現資源的分配 |
mapreduce.jobhistory.address | 0.0.0.0:10020 | 定義歷史服務器的地址和端口,通過歷史服務器查看已經運行完的Mapreduce作業記錄 |
mapreduce.jobhistory.webapp.addres | 0.0.0.0:19888 | 定義歷史服務器 web 應用訪問的地址和端口 |
(只在master_wzg節點執行)
[root@master_wzg ~]# cd /usr/local/src/hadoop/etc/hadoop/
[root@master_wzg hadoop]# cp mapred-site.xml.template mapred-site.xml
[root@master_wzg hadoop]# ls
capacity-scheduler.xml httpfs-env.sh mapred-env.sh
configuration.xsl httpfs-log4j.properties mapred-queues.xml.template
container-executor.cfg httpfs-signature.secret mapred-site.xml
core-site.xml httpfs-site.xml mapred-site.xml.template
hadoop-env.cmd kms-acls.xml slaves
hadoop-env.sh kms-env.sh ssl-client.xml.example
hadoop-metrics2.properties kms-log4j.properties ssl-server.xml.example
hadoop-metrics.properties kms-site.xml yarn-env.cmd
hadoop-policy.xml log4j.properties yarn-env.sh
hdfs-site.xml mapred-env.cmd yarn-site.xml
[root@master_wzg hadoop]# vi /usr/local/src/hadoop/etc/hadoop/mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>master_wzg:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master_wzg:19888</value>
</property>
</configuration>
七、配置yarn-site.xml文件
yarn-site.xml文件參數中很多參數沒有專門配置,多數情況下使用默認值。例如,可以追加以下兩個參數配置項 yarn.resourcemanager.hostname( 即 資 源 管 理 器 主 機 ) 和 「yarn.nodemanager.aux-services」(即 YARN 節點管理器輔助服務),若要將主節點也作為資源管理主機配置,則配置值分別為「Master_hadoop」、「mapreduce_shuffle」。
在 yarn-site.xml 中可以配置相關參數來控制節點的健康監測腳本。如果只有一些本地磁盤出現故障,健康檢查腳本不應該產生錯誤。NodeManager 有能力定期檢查本地磁盤的 健康狀況(特別是檢查 NodeManager 本地目錄和 NodeManager 日誌目錄),並且在達到基於 「yarn.nodemanager.disk-health-checker.min-healthy-disks」屬性的值設置的壞目錄數量閾值之後,整個節點標記為不健康,並且這個信息也發送到資源管理器。無論是引導磁盤受到攻擊,還是引導磁盤故障,都會在健康檢查腳本中標識。
yarn-site.xml配置文件主要參數
參數名 | 默認值 | 參數解釋 |
---|---|---|
yarn.resourcemanager.address | 0.0.0.0:8032 | ResourceManager提供給客戶端訪問的地址。客戶端通過該地址向RM提交應用程序,殺死應用程序等 |
yarn.resourcemanager.scheduler.address | 0.0.0.0:8030 | 定義調度器的地址和端口,通過歷史服務器查看已經運行完的Mapreduce作業記錄 |
yarn.resourcemanager.resource-tracker.address | 0.0.0.0:8031 | ResourceManager提供給NodeManager的地址.NodeManager通過該地址向RM彙報心跳,領取任務等 |
yarn.resourcemanager.admin.address | 0.0.0.0:8033 | ResourceManager提供給管理員的訪問地址。管理員通過該地址向RM發送管理命令等 |
yarn.resourcemanager.webapp.address | 0.0.0.0:8088 | ResourceManager對 web 服務提供地址。用戶可通過該地址在瀏覽器中查看集群各類信息 |
yarn.nodemanager.aux-services | org.apache.hadoop.mapred.ShuffleHandler | 通過該配置項,用戶可以自定義一些服務,例如Map-Reduce的shuffle功能就是採用這種方式實現的,這樣就可以在NodeManager上擴展自己的服務。 |
(只在master_wzg節點執行)
[root@master_wzg hadoop]# vi /usr/local/src/hadoop/etc/hadoop/yarn-site.xml
<configuration>
<property>
<name>yarn.resourcemanager.address</name>
<value>master_wzg:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>master_wzg:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master_wzg:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>master_wzg:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>master_wzg:8088</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
</configuration>
八、Hadoop其他相關配置
1、配置masters和slaves文件
slaves 文件默認為 localhost(即把本機作為數據節點),在偽分佈式配置時,就採用了這種默認的配置,使得節點既作為名稱節點也作為數據節點。在進行分佈式配置時,可以保留 localhost,讓 Master 節點同時充當名稱節點和數據節點,或者也可以刪掉 localhost 這行,讓 Master 節點僅作為名稱節點使用。本實驗 Master 節點僅作為名稱節點使用,因此將 slaves 文件中原來的 localhost 刪除,並添加 slave1、slave2 節點的 IP 地址。
注意:默認是沒有masters和slaves文件的,並且 slaves 文件中默認有 localhost
(在master_wzg節點執行)
[root@master_wzg hadoop]# vi /usr/local/src/hadoop/etc/hadoop/masters
192.168.100.10
[root@master_wzg hadoop]# vi /usr/local/src/hadoop/etc/hadoop/slaves
192.168.100.20
192.168.100.30
2、創建Hadoop用戶
(在master_wzg節點執行)
[root@master_wzg hadoop]# useradd hadoop
[root@master_wzg hadoop]# echo 'hadoop' | passwd --stdin hadoop
Changing password for user hadoop.
passwd: all authentication tokens updated successfully.
3、修改目錄權限
修改/usr/local/src/目錄的權限,使這個目錄的所屬用戶和所屬組為hadoop
(在master_wzg節點執行)
[root@master_wzg hadoop]# chown -R hadoop.hadoop /usr/local/src/
[root@master_wzg hadoop]# ll /usr/local/src/
total 0
drwxr-xr-x. 11 hadoop hadoop 171 Mar 25 16:33 hadoop
drwxr-xr-x. 8 hadoop hadoop 255 Sep 14 2017 jdk
4、配置免密登錄slave節點
(在master_wzg節點執行)
[root@master_wzg hadoop]# ssh-keygen -t rsa
[root@master_wzg hadoop]# ssh-copy-id root@slave1_wzg
[root@master_wzg hadoop]# ssh-copy-id root@slave2_wzg
5、將配置文件複製到slave節點
(在master_wzg節點執行)
#將/usr/local/src下的所有文件複製到slave節點
[root@master_wzg hadoop]# scp -r /usr/local/src/* root@slave1_wzg:/usr/local/src/
……
[root@master_wzg hadoop]# scp -r /usr/local/src/* root@slave2_wzg:/usr/local/src/
……
#將環境變量的配置文件複製到slave節點
[root@master_wzg hadoop]# scp /etc/profile.d/hadoop.sh root@slave1_wzg:/etc/profile.d/
hadoop.sh 100% 151 0.2KB/s 00:00
[root@master_wzg hadoop]# scp /etc/profile.d/hadoop.sh root@slave2_wzg:/etc/profile.d/
hadoop.sh 100% 151 0.2KB/s 00:00
6、slave節點的配置
(在slave1_wzg節點執行)
1、創建Hadoop用戶
[root@slave1_wzg ~]# useradd hadoop
[root@slave1_wzg ~]# echo 'hadoop' | passwd --stdin hadoop
Changing password for user hadoop.
passwd: all authentication tokens updated successfully.
2、修改/usr/local/src/目錄的權限
[root@slave1_wzg ~]# chown -R hadoop.hadoop /usr/local/src/
[root@slave1_wzg ~]# ll /usr/local/src/
total 0
drwxr-xr-x. 11 hadoop hadoop 171 Mar 25 17:32 hadoop
drwxr-xr-x. 8 hadoop hadoop 255 Mar 25 17:32 jdk
# 3、使配置的Hadoop的環境變量生效
[root@slave1_wzg ~]# source /etc/profile.d/hadoop.sh
[root@slave1_wzg ~]# echo $PATH
/usr/local/src/jdk/bin:/usr/local/src/hadoop/bin:/usr/local/src/hadoop/sbin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
(在slave2_wzg節點執行)
1、創建Hadoop用戶
[root@slave2_wzg ~]# useradd hadoop
[root@slave2_wzg ~]# echo 'hadoop' | passwd --stdin hadoop
更改用戶 hadoop 的密碼 。
passwd:所有的身份驗證令牌已經成功更新。
2、修改/usr/local/src/目錄的權限
[root@slave2_wzg ~]# chown -R hadoop.hadoop /usr/local/src/
[root@slave2_wzg ~]# ll /usr/local/src/
總用量 0
drwxr-xr-x. 11 hadoop hadoop 171 3月 25 17:33 hadoop
drwxr-xr-x. 8 hadoop hadoop 255 3月 25 17:33 jdk
# 3、使配置的Hadoop的環境變量生效
[root@slave2_wzg ~]# source /etc/profile.d/hadoop.sh
[root@slave2_wzg ~]# echo $PATH
/usr/local/src/jdk/bin:/usr/local/src/hadoop/bin:/usr/local/src/hadoop/sbin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
聲明:未經許可,禁止轉載