Hadoop 2.0安裝以及不停集羣加datanode

Hadoop2.0是對Hadoop1.0全面升級,針對Namenode單點問題,提出了HDFS Federation,讓多個NameNode分管不一樣的目錄進而實現訪問隔離和橫向擴展。誕生了通用的計算框架YARN,YARN系統的引入使得計算框架進入了平臺化時代,從雲計算分層概念上講,YARN可看作PAAS層,不少計算框架或者應用程序再也不基於傳統的操做系統開發,而是基於YARN這個雲操做系統。典型的表明是DAG計算框架Tez,固然還有一些其餘知名的自運行的計算集羣系統也在YARN上有開源版本,好比Storm-on-yarn,Spark-on-yarn。咱們先安裝一個Hadoop2.0環境,做爲一切的開始。html

 

單機環境中,Hadoop有僞分佈式模式,即「單點集羣」,在該模式下,全部的守護進程均會運行在單個節點上。java

僞分佈式模式安裝好了以後,繼續動態加datanode,而後就是徹底分佈式的hadoopnode

但願瞭解hadoop2.0的改進以及設計的亮點能夠看這篇博文,HADOOP2.0(HDFS2)以及YARN設計的亮點linux

本文的hadoop版本是2.2.0,源碼以及編譯包的獲取地址:http://hadoop.apache.org/releases.htmlgit

[root@localhost hadoop]# pwd
/root/hadoop
[root@localhost hadoop]# ls
hadoop-2.2.0  hadoop-2.2.0.tar.gz
[root@localhost hadoop]# cd hadoop-2.2.0
[root@localhost hadoop-2.2.0]# ls
bin etc include lib libexec LICENSE.txt logs NOTICE.txt README.txt sbin share

 

步驟1 修改配置文件

修改Hadoop配置文件 ${HADOOP_HOME}/etc/hadoop/hadoop-env.sh,這個根據實際狀況修改,不過java7好像不太兼容,我這邊使用java6github

export JAVA_HOME=/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64

而後修改conf目錄下的mapred-site.xml,core-site.xml,yarn-site.xml和hdfs-site.xml四個文件,省略了最外圍的<configuration></configuration>面試

<!-- mapred-site.xml -->
<property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
</property>
<!-- core-site.xml -->
<property>
        <name>fs.default.name</name>
        <value>hdfs://192.168.12.67:8020</value>
</property>
<property>
        <name>hadoop.tmp.dir</name>
        <value>/hadoop-tmp</value>
<!-- 設置一個不會被linux按期刪除的文件夾,默認狀況下namenode和datanode的文件都會存在這個目錄下 --> </property>
<!-- yarn-site.xml -->
<property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value>
<!-- 2.2版本中不支持中劃線‘-’這邊用下劃線 --> </property>
<!-- hdfs-site.xml -->
<property> <name>dfs.replication</name> <value>1</value>
<!-- 默認狀況下,hdfs數據塊的副本數是3,在集羣規模小於3的集羣中,默認參數會致使錯誤,因此調整爲1 --> </property>

 

修改/etc/hosts,把本機hostname從原來的127.0.0.1修改成本機ipshell

192.168.12.67 localhost

修改${HADOOP_HOME}/etc/hadoop/slavesapache

192.168.12.67

 

步驟2 設置免密碼登陸

#生成免密碼公密鑰對,而後把公鑰加入本身的受權文件中,完成本機對本機的免密碼登陸
ssh-keygen -t rsa
cd ~/.ssh/
cat id_ras.pub >> authorized_keys

 

步驟3 啓動Hadoop

格式化HDFS架構

 

./bin/hadoop namenode -format

 

啓動HDFS

cd $HADOOP_HOME
./sbin/start-dfs.sh

啓動YARN

cd $HADOOP_HOME
./sbin/start-yarn.sh

 

經過如下URL可查看YARN是否啓動成功: http://192.168.12.67:8088/

 jps能夠看到運行的進程

[root@localhost hadoop-2.2.0]# jps
21454 SecondaryNameNode
31987 Jps
21302 DataNode
21718 NodeManager
21191 NameNode
21623 ResourceManager

 

 

能夠把hadoop的執行腳本加入PATH,這樣方便之後直接調用hadoop腳本,具體就是修改/etc/profile文件,而後source /etc/profile生效

export PATH=$PATH:/root/hadoop/hadoop-2.2.0/bin

運行下hadoop腳本,就能夠看到hdfs的文件系統了

[root@localhost hadoop-2.2.0]# hadoop fs -ls

hadoop提供了一個跑在yarn上的示例,能夠運行

