hadoop3.0的全分佈式搭建折騰了好久,因爲網上基本上都是2.x的搭建教程,期間有好幾個坑比較難弄,不過最後還是都解決了,下面簡要記錄筆者的搭建過程,以及遇到的坑。
搭建環境:CentOS7+hadoop3.0.3+jdk8
集羣配置:1臺主節點+3臺子節點
主節點:hadoop1
子節點:hadoop2 hadoop3 hadoop4
前提準備
- 安裝scp服務
- 安裝配置jdk
- 配置靜態ip地址
- 修改主機名
- 配置主機名和ip地址映射
- 關閉防火牆,設置開機不自啓動
注:以上操作在筆者之前的Linux相關筆記中均有介紹
正式搭建集羣
- 在所有機器添加統一用戶hadoop
useradd hadoop
passwd hadoop - 配置sudo免密
在root用戶下
vi /etc/sudoers
在
root ALL=(ALL) ALL
下面添加
hadoop ALL=(ALL) ALL
修改完退出root用戶,回到hadoop用戶 - 創建hadoop相關目錄
mkdir -p /home/hadoop/apps/dfs/data
mkdir /home/hadoop/apps/dfs/name
mkdir /home/hadoop/apps/tmp - 上傳並解壓hadoop-3.0.3.tar.gz到apps目錄下
sftp上傳
tar -zxvf hadoop-3.0.3.tar.gz -C /home/hadoop/apps/ - 配置hadoop-env.sh
vi /home/hadoop/apps/hadoop-3.0.3/etc/hadoop/hadoop-env.sh
找到#export JAVA_HOME
在下面添加
export JAVA_HOME=/usr/local/jdk - 修改核心配置文件core-site.xml
vi core-site.xml
在configuration標籤中添加屬性
<configuration>
<property>
<name>fs.defaultFS</name> #默認
<value>hdfs://hadoop1:9000</value> #hdfs的api接口
</property>
<property>
<name>hadoop.tmp.dir</name> #hadoop運行時產生臨時數據的存儲目錄
<value>/home/hadoop/apps/tmp</value> #該目錄的地址
</property>
</configuration>
- 配置hadoop的底層存儲hdfs-site.xml
vi hdfs-site.xml
在configuration標籤中添加屬性
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop1:50090</value>
</property>
<property>
<name>dfs.replication</name> #設置副本個數
<value>3</value>
</property>
<property>
<name>dfs.namenode.name.dir</name> #設置namende數據存放點
<value>file:/home/hadoop/apps/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name> #設置datanode數據存放點
<value>file:/home/hadoop/apps/dfs/data</value>
</property>
</configuration>
- 複製並重命名mapred-site.xml.template
cp mapred-site.xml.template mapred-site.xml - 修改配置文件mapred-site.xml
vi mapred-site.xml
在configuration標籤中添加屬性
<configuration>
<property>
<name>mapreduce.framwork.name</name> #設置mapreduce的運行平臺的名稱
<value>yarn</value> #設置mapreduce的運行平臺爲yarn
</property>
</configuration>
- 修改配置文件yarn-site.xml
vi yarn-site.xml
在configuration標籤中添加屬性
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name> #指定yarn的老大的地址
<value>hadoop1</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name> #reducer獲取數據的方式
<value>mapreduce_shuffle</value>
</property>
</configuration>
- 修改workers文件
注:這個文件是填寫從節點的主機名稱
添加
hadoop2
hadoop3
hadoop4 - 將apps文件夾分發到其他機器
scp -r /home/hadoop/apps hadoop2:/home/hadoop/
scp -r /home/hadoop/apps hadoop3:/home/hadoop/
scp -r /home/hadoop/apps hadoop4:/home/hadoop/ - 配置hadoop的環境變量
sudo vi ~/.bash_profile
添加
HADOOP_HOME=/home/hadoop/apps/hadoop-3.0.3
PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export HADOOP_HOME PATH
重新加載
source ~/.bash_profile - 在其他機器同樣配置hadoop的環境變量
- 格式化hdfs(沒事不要用這個命令,蛋疼)
hdfs namenode -format - 配置hadoop用戶免密登錄
ssh-keygen
ssh-copy-id hadoop1
ssh-copy-id hadoop2
ssh-copy-id hadoop3
ssh-copy-id hadoop4 - 啓動hdfs集羣
start-dfs.sh
停止hdfs
stop-dfs.sh - 啓動yarn集羣
start-yarn.sh
停止yarn
stop-yarn.sh - 啓動所有服務(不推薦)
start-all.sh
相當於start-dfs.sh+start-yarn.sh - 停止所有服務
stop-all.sh - 在瀏覽器查看
hadoop1:9870
hadoop1:8088 - 查看該集羣根目錄
hdfs dfs -ls / - 創建自己的家目錄
hdfs dfs -mkdir /user/xujie - 測試實例
cd /home/hadoop/apps/hadoop-3.0.3/share/hadoop/mapreduce/
調用jar包計算pi的值,計算100次
hadoop jar hadoop-mapreduce-examples-3.0.3.jar pi 3 100
問題彙總
- 沒有配置文件salves
解決方案:因爲3.0以後slaves更改名稱爲workers了 - 啓動所有服務,datanode卻沒有啓動
一般是hdfs格式化以後運行了程序,然後又格式化了,好了gg,datanode無法啓動,因爲name的clusterID和data的clusterID不一致了。
解決方案:
- 方案一:刪除/home/hadoop/apps/dfs/data和/home/hadoop/apps/dfs/name文件夾裏的所有內容,重新再hdfs格式化一遍。
- 方案二:把/home/hadoop/apps/dfs/name/current/VERSION中的clusterID複製替換/home/hadoop/apps/dfs/data/current/VERSION中的clusterID
- 啓動從節點報錯
解決方案:不要在格式化hdfs以後產生了相關數據以後才scp整個hadoop到其他機器,會產生衝突。