您的位置:首页 > 运维架构

hadoop2.6.0分布式集群搭建(手动和自动HA)

2015-01-31 21:22 543 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: