Hadoop叢集環境搭建(雲伺服器,虛擬機器都適用)
阿新 • • 發佈:2018-12-14
- 為了配置方便,為每臺電腦配置一個主機名:
- vim /etc/hostname
- 各個節點中,主節點寫入:master , 其他從節點寫入:slavexx
- 如果這樣修改不能生效,則繼續如下操作
- vim /etc/cloud/cloud.cfg 做preserve_hostname: true 修改
- reboot重啟,這時應該就修改過來了
- 主機名稱與ip的繫結:(雲伺服器配置這裡有大坑)
- vim /etc/hosts 新增如下資訊
- 本機ip 本機hostname
- 其他節點xx的ip 其他節點xx的hostname
- 需要注意的是,如果是雲伺服器搭建,一般買來的伺服器會提供一個內網ip,一個公網ip,這裡配置時,其他節點ip是公網ip,本機ip是ifconfig得到的內網ip
- 上面配置生效可能要reboot重啟
- 設定ssh免登入處理,也就是master節點無密碼登入各個slave節點:
- 根目錄中,檢視是否有.ssh的配置檔案,有就要先刪除: rm -rf ~/.ssh
- 在master的節點上生成ssh key: ssh-keygen -t rsa 一路回車
- 將公鑰資訊儲存到另一個檔案:
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
- 將公鑰資訊複製到id_rsa_master.pub:
cp .ssh/id_rsa.pub ~/id_rsa_master.pub
- 將此id_rsa_master.pub檔案,複製到各個slave節點的~/.ssh目錄中去(可以通過secureCRT提供的ftp功能)
- 免登入測試:ssh [email protected] 此時就進入了從節點slavexx的終端,退出可以用exit
- 在/usr/local/hadoop 中建立如下目錄:mkdir hdfs hdfs/tmp hdfs/data hdfs/name。 如果hadoop出問題,需要重新配置時,這些檔案記得徹底刪除再重新建立
- 進入 cd /usr/local/hadoop/etc/hadoop ,準備對如下四個檔案進行配置:
- 配置core-site.xml檔案,在標籤中新增如下程式碼,注意hadoop.tmp.dir的value目錄與剛剛建立的tmp目錄要一致
<property> <
- 配置 hadoop-env.sh檔案
# The java implementation to use. export JAVA_HOME=/usr/local/jdk
- 配置 yarn-env.sh檔案
# some Java parameters export JAVA_HOME=/usr/local/jdk
- 配置hdfs-site.xml,在標籤中新增如下程式碼。注意其中dfs.namenode.name.dir和dfs.datanode.data.dir的value和之前建立的/hdfs/name和/hdfs/data路徑一致;因為我只有一個從節點slave1,所以dfs.replication設定為1
<property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:/usr/local/hadoop/hdfs/name</value> <final>true</final> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:/usr/local/hadoop/hdfs/data</value> <final>true</final> </property> <property> <name>dfs.namenode.secondary.http-address</name> <value>master:9001</value> </property> <property> <name>dfs.webhdfs.enabled</name> <value>true</value> </property> <property> <name>dfs.permissions</name> <value>true</value> </property>
- 複製mapred-site.xml.template模板檔案:cp mapred-site.xml.template mapred-site.xml ,然後在標籤中新增如下程式碼:
<property> <name>mapreduce.framework.name</name> <value>yarn</value> </property>
- 配置yarn-site.xml,在標籤中新增如下程式碼:
<property> <name>yarn.resourcemanager.address</name> <value>master:18040</value> </property> <property> <name>yarn.resourcemanager.scheduler.address</name> <value>master:18030</value> </property> <property> <name>yarn.resourcemanager.webapp.address</name> <value>master:18088</value> </property> <property> <name>yarn.resourcemanager.resource-tracker.address</name> <value>master:18025</value> </property> <property> <name>yarn.resourcemanager.admin.address</name> <value>master:18141</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.nodemanager.auxservices.mapreduce.shuffle.class</name> <value>org.apache.hadoop.mapred.ShuffleHandler</value> </property>
- 配置slaves 檔案:vim slaves 新增所有從節點的hostname,然後儲存退出
- 配置masters檔案:vim masters 新增主節點的hostname,然後儲存退出
- 要確保所有節點的防火牆已經關閉,以防出現一下錯誤:(雲伺服器配置這裡有大坑)
- could only be replicated to 0 nodes instead of minReplication (=1). There are …
- ubuntu中的防火牆是ufw防火牆:狀態檢視:ufw status 開啟:ufw enable 關閉:ufw disable
- 需要注意的是,如果是雲伺服器搭建,有的雲服務平臺會預設開啟一些埠的防火牆,比如阿里雲的伺服器就預設開啟了三個埠的防火牆,此時要想在不同節點之間成功傳輸資料,就要:1,把ubuntu裡的防火牆關了 2,把阿里雲伺服器上提供的防火牆埠全部開啟。
- 各個節點都要進行如上配置
- 在master節點格式化系統: hdfs namenode -format
- 終端輸入:jps 命令,若主節點出現如下程序:
從節點出現如下程序:5664 SecondaryNameNode 14392 Jps 5821 ResourceManager 5439 NameNode
則說明配置成功21557 NodeManager 21432 DataNode 24558 Jps
- 接下來可以試著編寫一個hadoop界的“hello world”程式:wordcount,來測試一下配置好的叢集了。