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 status5.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进程**
- Hadoop2.7.3-HA 集群搭建(传智播客)
- hadoop2.2+HA 集群搭建
- hadoop2.6.0集群HA搭建
- hadoop2集群搭建+HA配置
- centos7 搭建ha(高可用)hadoop2.7.3集群
- centos7 搭建ha(高可用)hadoop2.7.3集群
- centos7 搭建ha(高可用)hadoop2.7.3集群
- centos7 搭建ha(高可用)hadoop2.7.3集群
- Hadoop2.6集群环境搭建(HDFS HA+YARN)
- Hadoop2.2.0集群搭建(HA,联邦,yarn)
- Hadoop2.5+HA+zk3.4.6集群搭建
- Hadoop2.7.0 HA高可靠性集群搭建
- Hadoop2.0 HA 集群搭建步骤
- zookeeper+hadoop2.X HA集群搭建
- hadoop2.4的HA集群搭建
- Hadoop2.0 HA集群搭建步骤
- Hadoop2.2.0 HA + Jdk1.8.0 + Zookeeper3.4.5 + Hbase0.98 集群搭建详细过程(服务器集群)
- Hadoop2.2.0 HA + Jdk1.8.0 + Zookeeper3.4.5 + Hbase0.98 集群搭建详细过程(服务器集群)
- LeetCode
- JNI基础(六)C调java代码
- BigDecimal类
- (待进一步研究吃透)209. Minimum Size Subarray Sum
- opencv学习笔记(二十)自适应阈值cvAdaptiveThreshold ()
- Hadoop2.7.3-HA 集群搭建(传智播客)
- iOS之富文本NSAttributedString
- 第二次总结
- 为什么要写博客
- 使用RecyclerView打造QQ条目侧滑效果
- git push
- malloc 实现过程分析二
- Python-第三方库requests详解
- javaee 中的重定向与转发