Hadoop (CDH4发行版)集群部署 (部署脚本,namenode高可用,hadoop管理)

前言

部署的脚本网址:(http://git.oschina.net/snake1361222/hadoop_scripts)。

 本文的所有部署都基于cloudera公司的CDH4,CDH4是cloudera公司包装好的hadoop生态圈一系列yum包,把CDH4放到自己的yum仓库中,能极大的提高hadoop环境部署的简易性。

 本文的部署过程中涵盖了namenode的HA实现,hadoop管理的解决方案(hadoop配置文件的同步,快速部署脚本等)。

环境准备

一共用5台机器作为硬件环境,全都是centos 6.4

  • namenode & resourcemanager 主服务器: 192.168.1.1

  • namenode & resourcemanager 备服务器: 192.168.1.2

  • datanode & nodemanager 服务器: 192.168.1.100 192.168.1.101 192.168.1.102

  • zookeeper 服务器集群(用于namenode 高可用的自动切换): 192.168.1.100 192.168.1.101

  • jobhistory 服务器(用于记录mapreduce的日志): 192.168.1.1

  • 用于namenode HA的NFS: 192.168.1.100

环境部署

一、加入CDH4的YUM仓库

1.最好的办法是把cdh4的包放到自建的yum仓库中,如何自建yum仓库请看 自建YUM仓库

2.如果不想自建yum仓库,在所有的hadoop机器执行以下操作加入cdn4的yum仓库

1
2
wget http: //archive .cloudera.com /cdh4/one-click-install/redhat/6/x86_64/cloudera-cdh-4-0 .x86_64.rpm
sudo yum --nogpgcheck localinstall cloudera-cdh-4-0.x86_64.rpm

二、创建用于namenode HA的NFS服务器

1.登录192.168.1.100,执行以下脚本 createNFS.sh

1
2
3
4
5
6
7
8
#!/bin/bash
yum -y install rpc-bind nfs-utils
mkdir -p /data/nn_ha/
echo "/data/nn_ha  *(rw,root_squash,all_squash,sync)" >> /etc/exports
/etc/init .d /rpcbind start
/etc/init .d /nfs  start
chkconfig  --level 234 rpcbind   on
chkconfig  -level 234 nfs  on

三、Hadoop Namenode & resourcemanager 主服务器 环境部署

1.登录192.168.1.1,创建脚本目录,把脚本从git仓库复制下来


1
2
3
4
5
yum –y install git
mkdir –p /opt/
cd /opt/
git clone http: //git .oschina.net /snake1361222/hadoop_scripts .git
/etc/init .d /iptables stop

2.修改hostname

1
sh /opt/hadoop_scripts/deploy/AddHostname .sh

3.修改部署脚本的配置文件

1
2
3
4
5
vim /opt/kingsoft/hadoop_scripts/deploy/config
#添加master服务器的地址,也就是namenode主服务器
master= "192.168.1.1"
#添加nfs服务器地址
nfsserver= "192.168.1.100"

4.编辑hosts文件(此文件会同步到hadoop集群所有机器)

1
2
3
4
5
6
7
8
vim /opt/hadoop_scripts/share_data/resolv_host
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.1 nn.dg.hadoop.cn
192.168.1.2 nn2.dg.hadoop.cn
192.168.1.100 dn100.dg.hadoop.cn
192.168.1.101 dn101.dg.hadoop.cn
192.168.1.102 dn102.dg.hadoop.cn

5.执行部署脚本CreateNamenode.sh

1
sh /opt/hadoop_scripts/deploy/CreateNamenode .sh

6.搭建saltstack master

PS:类似于puppet的服务器管理开源工具,比较轻量,在这里用于管理hadoop集群,调度datanode,关于saltstack的详细请看 SaltStack部署与使用

a.安装
1
yum -y install salt salt-master
b.修改配置文件`/etc/salt/master`,下面标志的是需要修改的项
1
2
3
4
5
6
7
8
修改监听IP:
interface: 0.0.0.0
多线程池:
worker_threads: 5
开启任务缓存:(官方描叙开启缓存能承载5000minion)
job_cache
开启自动认证:
auto_accept: True

c.开启服务

1
2
/etc/init .d /salt-master start
chkconfig  salt-master on

7.部署过程中已经把我的sample配置复制过去了,所以只需要修改部分配置文件

a. /etc/hadoop/conf/hdfs-site.xml (其实就是按实际修改主机名地址)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
< property >
   < name >dfs.namenode.rpc-address.mycluster.ns1</ name >
   < value >nn.dg.hadoop.cn:8020</ value >
   < description >定义ns1的rpc地址</ description >
</ property >
< property >
   < name >dfs.namenode.rpc-address.mycluster.ns2</ name >
   < value >nn2.dg.hadoop.cn:8020</ value >
   < description >定义ns2的rpc地址</ description >
</ property >
< property >
     < name >ha.zookeeper.quorum</ name >
     < value >dn100.dg.hadoop.cn:2181,dn101.dg.hadoop.cn:2181,dn102.dg.hadoop.cn:2181,</ value >
     < description >指定用于HA的ZooKeeper集群机器列表</ description >
</ property >
b. mapred-site.xml
1
2
3
4
5
6
7
8
< property >
  < name >mapreduce.jobhistory.address</ name >
  < value >nn.dg.hadoop.cn:10020</ value >
</ property >
< property >
  < name >mapreduce.jobhistory.webapp.address</ name >
  < value >nn.dg.hadoop.cn:19888</ value >
</ property >


c. yarn-site.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
< property >
   < name >yarn.resourcemanager.resource-tracker.address</ name >
   < value >nn.dg.hadoop.cn:8031</ value >
</ property >
< property >
   < name >yarn.resourcemanager.address</ name >
   < value >nn.dg.hadoop.cn:8032</ value >
</ property >
< property >
   < name >yarn.resourcemanager.scheduler.address</ name >
   < value >nn.dg.hadoop.cn:8030</ value >
</ property >
< property >
   < name >yarn.resourcemanager.admin.address</ name >
   < value >nn.dg.hadoop.cn:8033</ value >
</ property >


三、Hadoop Namenode & resourcemanager 备服务器 环境部署

1.登录192.168.1.2,创建脚本目录,从主服务器把脚本同步过来

1
2
3
/etc/init .d /iptables stop
mkdir –p /opt/hadoop_scripts
rsync –avz 192.168.1.1::hadoop_s   /opt/hadoop_scripts

2.执行部署脚本CreateNamenode.sh

1
sh /opt/hadoop_scripts/deploy/CreateNamenode .sh

3.同步hadoop配置文件

1
rsync –avz 192.168.1.1::hadoop_conf  /etc/hadoop/conf

4.部署saltstack客户端

1
sh /opt/hadoop_scripts/deploy/salt_minion .sh

四、zookeeper服务器集群部署

zookeeper是一个开源分布式服务,在这里用于namenode 的auto fail over功能。

1.安装

1
yum install zookeeper zookeeper-server

2.修改配置文件/etc/zookeeper/conf/zoo.cfg

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
maxClientCnxns=50
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
dataDir= /var/lib/zookeeper
# the port at which the clients will connect
clientPort=2181
#这里指定zookeeper集群内的所有机器,此配置集群内机器都是一样的
server.1=dn100.dg.hadoop.cn :2888:3888
server.2=dn101.dg.hadoop.cn:2888:3888

3.指定当前机器的id,并开启服务

1
2
3
4
5
6
7
#譬如当前机器是192.168.1.100(dn100.dg.hadoop.cn),它是server.1,id是1,SO:
echo "1" /var/lib/zookeeper/myid
chown -R zookeeper.zookeeper /var/lib/zookeeper/
service zookeeper-server init
/etc/init .d /zookeeper-server start
chkconfig zookeeper-server on
#如此类推,部署192.168.1.101

五、datanode & nodemanager 服务器部署

1.登录datanode机器,创建脚本目录,从主服务器把脚本同步过来

1
2
3
/etc/init .d /iptables stop
mkdir –p /opt/hadoop_scripts
rsync –avz 192.168.1.1::hadoop_s   /opt/hadoop_scripts

2.修改hostname,执行部署脚本 CreateDatanode.sh

1
2
sh /opt/hadoop_scripts/deploy/AddHostname .sh
sh /opt/hadoop_scripts/deploy/CreateDatanode .sh

集群初始化

到这里,hadoop集群的环境已部署完毕,现在开始初始化集群

一、namenode的HA高可用初始化

1.在namenode主服务器(192.168.1.1)执行zookeeper的failover功能格式化

1
sudo –u hdfs hdfs zkfc –formatZK

2.把zookeeper集群服务启动(192.168.1.100  192.168.1.101 )

1
/etc/init .d /zookeeper-server start

3.把namenode主备服务器的zkfc服务起来(192.168.1.1  192.168.1.2)

1
/etc/init .d /hadoop-hdfs-zkfc start

4.在namenode主服务器(192.168.1.1)格式化hdfs

1
2
#确保是用hdfs用户格式化
sudo -u hdfs hadoop namenode – format

5.第一次搭建namenode高可用,需要把name.dir下面的数据复制到namenode备服务器(此坑花了好多时间)

a.在主服务器(192.168.1.1)执行
1
2
tar -zcvPf /tmp/namedir . tar .gz /data/hadoop/dfs/name/
nc -l 9999 < /tmp/namedir . tar .gz
b.在备服务器(192.168.1.2)执行
1
2
wget 192.168.1.1:9999 -O /tmp/namedir . tar .gz
tar -zxvPf /tmp/namedir . tar .gz

6.主从服务都启动

1
2
/etc/init .d /hadoop-hdfs-namenode start
/etc/init .d /hadoop-yarn-resourcemanager start

7.查看hdfs的web界面

1
2
3
4
5
http: //192 .168.1.1:9080
http: //192 .168.1.2:9080
#如果在web界面看到两个namenode都是backup状态,那就是auto fail over配置不成功
#查看zkfc日志(/var/log/hadoop-hdfs/hadoop-hdfs-zkfc-nn.dg.s.kingsoft.net.log)
#查看zookeeper集群的日志(/var/log/zookeeper/zookeeper.log)

8.现在可以尝试关闭namenode主服务,看是否能主从切换

二、hdfs集群开启

到这里,所有hadoop部署已完成,现在开始把集群启动,验证效果

1.把所有datanode服务器启动

1
2
#还记得之前搭建的saltstack管理工具不,现在开始发挥它的作用,登录saltstack master(192.168.1.1)执行
salt - v "dn*" cmd.run "/etc/init.d/hadoop-hdfs-datanode start"

2.查看hdfs web界面,看是否都成为live nodes

3.如果没有问题,现在可以尝试hdfs操作

1
2
3
4
5
6
7
8
9
10
#创建一个tmp目录
sudo -u hdfs hdfs dfs - mkdir /tmp
#创建一个10G大小的空文件,计算它的MD5值,并放入hdfs
dd if = /dev/zero of= /data/test_10G_file bs=1G count=10
md5sum /data/test_10G_file
sudo -u hdfs hdfs dfs -put /data/test_10G_file  /tmp
sudo -u hdfs hdfs dfs - ls /tmp
#现在可以尝试关闭一台datanode,然后把刚才的测试文件拉取出来,再算一次MD5看是否一样
sudo -u hdfs hdfs dfs -get /tmp/test_10G_file /tmp/
md5sum /tmp/test_10G_file

三、yarn集群开启

hadoop除了hdfs用于大数据的分布式存储,还有更重要的组件,分布式计算(mapreduce)。现在我们来把mapreducev2 yarn集群启动

1.在主服务器把resourcemanager服务起来(192.168.1.1)

1
/etc/init .d /hadoop-yarn-resourcemanager start

2.把所有nodemanager服务启动

1
2
#还是登陆saltstack master,执行
salt - v "dn*" cmd.run "/etc/init.d/hadoop-yarn-nodemanager start"

3.查看yarn 任务追踪界面(http://192.168.1.1:9081/),看是否所有nodes都已加入

4.hadoop自带有基准测试的mapreduce实例,我们利用它来测试yarn环境是否正常

1
2
3
4
5
6
7
8
9
10
11
#TestDFSIO测试HDFS的读写性能,写10个文件,每个文件1G.
su hdfs -
hadoop jar /usr/lib/hadoop-mapreduce/hadoop-mapreduce-client-jobclient-2 .0.0-cdh4.2.1-tests.jar TestDFSIO  -write -nrFiles 10 -fileSize 1000
#Sort测试MapReduce
##向random-data目录输出数据
hadoop jar /usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples .jar randomwriter  random-data
##运行sort程序
hadoop jar /usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples .jar sort random-data sorted-data
##验证sorted-data 文件是否排好序
hadoop jar /usr/lib/hadoop-mapreduce/hadoop-mapreduce-client-jobclient-2 .0.0-cdh4.2.1-tests.jar testmapredsort -sortInput random-data \
-sortOutput sorted-data

Hadoop集群的管理

一、datanode & nodemanager 节点加入

1.修改hosts表,譬如有节点192.168.1.103需要加入

1
2
3
4
5
6
7
8
9
vim /opt/hadoop_scripts/share_data/resolv_host
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.1 nn.dg.hadoop.cn
192.168.1.2 nn2.dg.hadoop.cn
192.168.1.100 dn100.dg.hadoop.cn
192.168.1.101 dn101.dg.hadoop.cn
192.168.1.102 dn102.dg.hadoop.cn
192.168.1.103 dn103.dg.hadoop.cn

2.修改hostname,同步脚本目录,并执行部署

1
2
3
4
mkdir –p /opt/hadoop_scripts
rsync –avz 192.168.1.1::hadoop_s   /opt/hadoop_scripts
sh /opt/hadoop_scripts/deploy/CreateDatanode .sh
sh /opt/hadoop_scripts/deploy/AddHostname .sh


3.开启服务

1
2
/etc/init .d /hadoop-hdfs-datanode start
/etc/init .d /hadoop-yarn-nodemanager start

二、修改hadoop配置文件

一般在一个hadoop集群中维护一份hadoop配置,这份hadoop配置需要分发到集群中各个成员。这里的做法是 salt + rsync

1
2
3
4
5
#修改namenode主服务器的hadoop配置文件  /etc/hadoop/conf/,然后执行以下命令同步到集群中所有成员
sync_h_conf
#脚本目录也是需要维护的,譬如hosts文件/opt/hadoop_scripts/share_data/resolv_host,修改后执行以下命令同步到集群中所有成员
sync_h_script
#其实这两个命令是我自己定义的salt命令的别名,查看这里/opt/hadoop_scripts/profile.d/hadoop.sh

三、监控

比较普遍的方案是,ganglia和nagios监控,ganglia收集大量度量,以图形化程序,nagios在某度量超出阀值后报警.ganglia监控以后补充一下文档

其实,hadoop自带有接口提供我们自己写监控程序,而且这个接口还是比较简单,通过这样便可以访问http://192.168.1.1:9080/jmx,返回值是JSON格式,其中的内容也非常详细。但是每次查询都返回一大串的JSON也是浪费,其实接口还提供更新详细的查询  譬如我只想查找系统信息,可以这样调用接口http://192.168.1.1:9080/jmx?qry=java.lang:type=OperatingSystem 。qry参考后跟的就是整个JSON的“name”这个key的值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第1章 HDFS HA及解决方案 1.1 HDFS系统架构 1.2 HA定义 1.3 HDFS HA原因分析及应对措施 1.3.1 可靠性 1.3.2 可维护性 1.4 现有HDFS HA解决方案 1.4.1 Hadoop的元数据备份方案 1.4.2 Hadoop的SecondaryNameNode方案 1.4.3 Hadoop的Checkpoint ode方案 1.4.4 Hadoop的BackupNode方案 1.4.5 DRDB方案 1.4.6 FaceBook的AvatarNode方案 1.5 方案优缺点比较 第2章 HDFS元数据解析 2.1 概述 2.2 内存元数据结构 2.2.1 INode 2.2.2 Block 2.2.3 BlockInfo和DatanodeDescriptor 2.2.4 小结 2.2.5 代码分析——元数据结构 2.3 磁盘元数据文件 2.4 Format情景分析 2.5 元数据应用场景分析 第3章 Hadoop的元数据备份方案 3.1 运行机制分析 4 3.1.1 NameNode启动加载元数据情景分析 3.1.2 元数据更新及日志写入情景分析 3.1.3 Checkpoint过程情景分析 3.1.4 元数据可靠性机制 3.1.5 元数据一致性机制 3.2 使用说明 第4章 Hadoop的Backup Node方案 4.1 Backup Node概述 4.1.1 系统架构 4.1.2 使用原则 4.1.3 优缺点 4.2 运行机制分析 4.2.1 启动流程 4.2.2 元数据操作情景分析 4.2.3 日志池(journal spool)机制 4.2.4 故障切换机制 4.3 实验方案说明 4.4 构建实验环境 4.4.1 网络拓扑 4.4.2 系统安装及配置 4.4.3 安装JDK 4.4.4 虚拟机集群架设 4.4.5 NameNode安装及配置 4.4.6 Backup Node安装及配置 4.4.7 Data Node安装及配置 4.4.8 Clients安装及配置 4.5 异常解决方案 4.5.1 异常情况分析 4.5.2 NameNode配置 4.5.3 Backup Node配置 4.5.4 Data Node配置 4.5.5 NameNode宕机切换实验 4.5.6 NameNode宕机读写测试 第5章 AvatarNode运行机制 5.1 方案说明 5.1.1 系统架构 5.1.2 思路分析 5.1.3 性能数据 5.2 元数据分析 5.2.1 类FSNamesystem 5.2.2 类FSDirectory 5.2.3 AvatarNode的磁盘元数据文件 5.3 AvatarNode Primary启动过程 5.4 AvatarNode Standby启动过程 5.4.1 AvatarNode的构造方法 5.4.2 Standby线程的run()方法 5.4.3 Ingest线程的run()方法 5.4.4 Ingest线程的ingestFSEdits ()方法 5.4.5 Standby线程的doCheckpoint()方法 5.5 用户操作情景分析 5.5.1 创建目录情景分析 5.5.2 创建文件情景分析 5.6 AvatarNode Standby故障切换过程 5.7 元数据一致性保证机制 5.7.1 元数据目录树信息 5.7.2 Data Node与Block数据块映射信息 5.8 Block更新同步问题 5.8.1 问题描述 5.8.2 结论 5.8.3 源码分析 第6章 AvatarNode使用 6.1 方案说明 6.1.1 网络拓扑 6.1.2 操作系统安装及配置 6.2 使用Avatar打补丁版本 6.2.1 Hadoop源码联机Build 6.2.2 Hadoop源码本地Build 6.2.3 NFS服务器构建 6.2.4 Avatar分发与部署 6.2.5 Primary(namenode0)节点配置 6.2.7 Data Node节点配置 6.2.8 Client节点配置 6.2.9 创建目录 6.2.10 挂载NFS 6.2.11 启动Ucarp 6.2.12 格式化 6.2.13 系统启动 6.2.14 检查 6.2.15 NameNode失效切换写文件实验 6.2.16 NameNode失效切换读文件实验 6.3 Avatar FaceBook版本的使用 6.3.1 Hadoop FaceBook版本安装 6.3.2 节点配置 6.3.3 启动HDFS 6.3.4 NameNode失效切换 第7章 AvatarNode异常解决方案 7.1 测试环境 7.2 Primary失效 7.2.1 解决方案 7.2.2 写操作实验步骤 7.2.3 改进写操作机制 7.2.4 读操作实验步骤 7.2.5 小结 7.3 Standby失效 7.4 NFS失效(数据未损坏) 7.4.1 解决方案 7.4.2 写操作实验步骤 7.4.3 读操作实验步骤 7.4.4 小结 322 7.5 NFS失效(数据已损坏) 7.5.1 解决方案 7.5.2 写操作实验步骤 7.5.3 读操作实验步骤 7.5.4 小结 7.6 Primary先失效,NFS后失效(数据未损坏) 7.6.1 解决方案 7.6.2 写操作实验步骤 7.6.3 读操作实验步骤 7.6.4 小结 7.7 Primary先失效(数据未损坏),NFS后失效(数据损坏) 7.7.1 解决方案 7.7.2 写操作实验步骤 7.7.3 读操作实验步骤 7.7.4 小结 7.8 NFS先失效(数据未损坏),Primary后失效 7.8.1 解决方案 7.8.2 写操作实验步骤 7.8.3 读操作实验步骤 7.8.4 小结 7.9 NFS先失效(数据损坏),Primary后失效(数据损坏) 7.9.1 解决方案 7.9.2 写操作实验步骤 7.9.3 读操作实验步骤 7.9.4 小结 7.10 实验结论 第8章 Cloudera HA NameNode使用 8.1 HA NameNode说明 8.2 CDH4B1版本HDFS集群配置 8.2.1 虚拟机安装 8.2.2 nn1配置 8.2.3 dn1~dn3配置 8.2.4 HDFS集群构建 8.3 HA NameNode配置 8.3.1 nn1配置 8.3.2 其他节点配置 8.4 HA NameNode使用 8.4.1 启动HA HDFS集群 8.4.2 第1次failover 8.4.3 模拟写操作 8.4.4 模拟Active Name Node失效,第2次failover 8.3.5 模拟新的Standby NameNode加入 8.5 小结
要搭建CDH(Cloudera Distribution including Apache Hadoop)的Hadoop分布式集群,您可以按照以下步骤进行操作: 1. 硬件准备:选择适合您需求的硬件,包括Master节点和Worker节点。Master节点通常包含NameNode、ResourceManager和其他管理组件,而Worker节点包含DataNodeNodeManager。 2. 操作系统准备:确保所有节点都安装了支持CDH的操作系统,如CentOS、Red Hat Enterprise Linux等,并进行必要的系统配置。 3. 安装CDH:下载CDH的安装包,根据官方文档的指引进行安装。您可以选择使用Cloudera Manager进行自动化安装,或者手动安装CDH的各个组件。 4. 配置集群:使用Cloudera Manager或手动配置各个组件的配置文件,包括HDFS、YARN、Hive、HBase等。确保配置正确,并进行必要的优化和调整。 5. 启动集群:启动各个组件,确保它们能够正常启动并工作。 6. 集群测试:使用CDH提供的工具和命令行工具,如hdfs dfs命令、yarn命令等,对集群进行测试和验证。确保Hadoop集群能够正确运行和处理任务。 7. 高可用和容错:根据需求,配置Hadoop高可用和容错功能,如配置多个NameNode实现HDFS的冗余和故障转移,配置ResourceManager的容错等。 8. 安全配置:根据需求,配置Hadoop的安全功能,如Kerberos认证、SSL加密等,以保护集群的安全性。 以上是搭建CDH Hadoop分布式集群的一般步骤,具体操作细节可以参考Cloudera官方文档或其他相关资源。请注意,这只是一个概述,实际操作可能会有所不同,具体取决于您的环境和需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值