一. 前言:html
hadoop2.0已经公布了稳定版本号了,添加了很是多特性,比方HDFS HA、YARN等。最新的hadoop-2.4.1又添加了YARN HAjava
注意:apache提供的hadoop-2.4.1的安装包是在32位操做系统编译的,因为hadoop依赖一些C++的本地库。
二. 准备工做:node
1.改动Linux主机名假设大家公司是租用的server或是使用的云主机(如华为用主机、阿里云主机等)shell
/etc/hosts里面要配置的是内网IP地址和主机名的映射关系apache
4.关闭防火墙Active NameNode对外提供服务,而Standby NameNode则不正确外提供服务。仅同步active namenode的状态,以即可以在它失败时高速进行切换。
vim
hadoop2.0官方提供了两种HDFS HA的解决方式,一种是NFS。还有一种是QJM。这里咱们使用简单的QJM。浏览器
在该方案中。主备NameNode之间经过一组JournalNode同步元数据信息,一条数据仅仅要成功写入多数JournalNode即以为写入成功。一般配置奇数个JournalNode框架
2.hadoop-2.2.0中依旧存在一个问题,就是ResourceManager仅仅有一个,存在单点故障,hadoop-2.4.1攻克了这个问题,有两个ResourceManager,一个是Active。一个是Standby,状态由zookeeper进行协调ssh
echo 1 > /itcast/zookeeper-3.4.5/tmp/myidide
2.2.2改动core-site.xml
<configuration> <!-- 指定hdfs的nameservice为ns1 --> <property> <name>fs.defaultFS</name> <value>hdfs://ns1</value> </property> <!-- 指定hadoop暂时文件夹 --> <property> <name>hadoop.tmp.dir</name> <value>/itcast/hadoop-2.4.1/tmp</value> </property> <!-- 指定zookeeper地址 --> <property> <name>ha.zookeeper.quorum</name> <value>itcast05:2181,itcast06:2181,itcast07:2181</value> </property> </configuration>
2.2.3改动hdfs-site.xml
<configuration> <!--指定hdfs的nameservice为ns1,需要和core-site.xml中的保持一致 --> <property> <name>dfs.nameservices</name> <value>ns1</value> </property> <!-- ns1如下有两个NameNode。各自是nn1,nn2 --> <property> <name>dfs.ha.namenodes.ns1</name> <value>nn1,nn2</value> </property> <!-- nn1的RPC通讯地址 --> <property> <name>dfs.namenode.rpc-address.ns1.nn1</name> <value>itcast01:9000</value> </property> <!-- nn1的http通讯地址 --> <property> <name>dfs.namenode.http-address.ns1.nn1</name> <value>itcast01:50070</value> </property> <!-- nn2的RPC通讯地址 --> <property> <name>dfs.namenode.rpc-address.ns1.nn2</name> <value>itcast02:9000</value> </property> <!-- nn2的http通讯地址 --> <property> <name>dfs.namenode.http-address.ns1.nn2</name> <value>itcast02:50070</value> </property> <!-- 指定NameNode的元数据在JournalNode上的存放位置 --> <property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://itcast05:8485;itcast06:8485;itcast07:8485/ns1</value> </property> <!-- 指定JournalNode在本地磁盘存放数据的位置 --> <property> <name>dfs.journalnode.edits.dir</name> <value>/itcast/hadoop-2.4.1/journal</value> </property> <!-- 开启NameNode失败本身主动切换 --> <property> <name>dfs.ha.automatic-failover.enabled</name> <value>true</value> </property> <!-- 配置失败本身主动切换实现方式 --> <property> <name>dfs.client.failover.proxy.provider.ns1</name> <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value> </property> <!-- 配置隔离机制方法,多个机制用换行切割,即每个机制暂用一行--> <property> <name>dfs.ha.fencing.methods</name> <value> sshfence shell(/bin/true) </value> </property> <!-- 使用sshfence隔离机制时需要ssh免登录 --> <property> <name>dfs.ha.fencing.ssh.private-key-files</name> <value>/home/hadoop/.ssh/id_rsa</value> </property> <!-- 配置sshfence隔离机制超时时间 --> <property> <name>dfs.ha.fencing.ssh.connect-timeout</name> <value>30000</value> </property> </configuration>
2.2.4改动mapred-site.xml
<configuration> <!-- 指定mr框架为yarn方式 --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>
2.2.5改动yarn-site.xml
<configuration> <!-- 开启RM高可靠 --> <property> <name>yarn.resourcemanager.ha.enabled</name> <value>true</value> </property> <!-- 指定RM的cluster id --> <property> <name>yarn.resourcemanager.cluster-id</name> <value>yrc</value> </property> <!-- 指定RM的名字 --> <property> <name>yarn.resourcemanager.ha.rm-ids</name> <value>rm1,rm2</value> </property> <!-- 分别指定RM的地址 --> <property> <name>yarn.resourcemanager.hostname.rm1</name> <value>itcast03</value> </property> <property> <name>yarn.resourcemanager.hostname.rm2</name> <value>itcast04</value> </property> <!-- 指定zk集群地址 --> <property> <name>yarn.resourcemanager.zk-address</name> <value>itcast05:2181,itcast06:2181,itcast07:2181</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> </configuration>
2.2.6改动slaves(slaves是指定子节点的位置,因为要在itcast01上启动HDFS、在itcast03启动yarn。
因此itcast01上的slaves文件指定的是datanode的位置,itcast03上的slaves文件指定的是nodemanager的位置)
itcast05ssh-copy-id itcast07
scp -r /itcast/hadoop-2.4.1/ root@itcast07:/itcast/
#格式化后会在依据core-site.xml中的hadoop.tmp.dir配置生成个文件。
这里我配置的是/itcast/hadoop-2.4.1/tmp,
而后将/itcast/hadoop-2.4.1/tmp复制到itcast02的/itcast/hadoop-2.4.1/下。
scp -r tmp/ itcast02:/itcast/hadoop-2.4.1/2.10启动YARN(#####注意#####:是在itcast03上运行start-yarn.sh,
把namenode和resourcemanager分开是因为性能问题。因为他们都要占用大量资源,因此把他们分开了。
他们分开了就要分别在不一样的机器上启动)
sbin/start-yarn.sh
五. 集群測试:
到此,hadoop-2.4.1配置完成,可以统计浏览器訪问:手动启动那个挂掉的NameNode sbin/hadoop-daemon.sh start namenode 经过浏览器訪问:http://192.168.1.201:50070 NameNode 'itcast01:9000' (standby) 验证YARN: 执行一下hadoop提供的demo中的WordCount程序: hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.4.1.jar wordcount /profile /out