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環境,作為一切的開始。
?
單機環境中,Hadoop有偽分布式模式,即“單點集群”,在該模式下,所有的守護進程均會運行在單個節點上。
偽分布式模式安裝好了之后,繼續動態加datanode,然后就是完全分布式的hadoop
希望了解hadoop2.0的改進以及設計的亮點可以看這篇博文,HADOOP2.0(HDFS2)以及YARN設計的亮點
本文的hadoop版本是2.2.0,源碼以及編譯包的獲取地址:http://hadoop.apache.org/releases.html
[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好像不太兼容,我這邊使用java6
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修改為本機ip
192.168.12.67 localhost修改${HADOOP_HOME}/etc/hadoop/slaves
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 -lshadoop提供了一個跑在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 yhserver192.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 namenodedatanode無法連接到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_shuffleat 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_shuffleat 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
?
?
總結
以上是生活随笔為你收集整理的Hadoop 2.0安装以及不停集群加datanode的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JVM空间申请流程图
- 下一篇: 模型设计器工具控件LinqConnect