Hadoop2.4.1集群搭建
来源:互联网 发布:gameloft的java小游戏 编辑:程序博客网 时间:2024/05/22 09:52
本文搭建Hadoop2.4.1分布式系统,包括NameNode ,ResourceManger HA,忽略了Web Application Proxy 和Job HistoryServer。
一概述(一)HDFS
1)基础架构
(1)NameNode(Master)
- 命名空间管理:命名空间支持对HDFS中的目录、文件和块做类似文件系统的创建、修改、删除、列表文件和目录等基本操作。
- 块存储管理
(2)DataNode(Slaver)
namenode和client的指令进行存储或者检索block,并且周期性的向namenode节点报告它存了哪些文件的block
2)HA架构
使用Active NameNode,Standby NameNode 两个结点解决单点问题,两个结点通过JounalNode共享状态,通过ZKFC 选举Active ,监控状态,自动备援。
(1)Active NameNode:
接受client的RPC请求并处理,同时写自己的Editlog和共享存储上的Editlog,接收DataNode的Block report, block location updates和heartbeat;
(2)Standby NameNode:
同样会接到来自DataNode的Block report, block location updates和heartbeat,同时会从共享存储的Editlog上读取并执行这些log操作,使得自己的NameNode中的元数据(Namespcae information + Block locations map)都是和Active NameNode中的元数据是同步的。所以说Standby模式的NameNode是一个热备(Hot Standby NameNode),一旦切换成Active模式,马上就可以提供NameNode服务
(3)JounalNode:
用于Active NameNode , Standby NameNode 同步数据,本身由一组JounnalNode结点组成,该组结点基数个,支持Paxos协议,保证高可用,是CDH5唯一支持的共享方式(相对于CDH4 促在NFS共享方式)
(4)ZKFC:
监控NameNode进程,自动备援。
(二)YARN
1)基础架构
(1)ResourceManager(RM)
接收客户端任务请求,接收和监控NodeManager(NM)的资源情况汇报,负责资源的分配与调度,启动和监控ApplicationMaster(AM)。
(2)NodeManager
节点上的资源管理,启动Container运行task计算,上报资源、container情况给RM和任务处理情况给AM。
(3)ApplicationMaster
单个Application(Job)的task管理和调度,向RM进行资源的申请,向NM发出launch Container指令,接收NM的task处理状态信息。NodeManager
(4)Web Application Proxy
用于防止Yarn遭受Web攻击,本身是ResourceManager的一部分,可通过配置独立进程。ResourceManager Web的访问基于守信用户,当Application Master运行于一个非受信用户,其提供给ResourceManager的可能是非受信连接,Web Application Proxy可以阻止这种连接提供给RM。
(5)Job History Server
NodeManager在启动的时候会初始化LogAggregationService服务, 该服务会在把本机执行的container log (在container结束的时候)收集并存放到hdfs指定的目录下. ApplicationMaster会把jobhistory信息写到hdfs的jobhistory临时目录下, 并在结束的时候把jobhisoty移动到最终目录, 这样就同时支持了job的recovery.History会启动web和RPC服务, 用户可以通过网页或RPC方式获取作业的信息
2)HA架构
ResourceManager HA 由一对Active,Standby结点构成,通过RMStateStore存储内部数据和主要应用的数据及标记。目前支持的可替代的RMStateStore实现有:基于内存的MemoryRMStateStore,基于文件系统的FileSystemRMStateStore,及基于zookeeper的ZKRMStateStore。
ResourceManager HA的架构模式同NameNode HA的架构模式基本一致,数据共享由RMStateStore,而ZKFC成为 ResourceManager进程的一个服务,非独立存在。
二 规划
(一)版本
组件名
版本
说明
JDK
jdk1.7.0_71
Hadoop
hadoop-2.4.1.tar.gz
主程序包
Zookeeper
zookeeper-3.4.5.tar.gz
热切,Yarn 存储数据使用的协调服务
(二)主机规划
IP
Host
部署模块
进程
192.168.102
drh02
NameNode
ResourceManager
DataNode
NodeManager
Zookeeper
NameNode
DFSZKFailoverController
ResourceManager
DataNode
NodeManager
JournalNode
QuorumPeerMain
192.168.103
drh03
NameNode
ResourceManager
DataNode
NodeManager
Zookeeper
NameNode
DFSZKFailoverController
ResourceManager
DataNode
NodeManager
JournalNode
QuorumPeerMain
192.168.104
drh04
DataNode
NodeManager
Zookeeper
DataNode
NodeManager
JournalNode
QuorumPeerMain
下面列举几个其他的:
IP
Host
部署模块
进程
8.8.8.11
Hadoop-NN-01
NameNode
ResourceManager
NameNode
DFSZKFailoverController
ResourceManager
8.8.8.13
Hadoop-NN-02
NameNode
ResourceManager
NameNode
DFSZKFailoverController
ResourceManager
8.8.8.13
Hadoop-DN-01
Zookeeper-01
DataNode
NodeManager
Zookeeper
DataNode
NodeManager
JournalNode
QuorumPeerMain
8.8.8.14
Hadoop-DN-02
Zookeeper-02
DataNode
NodeManager
Zookeeper
DataNode
NodeManager
JournalNode
QuorumPeerMain
8.8.8.15
Hadoop-DN-03
Zookeeper-03
DataNode
NodeManager
Zookeeper
DataNode
NodeManager
JournalNode
QuorumPeerMain
drh01 192.168.68.201 jdk、hadoop NameNode、DFSZKFailoverController(zkfc)
drh02 192.168.68.202 jdk、hadoop NameNode、DFSZKFailoverController(zkfc)
drh03 192.168.68.203 jdk、hadoop ResourceManager
drh04 192.168.68.204 jdk、hadoop ResourceManager
drh05 192.168.68.205 jdk、hadoop、zookeeper DataNode、NodeManager、JournalNode、QuorumPeerMain
drh06 192.168.68.206 jdk、hadoop、zookeeper DataNode、NodeManager、JournalNode、QuorumPeerMain
drh07 192.168.68.207 jdk、hadoop、zookeeper DataNode、NodeManager、JournalNode、QuorumPeerMain
各个进程解释:
- NameNode: hdfs的cluster
- ResourceManager: yarn的cluster
- DFSZKFC:DFS Zookeeper Failover Controller 激活Standby NameNode
- DataNode: hdfs的master
- NodeManager
- JournalNode:NameNode共享editlog结点服务(如果使用NFS共享,则该进程和所有启动相关配置接可省略)。
- QuorumPeerMain:Zookeeper主进程
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.4.1解决了这个问题,有两个ResourceManager,一个是Active,一个是Standby,状态由zookeeper进行协调
(三)目录规划
注意 本人是在根目录下创建了一个hadoop目录,有关hadoop的东西放这个目录下,但是在根目录下只有root可以创建,因此创建之后因为把这个文件夹的权限给我们搭建环境的用户,本人的是drh用户 不建议用root ,除非你真的不懂一点linux权限知识,如果真不懂,最好先学!(个人观点)
root用户下 mkdir /hadoop
root用户下 chown drh.drh /haoop
三 环境准备
1)修改ip,主机名,映射,关闭防火墙
1.1修改主机名
vim /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=drh01
1.2修改IP
两种方式:
第一种:通过Linux图形界面进行修改(强烈推荐)
进入Linux图形界面 -> 右键点击右上方的两个小电脑 -> 点击Edit connections -> 选中当前网络System eth0 -> 点击edit按钮 -> 选择IPv4 -> method选择为manual -> 点击add按钮 -> 添加IP:192.168.68.102 子网掩码:255.255.255.0 网关:192.168.68.1 -> apply
第二种:修改配置文件方式(屌丝程序猿专用)
vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
BOOTPROTO="static" ###
........
IPADDR="192.168.68.102" ###
NETMASK="255.255.255.0" ###
GATEWAY="192.168.68.1" ###
1.3修改主机名和IP的映射关系
vim /etc/hosts
192.168.68.102 drh02
192.168.68.103 drh03
192.168.68.104 drh04
注意:除去自己本身:例如现在在drh02上配置hosts 那么只需要添加drh03和drh04即可,多添加启动hdfs失败
2)安装JRE:
2.1上传
2.2解压jdk
#创建文件夹
mkdir /home/drh/java
#解压
tar -zxvf jdk-7u71-linux-i586.tar.gz -C /home/drh/java
2.3将java添加到环境变量中
vim /etc/profile(记得切换到root用户)
#在文件最后添加
export JAVA_HOME=/home/drh/java/jdk1.7.0_71
export PATH=$PATH:$JAVA_HOME/bin
#刷新配置
source /etc/profil
***************************以上步骤3台机器都重复做下************************
3)安装Zookeeper :
安装步骤:
1.安装配置zooekeeper集群(在drh02上)
1.1解压
tar -zxvf zookeeper-3.4.5.tar.gz -C /hadoop/
1.2修改配置
cd /haoop/zookeeper-3.4.5/conf/
cp zoo_sample.cfg zoo.cfg
vim zoo.cfg
修改:dataDir=/hadoop/zookeeper-3.4.5/tmp
在最后添加:
server.1=drh02:2888:3888
server.2=drh03:2888:3888
server.3=drh04:2888:3888
保存退出
然后创建一个tmp文件夹
mkdir /hadoop/zookeeper-3.4.5/tmp
再创建一个空文件
touch /hadoop/zookeeper-3.4.5/tmp/myid
最后向该文件写入ID
echo 1 > /hadoop/zookeeper-3.4.5/tmp/myid
1.3将配置好的zookeeper拷贝到其他节点(首先分别在drh03、drh04根目录下创建一个itcast目录:mkdir /haoop)
scp -r /hadoop/zookeeper-3.4.5/ drh03:/hadoop/
scp -r /haoop/zookeeper-3.4.5/drho4:/hadoop/
注意:修改drh03、drh04对应/hadoop/zookeeper-3.4.5/tmp/myid内容
drh03:
echo 2 > /hadoop/zookeeper-3.4.5/tmp/myid
drh04:
echo 3 > /hadoop/zookeeper-3.4.5/tmp/myid
1.1解压
tar -zxvf zookeeper-3.4.5.tar.gz -C /hadoop/
1.2修改配置
cd /haoop/zookeeper-3.4.5/conf/
cp zoo_sample.cfg zoo.cfg
vim zoo.cfg
修改:dataDir=/hadoop/zookeeper-3.4.5/tmp
在最后添加:
server.1=drh02:2888:3888
server.2=drh03:2888:3888
server.3=drh04:2888:3888
保存退出
然后创建一个tmp文件夹
mkdir /hadoop/zookeeper-3.4.5/tmp
再创建一个空文件
touch /hadoop/zookeeper-3.4.5/tmp/myid
最后向该文件写入ID
echo 1 > /hadoop/zookeeper-3.4.5/tmp/myid
1.3将配置好的zookeeper拷贝到其他节点(首先分别在drh03、drh04根目录下创建一个itcast目录:mkdir /haoop)
scp -r /hadoop/zookeeper-3.4.5/ drh03:/hadoop/
scp -r /haoop/zookeeper-3.4.5/drho4:/hadoop/
注意:修改drh03、drh04对应/hadoop/zookeeper-3.4.5/tmp/myid内容
drh03:
echo 2 > /hadoop/zookeeper-3.4.5/tmp/myid
drh04:
echo 3 > /hadoop/zookeeper-3.4.5/tmp/myid
4)配置SSH互信:
(1)drh01创建密钥:
(2)分发密钥:
(3)验证:
5)配置/etc/hosts并分发: root用户修改 或者是用 sudo
************************3台都需要配置(而且一模一样)*****************************
6)配置环境变量:本人使用修改profile 还可以:vi ~/.bashrc 然后 source ~/.bashrc
四 安装
1)解压
2)修改配置文件
说明: cd /hadoop/hadoop-2.4.1/etc/hadoop
配置名称
类型
说明
hadoop-env.sh
Bash脚本
Hadoop运行环境变量设置
core-site.xml
xml
配置Hadoop core,如IO
hdfs-site.xml
xml
配置HDFS守护进程:NN、JN、DN
yarn-env.sh
Bash脚本
Yarn运行环境变量设置
yarn-site.xml
xml
Yarn框架配置环境
mapred-site.xml
xml
MR属性设置
capacity-scheduler.xml
xml
Yarn调度属性设置
container-executor.cfg
Cfg
Yarn Container配置
mapred-queues.xml
xml
MR队列设置
hadoop-metrics.properties
Java属性
Hadoop Metrics配置
hadoop-metrics2.properties
Java属性
Hadoop Metrics配置
slaves
Plain Text
DN节点配置
exclude
Plain Text
移除DN节点配置文件
log4j.properties
系统日志设置
configuration.xsl
(1)修改$HADOOP_HOME/etc/hadoop/hadoop-env.sh:
截图如下:
(2)修改$HADOOP_HOME/etc/hadoop/core-site.xml
(3)修改$HADOOP_HOME/etc/hdfs-site.xml
(4)$HADOOP_HOEM/etc/hadoop/mapred-site.xml (hadoop2.4.1是没有这个的 提供了mapred-site.xml.template)
[drh@drh02 hadoop]$ cp mapred-site.xml.template mapred-site.xml
(5)修改$HADOOP_HOME/etc/yarn-site.xml
(6)修改slaves
3)分发程序
4)启动HDFS
(1)启动zookeeper集群(分别在drh02,drh03,drh03上启动zk)
(1)启动JournalNode(drh02,drh03,drh04分别启动)
格式化前需要在JournalNode结点上启动JournalNode:
验证JournalNode:
(2)NameNode 格式化:
结点drh01:hdfs namenode -format
15/02/07 20:56:51 FATAL namenode.NameNode: Exception in namenode join
java.lang.IllegalArgumentException: Unable to construct journal, qjournal://drh02:8485;drh03:8485;drh04:8485/ns1
at org.apache.hadoop.hdfs.server.namenode.FSEditLog.createJournal(FSEditLog.java:1523)
at org.apache.hadoop.hdfs.server.namenode.FSEditLog.initJournals(FSEditLog.java:264)
at org.apache.hadoop.hdfs.server.namenode.FSEditLog.initJournalsForWrite(FSEditLog.java:230)
at org.apache.hadoop.hdfs.server.namenode.NameNode.format(NameNode.java:893)
at org.apache.hadoop.hdfs.server.namenode.NameNode.createNameNode(NameNode.java:1310)
at org.apache.hadoop.hdfs.server.namenode.NameNode.main(NameNode.java:1424)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
at org.apache.hadoop.hdfs.server.namenode.FSEditLog.createJournal(FSEditLog.java:1521)
... 5 more
Caused by: java.lang.NullPointerException
at org.apache.hadoop.hdfs.qjournal.client.IPCLoggerChannelMetrics.getName(IPCLoggerChannelMetrics.java:107)
at org.apache.hadoop.hdfs.qjournal.client.IPCLoggerChannelMetrics.create(IPCLoggerChannelMetrics.java:91)
at org.apache.hadoop.hdfs.qjournal.client.IPCLoggerChannel.<init>(IPCLoggerChannel.java:166)
at org.apache.hadoop.hdfs.qjournal.client.IPCLoggerChannel$1.createLogger(IPCLoggerChannel.java:146)
at org.apache.hadoop.hdfs.qjournal.client.QuorumJournalManager.createLoggers(QuorumJournalManager.java:367)
at org.apache.hadoop.hdfs.qjournal.client.QuorumJournalManager.createLoggers(QuorumJournalManager.java:149)
at org.apache.hadoop.hdfs.qjournal.client.QuorumJournalManager.<init>(QuorumJournalManager.java:116)
at org.apache.hadoop.hdfs.qjournal.client.QuorumJournalManager.<init>(QuorumJournalManager.java:105)
... 10 more
15/02/07 20:56:51 INFO util.ExitUtil: Exiting with status 1
15/02/07 20:56:51 INFO namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at java.net.UnknownHostException: drh02: drh02
以上报错解决:查看juornalnode日志发现是hosts文件127.0.0.1对应的主机名错误!
(3)同步NameNode元数据:
同步drh02元数据到drh03
主要是:dfs.namenode.name.dir,dfs.namenode.edits.dir还应该确保共享存储目录下(dfs.namenode.shared.edits.dir ) 包含NameNode 所有的元数据。
注意:启动hdfs是报错:
drh04: /hadoop/hadoop-2.4.1/sbin/hadoop-daemon.sh: line 157: /tmp/hadoop-drh-datanode.pid: 权限不够
drh04上tmp的所属用户和组 我显示是root root 需要改成drh drh 命令:chown drh.drh tmp/
(4)初始化Zkfc:
创建ZNode,记录状态信息。
结点drh02:hdfs zkfc -formatZK
(5)启动hdfs
集群启动法:drh02:
第一次:启动失败:原因是在hosts中配置了drh02 192.168.68.102
解决:需要删除
再次启动还有这问题 执行命令:ssh-keygen -R 192.168.68.102
第二次:
启动hdfs(drh02):
<2>启动yarn(drh03):
(6)验证
<1>进程
drh02
drh02
drh04
[root@drh04 tmp]# jps
9802 JournalNode
9905 NodeManager
10319 Jps
6304 DataNode
3121 QuorumPeerMain
<2>页面:
Active结点:http://drh02:50070
StandBy结点:http://drh02:50070
这是你可以验证他的HA,你kill活动的那个namenode,你会发现之前standby的namenode会切换成active
s
以上文章部分参考了:http://www.aboutyun.com/thread-9115-1-1.html
以上文章作者按照操作是成功了!
0 0
- Hadoop2.4.1集群搭建
- Hadoop2.4.1集群搭建
- hadoop2.4.1集群搭建
- hadoop2.4.1集群搭建
- hadoop2.4.1集群搭建
- hadoop2.4.1集群搭建
- hadoop2.4.1集群搭建
- hadoop2.4.1集群环境搭建
- hadoop2.4.1集群环境搭建
- Hadoop2.4.1集群搭建(YARN)
- hadoop2.0集群搭建
- hadoop2/CDH4集群搭建
- Hadoop2.2.0集群搭建
- hadoop2.2.0集群搭建
- hadoop2.2.0集群搭建
- hadoop2.7.0集群搭建
- Hadoop2.6.0集群搭建
- hadoop2.2.0集群搭建
- zoj 1060 && poj 1094 Sorting It All Out
- 基于Python的行为驱动开发实战
- Twitter Bootstrup风格jQuery用户向导插件
- UVa 227 Puzzle
- UVa 146 ID码
- Hadoop2.4.1集群搭建
- 欢迎使用CSDN-markdown编辑器
- 05.sprite_kit前瞻之节点的动画
- 中医治疗硬皮病十三法
- java.util.vector中的vector的详细用法
- opencv+QT+cmake
- POJ 3268 Silver Cow Party(两次Dijkstra求最大值)
- 在线开发与编译的脚本语言
- Linux tree 命令用法