1. 程式人生 > >hadoop分散式叢集搭建及其常見問題

hadoop分散式叢集搭建及其常見問題

hadoop分散式叢集的搭建
這裡我用3臺虛擬機器搭建hadoop叢集——分別為:mini1、mini2、mini3。hadoop版本為:hadoop-2.8.4版本。
下載地址:hadoop-2.8.4密碼:nt81

  1. 配置三臺虛擬機器主機對映:
    修改/etc/hosts檔案
#主機IP		對映名稱
192.168.111.32 mini1
192.168.111.34 mini2
192.168.111.33 mini3

沒有配置主機對映,則在啟動叢集時會報如下錯誤:
在這裡插入圖片描述
2. 配置三臺虛擬機器免密登入:

ssh-keygen 					#生成公鑰與私鑰
ssh-copy-id 對映名稱			#將公鑰分發給其他三臺機器(包括自己)
							#分發完之後可以用ssh 主機名檢查是否配置成功

若沒有配置免密登入,則在啟動叢集時會讓輸所有機器的密碼:
在這裡插入圖片描述
3. 關閉三臺虛擬機器防火牆機器selinux(此配置可以不改):

vim /etc/sysconfig/selinux			#linux的安全認證
修改SELINUX=disabled
service iptables status             #檢視防火牆狀態
service iptables stop				#關閉防火牆
chkconfig iptables off				#關閉防火牆開機自啟
  1. 上傳JDK安裝包並解壓(若已安裝openjdk,請先解除安裝之後再裝JDK),修改/etc/profile檔案,新增環境變數:
    這裡我解壓在/usr/local目錄裡
rpm -qa|grep jdk    											#檢查是否已經安裝JDK
rpm -e --nodeps jdk(上一命令查到的JDK,若無,可不執行) 			#強制刪除已安裝的JDK
vim /etc/profile												#修改profile檔案(新增已下兩句)
export JAVA_HOME=/usr/local/jdk1.8.0_111  						#配置JDK環境變數
export PATH=$JAVA_HOME/bin:$PATH
#修改完成之後 source /etc/profile
#執行java -version檢視是否安裝成功
  1. 上傳hadoop安裝包並解壓,修改/etc/profile檔案,新增環境變數:
vim /etc/profile												#修改profile檔案(新增已下兩句)
export HADOOP_HOME=/usr/local/hadoop-2.8.4 						#配置HADOOP環境變數
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
#修改完成之後 source /etc/profile
#執行hadoop version檢視是否安裝成功
  1. 修改hadoop-2.8.4/etc/hadoop/hadoop-env.sh:
export JAVA_HOME=/usr/local/jdk1.8.0_111 				#新增java環境
  1. 建立/usr/local/hadoop-2.8.4/temp/hdfs資料夾,並在hdfs檔案下建立data、name兩個資料夾(data、name資料夾可以不建立),若報如下錯誤:
    在這裡插入圖片描述
    則是許可權不夠,修改該目錄許可權即可:
    sudo chmod -R a+w temp
  2. 修改hadoop-2.8.4/etc/hadoop/core-site.xml:
  <!-- 指定HDFS老大(namenode)的通訊地址 -->
     <property>
        <name>fs.defaultFS</name>
        <value>hdfs://mini1:9000</value>
     </property>
     <!-- 指定hadoop執行時產生檔案的儲存路徑 ,若沒有配置則存在/tmp檔案中,容易造成核心資料丟失-->
     <property>
        <name>hadoop.tmp.dir</name>
        <value>/usr/local/hadoop-2.8.4/temp</value>
     </property>
  1. 修改hadoop-2.8.4/etc/hadoop/hdfs-site.xml:
     <!-- 設定namenode的http通訊地址 -->
    <property>
        <name>dfs.namenode.http-address</name>
        <value>mini1:50070</value>
    </property>
    <!-- 設定secondarynamenode的http通訊地址 -->
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>mini2:50090</value>
    </property>
    <!-- 設定namenode存放的路徑 -->
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>/usr/local/hadoop-2.8.4/temp/hdfs/name</value>
    </property>
    <!-- 設定hdfs副本數量 -->
    <property>
        <name>dfs.replication</name>
        <value>2</value>
    </property>
    <!-- 設定datanode存放的路徑 -->
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>/usr/local/hadoop-2.8.4/temp/hdfs/data</value>
    </property>
  1. 修改hadoop-2.8.4/etc/hadoop/yarn-site.xml:
<configuration>
<property>
<!--設定yarn資源管理者-->
<name>yarn.resourcemanager.hostname</name>
<value>mini1</value>
</property>
<property>
<!--設定NodeManager上執行的附屬服務。需配置成mapreduce_shuffle,才可執行MapReduce程式-->
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- Site specific YARN configuration properties -->
</configuration>
  1. 修改hadoop-2.8.4/etc/hadoop/mapred-site.xml(預設檔案為mapred-site.xml.template,需自己將該檔案改為mapred-site.xml):
<configuration>
<property>
<!--配置job為分散式模式,注意通常情況下這個配置的值都設定為 Yarn,如果沒有配置這項,那麼提交的 Yarn job 只會執行在 locale 模式,而不是分散式模式-->
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
  1. 修改hadoop-2.8.4/etc/hadoop/slaves
#去掉第一行的localhost
#配置從節點
mini1
mini2
mini3
  1. 將hadoop資料夾、/etc/profile、/etc/hosts分發給其他機器
  2. 格式化namenode,啟動叢集
hadoop namenode -format       					#格式化節點
start-dfs.sh									#啟動hdfs
start-yarn.sh									#啟動yarn
#可以用jps檢視

其他問題:
1.datanode不能啟動或只啟動一個
原因:因多次格式化namenode導致namenode和datanode的clusterID不一致無法啟動datanode。
解決辦法:
1、刪除了tmp,logs,hdfs/data,hdfs/name 目錄下的所有檔案;
2、重新格式化namenode: bin/hdfs namenode -format;重啟叢集;
2.jps檢視所有節點都啟動了,但hadoop頁面上沒有datanode顯示
原因:防火牆沒關閉
解決辦法:
關閉防火牆
centos7:systemctl stop firewalld.service
centos6: service iptables stop
3.報如下錯誤
在這裡插入圖片描述
原因:該目錄在當前使用者下,某些許可權不夠
解決辦法:將該目錄改為屬於當前使用者
sudo chown -R (當前使用者名稱) data
4.報如下錯誤:
Starting namenodes on [master]
master: chown: changing ownership of ‘/home/zf/hadoop/hadoop-2.8.4/logs’: Operation not permitted

原因:檔案許可權問題
解決辦法:sudo chmod a+w logs
5.報如下錯誤:
在這裡插入圖片描述
resourcemanager與namenode配置不是同一臺機器,所以啟動yarn,需要在resourcemanager那臺機器上啟動