热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

前言折腾了一段时间hadoop的部署管理,写下此系列博客记录一下。为了避免各位做部署这种重复性的劳动,我已经把部署的步骤写成脚本,各位只需要按着本文把脚本执行完,整个环境基本就部署
前言

 折腾了一段时间hadoop的部署管理,写下此系列博客记录一下。

 为了避免各位做部署这种重复性的劳动,我已经把部署的步骤写成脚本,各位只需要按着本文把脚本执行完,整个环境基本就部署完了。部署的脚本我放在了开源中国的git仓库里(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仓库

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

#!/bin/bashyum -y install rpc-bind nfs-utilsmkdir -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  startchkconfig  --level 234 rpcbind   onchkconfig  -level 234 nfs  on

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

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


yum Cy install gitmkdir Cp /opt/cd /opt/git clone http://git.oschina.net/snake1361222/hadoop_scripts.git/etc/init.d/iptables stop

2.修改hostname

sh /opt/hadoop_scripts/deploy/AddHostname.sh

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

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

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

vim /opt/hadoop_scripts/share_data/resolv_host127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4::1         localhost localhost.localdomain localhost6 localhost6.localdomain6192.168.1.1 nn.dg.hadoop.cn192.168.1.2 nn2.dg.hadoop.cn192.168.1.100 dn100.dg.hadoop.cn192.168.1.101 dn101.dg.hadoop.cn192.168.1.102 dn102.dg.hadoop.cn

5.执行部署脚本CreateNamenode.sh

sh /opt/hadoop_scripts/deploy/CreateNamenode.sh

6.搭建saltstack master

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

a.安装

yum -y install salt salt-master

b.修改配置文件`/etc/salt/master`,下面标志的是需要修改的项

修改监听IP:interface: 0.0.0.0多线程池:worker_threads: 5开启任务缓存:(官方描叙开启缓存能承载5000minion)job_cache开启自动认证:auto_accept: True

c.开启服务

/etc/init.d/salt-master startchkconfig  salt-master on

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

a. /etc/hadoop/conf/hdfs-site.xml (其实就是按实际修改主机名地址)

  dfs.namenode.rpc-address.mycluster.ns1  nn.dg.hadoop.cn:8020  定义ns1的rpc地址  dfs.namenode.rpc-address.mycluster.ns2  nn2.dg.hadoop.cn:8020  定义ns2的rpc地址    ha.zookeeper.quorum    dn100.dg.hadoop.cn:2181,dn101.dg.hadoop.cn:2181,dn102.dg.hadoop.cn:2181,    指定用于HA的ZooKeeper集群机器列表

b. mapred-site.xml

 mapreduce.jobhistory.address nn.dg.hadoop.cn:10020 mapreduce.jobhistory.webapp.address nn.dg.hadoop.cn:19888


c. yarn-site.xml

  yarn.resourcemanager.resource-tracker.address  nn.dg.hadoop.cn:8031  yarn.resourcemanager.address  nn.dg.hadoop.cn:8032  yarn.resourcemanager.scheduler.address  nn.dg.hadoop.cn:8030  yarn.resourcemanager.admin.address  nn.dg.hadoop.cn:8033


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

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

/etc/init.d/iptables stopmkdir Cp /opt/hadoop_scriptsrsync Cavz 192.168.1.1::hadoop_s   /opt/hadoop_scripts

2.执行部署脚本CreateNamenode.sh

sh /opt/hadoop_scripts/deploy/CreateNamenode.sh

3.同步hadoop配置文件

rsync Cavz 192.168.1.1::hadoop_conf  /etc/hadoop/conf

4.部署saltstack客户端

sh /opt/hadoop_scripts/deploy/salt_minion.sh

四、zookeeper服务器集群部署

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

1.安装

yum install zookeeper zookeeper-server

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

maxClientCnxns=50# The number of milliseconds of each ticktickTime=2000# The number of ticks that the initial# synchronization phase can takeinitLimit=10# The number of ticks that can pass between# sending a request and getting an acknowledgementsyncLimit=5# the directory where the snapshot is stored.dataDir=/var/lib/zookeeper# the port at which the clients will cOnnectclientPort=2181#这里指定zookeeper集群内的所有机器,此配置集群内机器都是一样的server.1=dn100.dg.hadoop.cn :2888:3888server.2=dn101.dg.hadoop.cn:2888:3888

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

#譬如当前机器是192.168.1.100(dn100.dg.hadoop.cn),它是server.1,id是1,SO:echo "1" >  /var/lib/zookeeper/myidchown -R zookeeper.zookeeper /var/lib/zookeeper/service zookeeper-server init/etc/init.d/zookeeper-server startchkconfig zookeeper-server on#如此类推,部署192.168.1.101

五、datanode & nodemanager 服务器部署

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

/etc/init.d/iptables stopmkdir Cp /opt/hadoop_scriptsrsync Cavz 192.168.1.1::hadoop_s   /opt/hadoop_scripts

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

sh /opt/hadoop_scripts/deploy/AddHostname.shsh /opt/hadoop_scripts/deploy/CreateDatanode.sh
集群初始化

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

一、namenode的HA高可用初始化

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

sudo Cu hdfs hdfs zkfc CformatZK

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

/etc/init.d/zookeeper-server start

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

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

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

#确保是用hdfs用户格式化sudo -u hdfs hadoop namenode Cformat

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

a.在主服务器(192.168.1.1)执行

tar -zcvPf /tmp/namedir.tar.gz /data/hadoop/dfs/name/nc -l 9999 
 

b.在备服务器(192.168.1.2)执行

wget 192.168.1.1:9999 -O /tmp/namedir.tar.gztar -zxvPf /tmp/namedir.tar.gz

6.主从服务都启动

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

7.查看hdfs的web界面

http://192.168.1.1:9080http://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服务器启动

#还记得之前搭建的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操作

#创建一个tmp目录sudo -u hdfs hdfs dfs -mkdir /tmp#创建一个10G大小的空文件,计算它的MD5值,并放入hdfsdd if=/dev/zero of=/data/test_10G_file bs=1G count=10md5sum /data/test_10G_filesudo -u hdfs hdfs dfs -put /data/test_10G_file  /tmpsudo -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)

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

2.把所有nodemanager服务启动

#还是登陆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环境是否正常

#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需要加入

vim /opt/hadoop_scripts/share_data/resolv_host127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4::1         localhost localhost.localdomain localhost6 localhost6.localdomain6192.168.1.1 nn.dg.hadoop.cn192.168.1.2 nn2.dg.hadoop.cn192.168.1.100 dn100.dg.hadoop.cn192.168.1.101 dn101.dg.hadoop.cn192.168.1.102 dn102.dg.hadoop.cn192.168.1.103 dn103.dg.hadoop.cn

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

mkdir Cp /opt/hadoop_scriptsrsync Cavz 192.168.1.1::hadoop_s   /opt/hadoop_scriptssh /opt/hadoop_scripts/deploy/CreateDatanode.shsh /opt/hadoop_scripts/deploy/AddHostname.sh


3.开启服务

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

二、修改hadoop配置文件

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

#修改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的值


总结

在折腾hadoop集群的部署是还是遇到了很多坑,打算下篇写自己所遭遇的问题。通过本文部署遇到问题的可以联系一下我,互相交流一下。QQ:83766787。当然也欢迎大家一起修改部署的脚本,git地址是http://git.oschina.net/snake1361222/hadoop_scripts

本文出自 “lxcong的运维技术” 博客,请务必保留此出处http://lxcong.blog.51cto.com/7485244/1241004


推荐阅读
  • 本文详细介绍了 Apache ZooKeeper 的 FileTxnLog 类中的 setPreallocSize 方法,并提供了多个实际应用中的代码示例。通过这些示例,读者可以更好地理解如何在不同场景下合理设置日志文件的预分配大小。 ... [详细]
  • 本文探讨了Web开发与游戏开发之间的主要区别,旨在帮助开发者更好地理解两种开发领域的特性和需求。文章基于作者的实际经验和网络资料整理而成。 ... [详细]
  • 58同城的Elasticsearch应用与平台构建实践
    本文由58同城高级架构师于伯伟分享,由陈树昌编辑整理,内容源自DataFunTalk。文章探讨了Elasticsearch作为分布式搜索和分析引擎的应用,特别是在58同城的实施案例,包括集群优化、典型应用实例及自动化平台建设等方面。 ... [详细]
  • 构建Filebeat-Kafka-Logstash-ElasticSearch-Kibana日志收集体系
    本文介绍了如何使用Filebeat、Kafka、Logstash、ElasticSearch和Kibana构建一个高效、可扩展的日志收集与分析系统。各组件分别承担不同的职责,确保日志数据能够被有效收集、处理、存储及可视化。 ... [详细]
  • 在CentOS上构建Ntopng实时网络流量监控平台
    本文详细介绍了如何在CentOS操作系统上安装和配置Ntopng,一个强大的网络流量监控工具。Ntopng能够提供实时的网络流量分析,并通过Web界面展示详细的流量报告。 ... [详细]
  • 本文详细记录了一次 HBase RegionServer 异常宕机的情况,包括具体的错误信息和可能的原因分析。通过此案例,探讨了如何有效诊断并解决 HBase 中常见的 RegionServer 挂起问题。 ... [详细]
  • 本文旨在分享将Hadoop集群从Windows环境迁移到Linux环境过程中遇到的技术难题及其解决方案,以帮助同行或未来的学习者避免类似问题。 ... [详细]
  • CentOS 6.8 上安装 Oracle 10.2.0.1 的常见问题及解决方案
    本文记录了在 CentOS 6.8 系统上安装 Oracle 10.2.0.1 数据库时遇到的问题及解决方法,包括依赖库缺失、操作系统版本不兼容、用户权限不足等问题。 ... [详细]
  • 本文介绍了如何在Django项目中使用django-crontab库来设置和管理定时任务,包括安装、配置、编写定时任务以及常见问题的解决方案。通过具体实例,帮助开发者快速掌握在Django中实现自动化任务的方法。 ... [详细]
  • 本文详细介绍了使用ZooKeeper构建高可用集群的方法,包括必要的软件环境准备、配置文件调整及集群启动等关键步骤。通常,一个ZooKeeper集群由奇数个节点组成,以确保Leader选举的有效性。 ... [详细]
  • 收割机|篇幅_国内最牛逼的笔记,不接受反驳!!
    收割机|篇幅_国内最牛逼的笔记,不接受反驳!! ... [详细]
  • Kafka 示例项目中 Log4j 的配置与调试
    本文详细介绍了如何在 Kafka 源码中的示例项目配置 Log4j,以确保能够正确记录日志信息,帮助开发者更好地理解和调试代码。 ... [详细]
  • Kafka Topic 数据管理与清理策略
    本文探讨了在生产环境中如何有效管理和定期清理Kafka Topic中的数据。介绍了基于时间、日志大小和日志起始偏移量三种清除方式,并重点讲解了基于时间的清除策略及其配置方法。 ... [详细]
  • Zookeeper面试常见问题解析
    本文详细介绍了Zookeeper中的ZAB协议、节点类型、ACL权限控制机制、角色分工、工作状态、Watch机制、常用客户端、分布式锁实现、默认通信框架以及消息广播和领导选举的流程。 ... [详细]
  • 如何构建基于Dubbo协议的示例项目
    本文详细介绍了构建基于Dubbo协议的示例项目的步骤,包括环境搭建、服务接口定义、服务实现、配置文件设置及客户端调用等环节,旨在为初学者提供一个清晰的学习路径。 ... [详细]
author-avatar
Duanzd09
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有