设为首页 收藏本站
查看: 1196|回复: 0

[经验分享] hadoop的高可用

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2017-3-8 13:28:18 | 显示全部楼层 |阅读模式


hadoopHA

数据类型

结构化数据RDMS

非结构化数据借助算法goole pagerank

半结构算法xmljson通过标签进行。

一般情况下可以通过并行处理机制提高处理数据效率但是对于海量数据的加载是很慢的所以需要使用分布式文件系统只需要从本地磁盘上加载就好了所以速度很快。

hadoop集群mapreduce框架其函数要自己写。

在hadoopHA 集群中,通常有两台不同的机器充当 NameNode。在任何时间,只有一台机器处于Active 状态;另一台机器是处于 Standby 状态。

在本片文档中主要体现两个高可用

hdfs和yarn

hdfs是

在本文档中

server1server5作为NN和RMserver2,server3,server4作为DNZK和DN.

本篇文档从zookeeper开始关于基础配置请参考http://12237658.blog.iyunv.com



本实验出现的错误事项

1、内存划分要足够本次一共启用5个虚拟机server1和server5要求大于1Gserver2,3,4不能小于768.

2、再格式化过程中第一次格式化需要先启动日志进程sbin/hadoop.daem.sh start journalnode

[hadoop@server2/3/4 hadoop]$ sbin/hadoop-daemon.sh start journalnode

3、再启动过程中,zookeeper会发生服务提不起来的情况在此情况下一般是myid的错误或者端口被占用

4、在启动hdfs服务时可能出现namenode 或datanode不出现的情况此时一般要查看日志信息根据日志信息作出更改

5、服务尽量不要多次重复充起因为会导致进程混乱例如zookeeper的进程号和其文件中进程号不一致。[hadoop@server3 zookeeper]$ cat zookeeper_server.pid 1236





zookeeper的启动

下载tar包解压到hadoop的家目录

[hadoop@server3 ~]$ ls

hadoop        java         zookeeper        zookeeper-3.4.9.tar.gz

hadoop-2.7.3  jdk1.7.0_79  zookeeper-3.4.9

修改配置文件

[hadoop@server3 conf]$ cat zoo.cfg

# The number of milliseconds of each tick

tickTime=2000//ZK中的一个时间单元zk中所有时间都是以这个时间为基础以毫秒计用来调节心跳和超时。

# The number of ticks that the initial

# synchronization phase can take

initLimit=10//Follower 在启动过程中,会从 Leader 同步所有最新数据,然后确定自己能够对外服务的起始状态。

# The number of ticks that can pass between

# sending a request and getting an acknowledgement

syncLimit=5  //在运行过程中,Leader 负责与 ZK 集群中所有机器进行通信,例如通过一些心跳检测机制,来检测机器的存活状态。

# the directory where the snapshot is stored.

# do not use /tmp for storage, /tmp here is just

# example sakes.

dataDir=/tmp/zookeeper   //存储快照文件 snapshot 的目录。默认情况下,事务日志也会存储在这里。建议同时配置参数 dataLogDir, 事务日志的写性能直接影响 zk 性能。在生产环境中该目录应该为一个稳定的目录而不应该是在tmp下因为tmp在一定时间后会被清除。

# the port at which the clients will connect

clientPort=2181   //客户端连接 server 的端口,即对外服务端口

# the maximum number of client connections.

# increase this if you need to handle more clients

#maxClientCnxns=60

#

# Be sure to read the maintenance section of the

# administrator guide before turning on autopurge.

#

# http://zookeeper.apache.org/doc/ ... html#sc_maintenance

#

# The number of snapshots to retain in dataDir

#autopurge.snapRetainCount=3

# Purge task interval in hours

# Set to "0" to disable auto purge feature

#autopurge.purgeInterval=1

server.1=172.25.33.2:2888:3888

server.2=172.25.33.3:2888:3888

server.3=172.25.33.4:2888:3888

server的编号应该和myid的数字一致myid在dataDir下。

echo “1”> /tmp/zookeeper/myid ....



启动zookeeper//2,3,4启动。

[hadoop@server3 zookeeper]$ echo "2" > /tmp/zookeeper/myid

[hadoop@server3 zookeeper]$ bin/zkServer.sh start

ZooKeeper JMX enabled by default

Using config: /home/hadoop/zookeeper/bin/../conf/zoo.cfg

Starting zookeeper ... STARTED

[hadoop@server3 zookeeper]$ bin/zkServer.sh status

ZooKeeper JMX enabled by default

Using config: /home/hadoop/zookeeper/bin/../conf/zoo.cfg

Mode: follower



配置hadoop的hdfs

