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

HadoopHA搭建

2018-03-29 22:09 148 查看
本人小白,此文章针对简单但是容易忽略的问题,自己踩过的坑自己知道,膜拜大神。
1.下载对应的CDH版本组件CDH版本要对得上号,要不会出现一系列问题。
2.拿到集群首先该干什么。应该确定一下组件分部情况。千万不要搞混淆。
举例 4台集群



这是我给我用的那4太集群配的,后面会加上Spark和Hbase 所以2 、3号机器我打算主要当跑任务用
一定要吧mysqlhive专用的那个和普通的mysql分开 如过两个mysql放在同一台机器上 mysql如果挂掉了hive的数据是很难找回来的,专门拎出来一台机器专门做数据的读写感觉更好。

3.先别急着解压tar包。先检查机器的配置 
(1)查看防火墙状态 防火墙开启的情况下 集群之间的端口用不了的!!!!!
开机启动 chkconfig iptables on

开机不启动 chkconfig iptables off
立刻开启 service iptables start
立刻关闭 service iptables stop
(2)云服务器防火墙的问题:云服务器的防火墙就比较麻烦了,比如我现在使用的是华为的ucloud,
他们官网上有控制台,控制台上有控制防火墙的组件,实在找不到就问上司要帐号 然后自己去问客服怎么操作,阿里云同理()(3)这个是检查端口能不能用的命令。很实用
先安装telnet
命令:yum install telnet
检查端口是否以通信的命令 :telnet   IP或者主机名   端口号
4.配置hosts
vi /etc/hosts 
5.实现分发机器与机器之间的钥匙
6.配置 /etc/profile
7.以上基本操作做好了以后就可以解压tar包啦 举例我是解压在/home下面的
配置什么?
每一台机器上的配置文件都统一
CDH版本的配置文件是在$HADOOP_HOME/etc/hadoop下面的
分别是core-site.xml hdfs-site.xml yarn-site.xml mapper-site.xml
不同颜色字体对应不同的机器

第一台主机名  第二台主机名  第三台主机名
core-site.xml

<property> <name>fs.defaultFS</name> <value>hdfs://主机1:8020</value> </property><!--配置的是主节点的client端口号 可以自己更改-->

<property> <name>hadoop.tmp.dir</name> <value>/home/data</value> </property><!--配置的是存放blk的目录,可以以逗号隔开指定第二个地址-->
hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>

</property>
<!--设置副本数为2-->
<property>
<name>dfs.ha.namenodes.freedom</name>
<value>主机1,主机2</value>
</property>
<!--设置namenode高可用-->

<property>
<name>dfs.nameservices</name>
<value>主机1</value>
</property>
<!--设置namenode服务端-->

<property>
<name>dfs.ha.namenodes.Master.yanshu.com</name>
<value>主机1,主机2</value>
</property>
<property>
<name>dfs.namenode.rpc-address.Master.yanshu.com.Master.yanshu.com</name>
<value>主机1:50090</value>
</property>
<!--hdfs 用的通信端口,这里找不到请改成ip-->

<property>
<name>dfs.namenode.http-address.Master.yanshu.com.Master.yanshu.com</name>
<value>主机1:50070</value>
</property>
<property>
<name>dfs.namenode.rpc-address.Master.yanshu.com.slave01.yanshu.com</name>
<value>主机2:50090</value>
</property>
<property>
<name>dfs.namenode.http-address.Master.yanshu.com.slave01.yanshu.com</name>
<value>主机2:50070</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://主机1:8485;主机2:8485;主机3:8485/cluster</value>
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/home/hadoop/journal</value>
</property>
<property>
<name>dfs.ha.fencing.methods</name>
<value>
sshfence
shell(/bin/true)
</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/hadoop/.ssh/id_rsa</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>30000</value>
</property>
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.client.failover.proxy.provider.Master.yanshu.com</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
</configuration>
yarn-site.xml

<configuration>
<property> <name>yarn.resourcemanager.ha.enabled</name> <value>true</value></property><property> <name>yarn.resourcemanager.cluster-id</name> <value>RM_HA_ID</value></property><property> <name>yarn.resourcemanager.ha.rm-ids</name> <value>主机1,主机2</value></property><!--指定resourcemanager的Ha -->
<property> <name>yarn.resourcemanager.hostname.主机1</name> <value>主机1</value></property><!--指定resourcemanager节点的IP地址 -->
<property> <name>yarn.resourcemanager.hostname.主机2</name> <value>主机2</value></property>

<!--指定resourcemanager节点的IP地址 -->
<property> <name>yarn.resourcemanager.recovery.enabled</name> <value>true</value></property><!--指定resourcemanager节点挂了 就启动恢复-->
<property> <name>yarn.resourcemanager.store.class</name> <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value></property><property> <name>yarn.resourcemanager.zk-address</name> <value>主机1:2181,主机2:2181,主机3:2181</value></property><!--指定resourcemanager用的zookeeper地址加端口号-->
<property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value></property><!--优化shuffle-->
</configuration>

mapper-site.xml

<configuration>
    <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
</property>
<!--告诉hadoop mapreduce任务在yarn上执行-->
</configuration>

slaves

192.168.0.** 主机1192.168.0.** 主机2192.168.0.** 主机38.机器与机器之间通讯需要什么???-------zookeeper
zookeeper配置
参考   https://www.cnblogs.com/LUA123/p/7222216.html
9.以上步骤处理好了之后可以开始了
配置好了以后一定遵循以下步骤!!!!!!!!!!!!!1
1.检查core-site.xml里面配置的元文件存储地址是不是文件为空(警告:不是新配置的hadoop集群请一定不要操作!!)
2.启动j
3.在第一台NameNode节点上format 仔细查看日志  如果不出错会在倒数几行内发现success 
4.启动第一台的NameNode是否可以成功启动 如果不能启动仔细检查配置(core-site.xml hdfs-site.xml)
5.如果可以成功启动就到第二台NameNode上同步元数据信息
6.在第一台机器上初始化zk

bin/hdfs zkfc -formatZK7.关闭所有机器上的NameNode

8.sbin/start-all.sh
查看所有机器的jps启动情况 如果与配置不符合则检查相对应的配置是否正确,如果确定正确。请打开相对应的logs日志的out文件查看日志输出信息
9.如果成功配置那是最好的,如果配置成功或或者中途步骤错误了,不要担心,继续重新来,新集群嘛练手的
千万千万千万不要乱用rm 这种命令  你会后悔的
尽量不要kill程序的时候用kill -9 这种命令 太暴力了 上次我就用这个命令弄得第二台机器NameNode无法跟第一台一致了 还好能再同步
有问题先看日志,一定搞清楚问题到底出在哪里,找对应的问题 会看日志总比盲目的复制错误代码去百度上找强得多
日志是好朋友

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  hadoop ha hadoop HA xml site