hadoop1和hadoop2的对比

hadoop1.0中hdfs和mapreduce同属于hadoop集群,而hadoop2.0则把mapreduce分离出来,和其他所有计算模型共
同放到yarn平台上运行,如果想在hadoop2.0的yarn平台上运行任何计算模型,需要实现yarn平台的接口。

hadoop2.0中的federation和HA

federation主要解决的是单一命名空间问题,在hadoop2.0的federation中,可以存在多个集群,每个集群对应一个
nameservice,每个nameservice下管理者一个HA集群,每个HA下目前最多包含有两个namenode主节点的hadoop集
群。一个nameservice下只能有一个namenode处于active状态,另一个处于standBy状态,并可以进行切换(自动和手
动)。federation中的所有datanode均可以为所有的nameservice共用。
下面是集群搭建过程,
-----------------------------
 
1.整个集群有六个节点,分别是hadoop1-6,搭建手工切换的HA
 -----------------------------
 
namenode:hadoop1和hadoop2
datanode:hadoop3、hadoop4、hadoop5、hadoop6
journalnode:hadoop1、hadoop2、hadoop3
resourcemanager:hadoop1
 
nodemanager:hadoop3、hadoop4、hadoop5、hadoop6

 
1.1 配置文件(hadoop-env.sh、core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml、slaves)
1.1.1 hadoop-env.sh
  export JAVA_HOME=/usr/local/jdk
1.1.2 core-site.xml
<!--指定一个集群cluster1,(属于federation的其中一个集群,且只搭建这一个集群)-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://cluster1</value>
 
</property>

 
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop/tmp</value>
 
</property>

 1.1.3 hdfs-site.xml

 
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!--将cluster1集群设置为nameservice,nameservice管理者HA下的两个namenode主节点-->
<property>
<name>dfs.nameservices</name>
<value>cluster1</value>
</property>
<!--指定cluster1集群下的两个主节点namenode-->
<property>
<name>dfs.ha.namenodes.cluster1</name>
<value>hadoop1,hadoop2</value>
</property>
<!--指定cluster1下,其中一个namenode主节点hadoop1对于hadoop集群内部的通讯端口,默认9000-->
<property>
<name>dfs.namenode.rpc-address.cluster1.hadoop1</name>
<value>hadoop1:9000</value>
</property>
<!--指定cluster1下,其中一个namenode主节点hadoop1对于web访问端口,默认50070-->
 
<property>
 
<name>dfs.namenode.http-address.cluster1.hadoop1</name>
<value>hadoop1:50070</value>
</property>
<!--指定cluster1下,其中一个namenode主节点hadoop2对于hadoop集群内部的通讯端口,默认9000-->
<property>
<name>dfs.namenode.rpc-address.cluster1.hadoop2</name>
<value>hadoop2:9000</value>
 
</property>
 
<!--指定cluster1下,其中一个namenode主节点hadoop2对于web访问端口,默认50070-->
<property>
<name>dfs.namenode.http-address.cluster1.hadoop2</name>
<value>hadoop2:50070</value>
</property>
<!--设置HA自动切换为false,目前是手动切换模式,如支持自动切换需要zookeeper-->
<property>
<name>dfs.ha.automatic-failover.enabled.cluster1</name>
<value>false</value>
</property>
<!--设置实现HA的journalnode集群,namenode需要到journalnode集群读取数据实现同步-->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://hadoop1:8485;hadoop2:8485;hadoop3:8485/cluster1</value>
</property>
<!--journalnode数据存储位置-->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/usr/local/hadoop/tmp/journal</value>
</property>
<!--journalnode集群间通讯方式,使用ssh-->
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<!--公钥文件存储位置-->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_rsa</value>
 
</property>
 
<!--进行HA切换的实现类,hadoop提供-->
<property>
<name>dfs.client.failover.proxy.provider.cluster1</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
 
</property>

 
1.1.4 yarn-site.xml
<!--指定resourcemanager位置节点-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop1</value>
</property>
<!--nodemanager节点间数据传输方式-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
 
</property>

 1.1.5 mapred-site.xml
 
<!--mapreduce存在的平台,yarn-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
 
<!--指定所有从节点,即datanode和nodemanager存在的节点-->
 
1.1.6 slaves
hadoop3
hadoop4
hadoop5
 
hadoop6

 1.1.7 把hadoop1上的hadoop文件夹复制到hadoop2、hadoop3、hadoop4、hadoop5、hadoop6节点

 
1.2 启动journalnode集群
hadoop1、hadoop2、hadoop3上分别执行hadoop/sbin/hadoop-daemon.sh start journalnode
1.3 格式化namenode、启动namenode
hadoop1上执行hadoop/bin/hdfs namenode -format
hadoop1上分别执行hadoop/sbin/hadoop-daemon.sh start namenode
  页面http://hadoop1:50070查看集群信息
hadoop2上执行hadoop/bin/hdfs namenode -bootstrapStandby
hadoop2上分别执行hadoop/sbin/hadoop-daemon.sh start namenode
  下面这行命令是HA中的主节点切换,将namenode主节点active状态切换到hadoop1上
hadoop1上执行hadoop/bin/hdfs haadmin -failover --forceactive hadoop2 hadoop1
页面http://hadoop1:50070查看集群信息,namenode切换为Active状态
1.4 启动datanode
 
hadoop1上分别执行hadoop/sbin/hadoop-daemons.sh start datanode
 
1.5 启动resourcemanager和nodemanager
hadoop1上执行 hadoop/sbin/start-yarn.sh start resourcemanager
  页面http://hadoop1:8088查看资源信息

1.6 如果搭建HA自动切换的集群,需要再搭建zookeeper集群。
core-site.xml文件中添加
<property>
<name>ha.zookeeper.quorum</name>
<value>hadoop1:2181,hadoop2:2181,hadoop3:2181</value>
</property>
hdfs-site.xml文件中修改配置为true
<property>
<name>dfs.ha.automatic-failover.enabled.cluster1</name>
<value>true</value>
</property>
启动hadoop集群前也需要格式化zookeeper集群
在hadoop1上执行 hadoop/bin/hdfs zkfc -formatZK
在hadoop集群启动后,启动zkfc,实现HA
在hadoop1、hadoop2上 启动zkfc,执行命令hadoop/sbin/hadoop-daemon.sh start zkfc
总结:
  自动切换比手工切换多出来的
  (1)配置上core-site.xml增加了配置项ha.zookeeper.quorum;hdfs-site.xml中把dfs.ha.automatic-
failover.enabled.cluster1改为true
  (2)操作上格式化zk,执行命令bin/hdfs zkfc -formatZK;启动zkfc,执行命令sbin/hadoop-daemon.sh start zkfc