cat core-site.xml

<configuration>

<property>

        <name>fs.defaultFS</name>

                <value>hdfs://master</value>

                    </property>

<property>

        <name>ha.zookeeper.quorum</name><!--zookeeper集群主机地址-->

                <value>172.25.33.2:2181,172.25.33.3:2181,172.25.33.3:2181,172.25.33.4:2181</value>

</property>

</configuration>

cat hdfs-site.xml

<property>

                 <name>dfs.nameservices</name>

                         <value>masters</value>

                                 </property>

<!--master 下边有两个namenode节点分别是h1,h2

     -->

<property>

                <name>dfs.ha.namenodes.masters</name>

                        <value>h1,h2</value>

                                </property>

<!-- 指定 h1 节点的 rpc 通信地址

     -->

<property>

        <name>dfs.namenode.rpc-address.masters.h1</name>

                <value>172.25.33.1:9000</value>

</property>

<!-- 指定 h1 节点的 http 通信地址

     -->

<property>

        <name>dfs.namenode.http-address.masters.h1</name>

                <value>172.25.33.1:50070</value>

</property>

<!-- 指定 h2 节点的 rpc 通信地址

     -->

<property>

        <name>dfs.namenode.rpc-address.masters.h2</name>

                <value>172.25.33.5:9000</value>

</property>

<!-- 指定 h2 节点的 http 通信地址

     -->

<property>

        <name>dfs.namenode.http-address.masters.h2</name>

                <value>172.25.33.5:50070</value>

</property>

<!-- 指定 NameNode 元数据在 JournalNode 上的存放位置 -->

<property>

<name>dfs.namenode.shared.edits.dir</name>

<value>qjournal://172.25.33.2:8485;172.25.33.3:8485;172.25.33.4:8485/masters</value>

</property>

<!-- 指定 JournalNode 在本地磁盘存放数据的位置 -->

<property>

<name>dfs.journalnode.edits.dir</name>

<value>/tmp/journaldata</value>

</property>

<!-- 开启 NameNode 失败自动切换 -->

<property>

<name>dfs.ha.automatic-failover.enabled</name>

<value>true</value>

</property>

<!-- 配置失败自动切换实现方式 -->

<property>

        <name>dfs.client.failover.proxy.provider.masters</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>

[hadoop@server1 hadoop]$ cat slaves

172.25.33.3

172.25.33.4

172.25.33.2



至此hdfs的高可用配置文件已经完成

在格式化hdfs之前要先将server2,3,4节点的journal服务打开因为hdfs在格式化的时候要与2,3,4的8485端口通信。

[hadoop@server2 hadoop]$ sbin/hadoop-daemon.sh start journalnode

starting journalnode, logging to /home/hadoop/hadoop-2.7.3/logs/hadoop-hadoop-journalnode-server2.example.com.out

[hadoop@server2 hadoop]$ jps

2629 JournalNode

2398 QuorumPeerMain

2667 Jps



在这三个节点看到该jps进程那么说明可以格式化Hdfs了

[hadoop@server1 hadoop]$ bin/hdfs namenode -format

[hadoop@server1 hadoop]$ scp -r /tmp/hadoop-hadoop/ 172.25.33.5:/tmp

fsimage_0000000000000000000                  100%  353     0.3KB/s   00:00   

fsimage_0000000000000000000.md5              100%   62     0.1KB/s   00:00   

seen_txid                                    100%    2     0.0KB/s   00:00   

VERSION  

格式化zookeeper(只需在h1上执行)

[hadoop@server1 hadoop]$ bin/hdfs zkfc -formatZK

然后就可以启动服务了。

此时需要免密码认证所以该制作ssh-keygen的赶紧制作。有时需要用ssh试连各个节点破除yes

[hadoop@server1 hadoop]$ sbin/start-dfs.sh

检测[hadoop@server1/5 hadoop]$ jps

11212 DFSZKFailoverController

11482 Jps

10883 NameNode

通过网页的50070访问正常

172.25.33.150070


spacer.gif

[hadoop@server1 hadoop]$ jps

11212 DFSZKFailoverController

11482 Jps

10883 NameNode

[hadoop@server1 hadoop]$ kill -9 10883

172.25.33.550070

spacer.gif

验证成功hdfs的高可用已经完成下边配置yarn的高可用

Apache Hadoop YARN Yet Another Resource Negotiator另一种资源协调者是一种新的 Hadoop 资源管理器它是一个通用资源管理系统可为上层应用提供统一的资源管理和调度它的引入为集群在利用率、资源统一管理和数据共享等方面带来了巨大好处

cat mapred-site.xml

<configuration>

<!--指定为mapreduce的框架 -->

