Hadoop2.7.3-HA 集群搭建(传智播客)

来源:互联网 发布:如何评价无间道 知乎 编辑:程序博客网 时间:2024/04/28 20:38

前期准备

1 修改Linux主机名2 修改IP3 修改主机名和IP的映射关系 /etc/hosts4 关闭防火墙5 ssh免登陆6 安装JDK,配置环境变量等

集群规划

主机名     IP              安装的软件                   运行的进程mini01  192.168.175.141  jdk、hadoop             NameNode、DFSZKFailoverController(zkfc)mini02  192.168.175.142  jdk、hadoop             NameNode、DFSZKFailoverController(zkfc)mini03  192.168.175.143  jdk、hadoop             ResourceManager mini04  192.168.175.144  jdk、hadoop             ResourceManagermini05  192.168.175.145  jdk、hadoop、zookeeper   DataNode、NodeManager、JournalNode、QuorumPeerMainmini06  192.168.175.146  jdk、hadoop、zookeeper   DataNode、NodeManager、JournalNode、QuorumPeerMainmini07  192.168.175.147  jdk、hadoop、zookeeper   DataNode、NodeManager、JournalNode、QuorumPeerMain

说明
      1.在hadoop2.0中通常由两个NameNode组成,一个处于active状态,另一个处于standby状态。Active NameNode对外提供服务,而Standby NameNode则不对外提供服务,仅同步active namenode的状态,以便能够在它失败时快速进行切换。
hadoop2.0官方提供了两种HDFS HA的解决方案,一种是NFS,另一种是QJM。这里我们使用简单的QJM。在该方案中,主备NameNode之间通过一组JournalNode同步元数据信息,一条数据只要成功写入多数JournalNode即认为写入成功。通常配置奇数个JournalNode
这里还配置了一个zookeeper集群,用于ZKFC(DFSZKFailoverController)故障转移,当Active NameNode挂掉了,会自动切换Standby NameNode为standby状态

      2.hadoop-2.2.0中依然存在一个问题,就是ResourceManager只有一个,存在单点故障,hadoop-2.6.4解决了这个问题,有两个ResourceManager,一个是Active,一个是Standby,状态由zookeeper进行协调

安装步骤

1 安装配置zookeeper集群(先在mini05上配置)

zookeeper集群搭建请点击这里

2 安装配置hadoop集群(先在mini01上操作)

2.0 解压配置环境变量

tar -zxf hadoop-2.7.3.tar.gz -C /home/apps/ vim /etc/profileexport JAVA_HOME=/home/apps/jdk1.8.0_111export HADOOP_HOME=/home/apps/hadoop-2.7.3export PATH=\$PATH:\$JAVA_HOME/bin:$HADOOP_HOME/bin