hadoop jar share/hadoop/yarn/hadoop-yarn-applications-distributedshell-2.2.0.jar org.apache.hadoop.yarn.applications.distributedshell.Client --jar share/hadoop/yarn/hadoop-yarn-applications-distributedshell-2.2.0.jar --shell_command ls --num_containers 10 --container_memory 350 --master_memory 350 --priority 10

 顯示hadoo上正在運行的做業

hadoop job -list

 

徹底分佈式安裝,動態加datanode機器

僞分佈式安裝完成,下面試試徹底分佈式安裝(就是動態加datanode場景)、

這裏我隨便找了兩臺機器,把新加兩臺機器hostname dns解析加入namenode機器的/etc/hosts中,全部新加的機器的/etc/hosts上都要同步這個配置。不然有datanode沒法鏈接到namenode exception

192.168.1.57 yhserver

192.168.24.33 rhel6

修改${HADOOP_HOME}/etc/hadoop/slaves,加入新機器兩臺

192.168.1.57
192.168.24.33

注意,我在加加機器的時候規範了下hdfs-site.xml配置文件,把namenode文件和datanode文件,指定相應的目錄,固然這樣改了以後,就須要從新作namenode格式化的操做了。若是一開始就規範好了,就能夠不停下namenode,直接加datanode了。默認沒有配置,就是在hadoop.tmp目錄下,各創建dfs name目錄保存相應文件。

<property>
        <name>dfs.namenode.name.dir</name>
        <value>/hadoop/name</value>
</property>
<property>
        <name>dfs.datanode.data.dir</name>
        <value>/hadoop/dfs</value>
</property>

而後往新加的兩臺機器上,同步hadoop工程以及配置文件,而後設置免密碼登陸新加的兩臺機器,而後新加的機器上,各自單獨執行

./sbin/hadoop-daemon.sh start datanode

而後就能夠看到新加的兩個datanode生效了

 

問題彙總

error: org.apache.hadoop.hdfs.server.protocol.DisallowedDatanodeException: Datanode denied communication with namenode

datanode沒法鏈接到namenode,是由於沒有在全部機器的/etc/hosts,配置好hostname ip對應關係。配置好了,重啓就能夠。

 

FATAL org.apache.hadoop.yarn.server.nodemanager.containermanager.AuxServices: Failed to initialize mapreduce_shuffle
java.lang.RuntimeException: No class defiend for mapreduce_shuffle
        at org.apache.hadoop.yarn.server.nodemanager.containermanager.AuxServices.init(AuxServices.java:94)
        at org.apache.hadoop.yarn.service.CompositeService.init(CompositeService.java:58)
        at org.apache.hadoop.yarn.server.nodemanager.containermanager.ContainerManagerImpl.init(ContainerManagerImpl.java:181)
        at org.apache.hadoop.yarn.service.CompositeService.init(CompositeService.java:58)
        at org.apache.hadoop.yarn.server.nodemanager.NodeManager.init(NodeManager.java:185)
        at org.apache.hadoop.yarn.server.nodemanager.NodeManager.initAndStartNodeManager(NodeManager.java:328)
        at org.apache.hadoop.yarn.server.nodemanager.NodeManager.main(NodeManager.java:351)
 FATAL org.apache.hadoop.yarn.server.nodemanager.NodeManager: Error starting NodeManager
java.lang.RuntimeException: No class defiend for mapreduce_shuffle
        at org.apache.hadoop.yarn.server.nodemanager.containermanager.AuxServices.init(AuxServices.java:94)
        at org.apache.hadoop.yarn.service.CompositeService.init(CompositeService.java:58)
        at org.apache.hadoop.yarn.server.nodemanager.containermanager.ContainerManagerImpl.init(ContainerManagerImpl.java:181)
        at org.apache.hadoop.yarn.service.CompositeService.init(CompositeService.java:58)
        at org.apache.hadoop.yarn.server.nodemanager.NodeManager.init(NodeManager.java:185)
        at org.apache.hadoop.yarn.server.nodemanager.NodeManager.initAndStartNodeManager(NodeManager.java:328)
        at org.apache.hadoop.yarn.server.nodemanager.NodeManager.main(NodeManager.java:351)

不一樣版本間參數名稱不同,修改yarn-site.xml文件

<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>mapreduce_shuffle</value>
</property>

 

 

 

參考

《Hadoop技術內幕-深刻解析YARN架構設計與實現原理》

DAG計算框架Tez:http://tez.incubator.apache.org/

"Storm On YARN" Yahoo!開源: https://github.com/yahoo/storm-yarn

"Spark On YARN":http://spark.apache.org/docs/0.9.0/running-on-yarn.html

相關文章
相關標籤/搜索