<property>

<name>mapreduce.framework.name</name>

<value>yarn</value>

</property>

</configuration>

cat yarn-site.xml

<configuration>



<!-- Site specific YARN configuration properties -->

<!-- 配置可以在 nodemanager 上运行 mapreduce 程序 -->

<property>

<name>yarn.nodemanager.aux-services</name>

<value>mapreduce_shuffle</value>

</property>



<!-- 激活 RM 高可用 -->

<property>

<name>yarn.resourcemanager.ha.enabled</name>

<value>true</value>

</property>

<!-- 指定 RM 的集群 id

     -->

<property>

<name>yarn.resourcemanager.cluster-id</name>

<value>RM_CLUSTER</value>

</property>



<!-- 定义 RM 的节点--><property>

<name>yarn.resourcemanager.ha.rm-ids</name>

<value>rm1,rm2</value>

</property>

<!-- 指定 RM1 的地址 -->

<property>

<name>yarn.resourcemanager.hostname.rm1</name>

<value>172.25.33.1</value>

</property>

<!-- 指定 RM2 的地址 -->

<property>

<name>yarn.resourcemanager.hostname.rm2</name>

<value>172.25.33.5</value>

</property>

<!-- 激活 RM 自动恢复

     -->

<property>

<name>yarn.resourcemanager.recovery.enabled</name>

<value>true</value>

</property>



<!-- 配置 RM 状态信息存储方式,有 MemStore 和 ZKStore-->





<property>

<name>yarn.resourcemanager.store.class</name>

<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>

</property>

<!-- 配置为 zookeeper 存储时,指定 zookeeper 集群的地址 -->

<property>

<name>yarn.resourcemanager.zk-address</name>

<value>172.25.33.2:2181,172.25.33.3:2181,172.25.33.4:2181</value>

</property>

</configuration>



配置文件完成后启动yarn服务。

[hadoop@server1 hadoop]$ sbin/start-yarn.sh







[hadoop@server1 hadoop]$ jps

13244 ResourceManager

11212 DFSZKFailoverController

13330 Jps

12814 NameNode

[hadoop@server5 ~]$ jps

1598 NameNode

1904 Jps

1695 DFSZKFailoverController

在另一个节点上并没有RM,需要手动启动

[hadoop@server5 hadoop]$ sbin/yarn-daemon.sh start resourcemanager

starting resourcemanager, logging to /home/hadoop/hadoop-2.7.3/logs/yarn-hadoop-resourcemanager-server5.example.com.out

[hadoop@server5 hadoop]$ jps

1598 NameNode

2018 Jps

1695 DFSZKFailoverController

1979 ResourceManager

172.25.33.18088

spacer.gif

故障切换



[hadoop@server1 hadoop]$ jps

13244 ResourceManager

11212 DFSZKFailoverController

12814 NameNode

13923 Jps

[hadoop@server1 hadoop]$ kill -9 13244

172.25.33.58088

spacer.gif

使用zookeeper的命令行进行测试

[hadoop@server3 zookeeper]$ bin/zkCli.sh -server 127.0.0.1:2181

[zk: 127.0.0.1:2181(CONNECTED) 0] get /yarn-leader-election/RM_CLUSTER/ActiveBreadCrumb





RM_CLUSTERrm2

cZxid = 0x100000020

ctime = Tue Mar 07 22:05:16 CST 2017

mZxid = 0x100000053

mtime = Tue Mar 07 22:09:58 CST 2017

pZxid = 0x100000020

cversion = 0

dataVersion = 1

aclVersion = 0

ephemeralOwner = 0x0

dataLength = 17

numChildren = 0

[zk: 127.0.0.1:2181(CONNECTED) 1] quit

Quitting...

结束5上的服务RM会切换到1上。

ActiveBreadCrumb           ActiveStandbyElectorLock

[zk: 127.0.0.1:2181(CONNECTED) 0] get /yarn-leader-election/RM_CLUSTER/ActiveBreadCrumb





RM_CLUSTERrm1

cZxid = 0x100000020

ctime = Tue Mar 07 22:05:16 CST 2017

mZxid = 0x10000008b

mtime = Tue Mar 07 22:15:14 CST 2017

pZxid = 0x100000020

cversion = 0

dataVersion = 2

aclVersion = 0

ephemeralOwner = 0x0

dataLength = 17

numChildren = 0

[zk: 127.0.0.1:2181(CONNECTED) 1]

测试成功表示yarn的高可用已经完成。









运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-350494-1-1.html 上篇帖子: 简单的hadoop启动脚本 下篇帖子: Hadoop 2.0中单点故障解决方案总结
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表