2.1 修改hadoo-env.sh(#hadoop2.0的配置文件全部在$HADOOP_HOME/etc/hadoop下)

export JAVA_HOME=/home/apps/jdk1.8.0_111



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>/home/apps/hadoop-2.7.3/tmp</value>    </property>    <!-- 指定zookeeper地址 -->    <property>        <name>ha.zookeeper.quorum</name>        <value>mini05:2181,mini06:2181,mini07:2181</value>    </property></configuration>


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>mini01:9000</value>    </property>    <!-- nn1的http通信地址 -->    <property>        <name>dfs.namenode.http-address.ns1.nn1</name>        <value>mini01:50070</value>    </property>    <!-- nn2的RPC通信地址 -->    <property>        <name>dfs.namenode.rpc-address.ns1.nn2</name>        <value>mini02:9000</value>    </property>    <!-- nn2的http通信地址 -->    <property>        <name>dfs.namenode.http-address.ns1.nn2</name>        <value>mini02:50070</value>    </property>    <!-- 指定NameNode的edits元数据在JournalNode上的存放位置 -->    <property>        <name>dfs.namenode.shared.edits.dir</name>        <value>qjournal://mini05:8485;mini06:8485;mini07:8485/ns1</value>    </property>    <!-- 指定JournalNode在本地磁盘存放数据的位置 -->    <property>        <name>dfs.journalnode.edits.dir</name>        <value>/home/apps/hadoop-2.7.3/journaldata</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>/root/.ssh/id_rsa</value>    </property>    <!-- 配置sshfence隔离机制超时时间 -->    <property>        <name>dfs.ha.fencing.ssh.connect-timeout</name>        <value>30000</value>    </property></configuration>


2.4 修改mapred-site.xml

<configuration>    <!-- 指定mr框架为yarn方式 -->    <property>        <name>mapreduce.framework.name</name>        <value>yarn</value>    </property></configuration>

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>mini03</value>    </property>    <property>        <name>yarn.resourcemanager.hostname.rm2</name>        <value>mini04</value>    </property>    <!-- 指定zk集群地址 -->    <property>        <name>yarn.resourcemanager.zk-address</name>        <value>mini05:2181,mini06:2181,mini07:2181</value>    </property>    <property>        <name>yarn.nodemanager.aux-services</name>        <value>mapreduce_shuffle</value>    </property></configuration>


2.6 修改slaves

mini05mini06mini07


3 配置免登陆

配置mini01到mini02、mini03、mini04、mini05、mini06、mini07的免密码登陆
1 在mini01上生产一对钥匙
ssh-keygen -t rsa
2 将公钥拷贝到其他节点,包括自己
ssh-coyp-id mini01
ssh-coyp-id mini02
ssh-coyp-id mini03
ssh-coyp-id mini04
ssh-coyp-id mini05
ssh-coyp-id mini06
ssh-coyp-id mini07

配置mini03到mini04、mini05、mini06、mini07的免密码登陆
mini03上生产一对钥匙
ssh-keygen -t rsa
将公钥拷贝到其他节点
ssh-coyp-id mini03
ssh-coyp-id mini04
ssh-coyp-id mini05
ssh-coyp-id mini06
ssh-coyp-id mini07

#注意:两个namenode之间要配置ssh免密码登陆,别忘了配置mini02到mini01的免登陆在mini02上生产一对钥匙ssh-keygen -t rsassh-coyp-id -i mini01


4 拷贝到其他节点

scp -r /home/apps/ mini02:/home/apps/
scp -r /home/apps/ mini03:/home/apps/
scp -r /home/apps/ mini04:/home/apps/
scp -r /home/apps/ mini05:/home/apps/
scp -r /home/apps/ mini06:/home/apps/
scp -r /home/apps/ mini07:/home/apps/

5 执行步骤

5.1 启动zookeeper集群(分别在mini05、mini06、mini07上启动zk)

cd /home/apps/zookeeper-3.4.9/bin/
./zkServer.sh start
#查看状态:一个leader,两个follower
./zkServer.sh status

5.2 启动journalnode(分别在在mini05、mini06、mini07上执行)

cd /home/apps/hadoop-2.7.3/
sbin/hadoop-daemon.sh start journalnode
#运行jps命令检验,mini05、mini06、mini07上多了JournalNode进程

5.3 格式化HDFS(由于集群格式都完全一样, 先格式化一台然后再拷贝)

#在mini01上执行命令:
    hdfs namenode -format
#格式化后会在根据core-site.xml中的hadoop.tmp.dir配置生成个文件,这里我配置的是/home/apps/hadoop-2.7.3/tmp,然后将/home/apps/hadoop-2.7.3/tmp拷贝到hadoop02的/home/apps/hadoop-2.7.3/下。
    scp -r tmp/ mini02:/home/apps/hadoop-2.7.3/

也可以这样,建议hdfs namenode -bootstrapStandby

5.4 格式化ZKFC(在mini01上执行一次即可)

hdfs zkfc -formatZK

5.5 启动HDFS(在mini01上执行)

sbin/start-dfs.sh

5.6启动YARN

在mini03上执行 start-yarn.sh
在mini04上执行 yarn-daemon.sh start resourcemanager
由于把namenode和resourcemanager分开是因为性能问题,因为他们都要占用大量资源,所以把他们分开了,他们分开了就要分别在不同的机器上启动)

6 浏览器查看

http://mini01:50070NameNode 'mini01:9000' (active)http://mini02:50070NameNode 'mini02:9000' (standby)

7 验证HDFS HA

先向hdfs上传一个文件hdfs dfs -put /etc/profile /profilehdfs dfs -ls /然后再kill掉active的NameNodekill -9 <pid of NN>通过浏览器访问:http://mini02:50070NameNode 'mini02:9000' (active)这个时候mini02上的NameNode变成了active再执行命令:hadoop fs -ls /-rw-r--r--   3 root supergroup       1926 2014-02-06 15:36 /profile刚才上传的文件依然存在!!!手动启动那个挂掉的NameNodesbin/hadoop-daemon.sh start namenode通过浏览器访问:http://mini01:50070NameNode 'mini01:9000' (standby)

8 验证YARN

在任意一台机器上运行一下hadoop提供的demo中的WordCount程序:hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar wordcount /profile /out

其他

测试集群工作状态的一些指令bin/hdfs dfsadmin -report    查看hdfs的各节点状态信息bin/hdfs haadmin -getServiceState nn1        获取一个namenode节点的HA状态sbin/hadoop-daemon.sh start namenode  单独启动一个namenode进程./hadoop-daemon.sh start zkfc   单独启动一个zkfc进程**
0 0
原创粉丝点击