Chinaunix首页 | 论坛 | 博客
  • 博客访问: 381516
  • 博文数量: 69
  • 博客积分: 1486
  • 博客等级: 上尉
  • 技术积分: 630
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-22 18:38
个人简介

...

文章分类
文章存档

2024年(1)

2021年(2)

2020年(2)

2016年(9)

2015年(34)

2011年(14)

2010年(7)

分类: HADOOP

2015-08-11 11:41:34

  • HadoopMRv2
Yarn
从 0.23.0 版本开始,Hadoop 的 MapReduce 框架完全重构,发生了根本的变化。新的 Hadoop MapReduce 框架命名为 MapReduceV2 或者叫 Yarn,即 
MapReduce 2.0 (MRv2) 或 Yet Another Resource Negotiator (YARN)

hadoopV2 版本中将 JobTracker 两个主要的功能分离成单独的组件,这两个功能是资源管理和任务调度 / 监控

YARN 分层结构的本质是 ResourceManager。这个实体控制整个集群并管理应用程序向基础计算资源的分配。ResourceManager 将各个资源部分(计算、内
存、带宽等)精心安排,
给基础 NodeManager(YARN 的每节点代理)。ResourceManager 还与 ApplicationMaster 一起分配资源,与 NodeManager 一
起启
动和监视它们的基础应用程序。在此上下文中,ApplicationMaster 承担了
以前的 TaskTracker 的一些角色,ResourceManager 承担了 JobTracker 的角色
ResourceManager
是一个中心的服务,它做的事情是调度、启动每一个 Job 所属的 ApplicationMaster、另外监控 ApplicationMaster 的存在情况
ApplicationMaster
监控 job 下的 tasks 的运行状况ResourceManager 通过他的一个模块 ApplicationsMasters( 注意不是 ApplicationMaster),它是监测 ApplicationMaster 的运行状
况,如果出问题,会将其在其他机器上重启
ApplicationMaster管理一个在 YARN 内运行的应用程序的每个实例。ApplicationMaster 负责协调来自 ResourceManager 的
资源,并通过 NodeManager 监视容器的执行和
资源使用(CPU、内存等的资源分配)。请注意,尽管目前的资源更加传统(CPU 核心、内存),但未来会带来基于手头任
务的新资源类型(比如图形处理单元或专用处理设备)。从 YARN 角度讲,ApplicationMaster 是
用户代码,因此存在潜在的安全问题。YARN 假设 ApplicationMaster
在错误或者甚至是恶意的,因此将它们当作无特权的代码对待

Nodemanager
功能比较专一,就是负责 Container 状态的维护,并向 RM 保持心跳,NodeManager 提供针对集群中每个节点的服务,从监督对一个容器的终生管理到监视资源和跟踪节
点健康。MRv1 通过插槽
管理 Map 和 Reduce 任务的执行,而 NodeManager 管理抽象容器,这些容器代表着可供一个特定应用程序使用的针对每个节点的资源。YARN
继续使用HDFS 层。它的主要 NameNode 用于
元数据服务,而 DataNode 用于分散在一个集群中的复制存储服务


小结:
ResourceManager 协商一个容器的必要资源,启动一个 ApplicationMaster 来表示已提交的应用程序。通过使用一个资源请求协议,ApplicationMaster 协商每个节点上
供应用程序使用的资源容器。执行
应用程序时,ApplicationMaster 监视容器直到完成。当应用程序完成时,ApplicationMaster 从 ResourceManager 注销其容器,执行
周期就完成了


关于resourcemanager 介绍的链接:http://zengzhaozheng.blog.51cto.com/8219051/1542067


表 1. 新旧 Hadoop 脚本 / 变量 / 位置变化表

改变项 原框架中 新框架中(Yarn) 备注
配置文件位置 ${hadoop_home_dir}/conf ${hadoop_home_dir}/etc/hadoop/ Yarn 框架也兼容老的 ${hadoop_home_dir}/conf 位置配置,启动时会检测是否存在老的 conf 目录,如果存在将加载 conf 目录下的配置,否则加载 etc 下配置
启停脚本 ${hadoop_home_dir}/bin/start(stop)-all.sh ${hadoop_home_dir}/sbin/start(stop)-dfs.sh
${hadoop_home_dir}/bin/start(stop)-all.sh
新的 Yarn 框架中启动分布式文件系统和启动 Yarn 分离,启动 / 停止分布式文件系统的命令位于 ${hadoop_home_dir}/sbin 目录下,启动 / 停止 Yarn 框架位于 ${hadoop_home_dir}/bin/ 目录下
JAVA_HOME 全局变量 ${hadoop_home_dir}/bin/start-all.sh 中 ${hadoop_home_dir}/etc/hadoop/hadoop-env.sh
${hadoop_home_dir}/etc/hadoop/Yarn-env.sh
Yarn 框架中由于启动 hdfs 分布式文件系统和启动 MapReduce 框架分离,JAVA_HOME 需要在 hadoop-env.sh 和 Yarn-env.sh 中分别配置
HADOOP_LOG_DIR 全局变量 不需要配置 ${hadoop_home_dir}/etc/hadoop/hadoop-env.sh 老框架在 LOG,conf,tmp 目录等均默认为脚本启动的当前目录下的 log,conf,tmp 子目录 
Yarn 新框架中 Log 默认创建在 Hadoop 用户的 home 目录下的 log 子目录,因此最好在 ${hadoop_home_dir}/etc/hadoop/hadoop-env.sh 配置 HADOOP_LOG_DIR,否则有可能会因为你启动 hadoop 的用户的 .bashrc 或者 .bash_profile 中指定了其他的 PATH 变量而造成日志位置混乱,而该位置没有访问权限的话启动过程中会报错


注:
由于新的 Yarn 框架与原 Hadoop MapReduce 框架相比变化较大,核心的配置文件中很多项在新框架中已经废弃,而新框架中新增了很多其他配置项,看
下表所示会更加清晰



表 2. 新旧 Hadoop 框架配置项变化表
配置文件 配置项 Hadoop 0.20.X 配置 Hadoop 0.23.X 配置 说明
core-site.xml 系统默认分布式文件 URI fs.default.name fs.defaultFS
hdfs-site.xml DFS name node 存放 name table 的目录 dfs.name.dir dfs.namenode.name.dir 新框架中 name node 分成 dfs.namenode.name.dir( 存放 naname table 和 dfs.namenode.edits.dir(存放 edit 文件),默认是同一个目录
DFS data node 存放数据 block 的目录 dfs.data.dir dfs.datanode.data.dir 新框架中 DataNode 增加更多细节配置,位于 dfs.datanode. 配置项下,如dfs.datanode.data.dir.perm(datanode local 目录默认权限);dfs.datanode.address(datanode 节点监听端口);等
分布式文件系统数据块复制数 dfs.replication dfs.replication 新框架与老框架一致,值建议配置为与分布式 cluster 中实际的 DataNode 主机数一致
mapred-site.xml Job 监控地址及端口 mapred.job.tracker 新框架中已改为 Yarn-site.xml 中的 resouceManager 及 nodeManager 具体配置项,新框架中历史 job 的查询已从 Job tracker 剥离,归入单独的mapreduce.jobtracker.jobhistory 相关配置,
第三方 MapReduce 框架 mapreduce.framework.name 新框架支持第三方 MapReduce 开发框架以支持如 SmartTalk/DGSG 等非 Yarn 架构,注意通常情况下这个配置的值都设置为 Yarn,如果没有配置这项,那么提交的 Yarn job 只会运行在 locale 模式,而不是分布式模式。
Yarn-site.xml The address of the applications manager interface in the RM Yarn.resourcemanager.address 新框架中 NodeManager 与 RM 通信的接口地址
The address of the scheduler interface Yarn.resourcemanager.scheduler.address 同上,NodeManger 需要知道 RM 主机的 scheduler 调度服务接口地址
The address of the RM web application Yarn.resourcemanager.webapp.address 新框架中各个 task 的资源调度及运行状况通过通过该 web 界面访问
The address of the resource tracker interface Yarn.resourcemanager.resource-tracker.address 新框架中 NodeManager 需要向 RM 报告任务运行状态供 Resouce 跟踪,因此 NodeManager 节点主机需要知道 RM 主机的 tracker 接口地址



zookeeper

主备节点的自动切换需要配置zookeeper。active namenode和standby namenode把他们的状态实时记录到zookeeper中,zookeeper监视他们的状态变化。当
zookeeper发现active namenode挂掉
后,会自动把standby namenode切换成active namenode


journalnode
hadoop2.0的HA 机制有两个namenode,一个是active namenode,状态是active;另外一个是standby namenode,状态是standby,active namenode和
standby namenode之间通过
JN(journalnode,QJM方式)来同步数据

active namenode和standby namenode之间是通过一组journalnode(数量是奇数,可以是3,5,7...,2n+1)来共享数据。active namenode把最近的edits文件
写到2n+1个journalnode上,只要有n+1个写入成功就认为这次写入操作成功了,然后standby namenode就可以从journalnode上读取了。可以看到,QJM方式
容错的机制,可以容忍n个journalnode的失败

主备节点的自动切换需要配置zookeeper。active namenode和standby namenode把他们的状态实时记录到zookeeper中,zookeeper监视他们的状态变化。当
zookeeper
发现active namenode挂掉后,会自动把standby namenode切换成active namenode







  • HA启动流程

1 启动zookeeper集群

点击(此处)折叠或打开

  1. 启动zookeeper(分别在zookeeper主机上启动zK进程
  2. $ zkServer.sh start
  3. JMX enabled by default
    Using config: /home/yinmo/zookeeper-3.4.6/bin/../conf/zoo.cfg
    Starting zookeeper ... STARTED

  4. 查看zookeeper状态
  5. $ zkServer.sh status
  6. JMX enabled by default
    Using config: /home/yinmo/zookeeper-3.4.6/bin/../conf/zoo.cfg
    Mode: leader
  7. $ jps

2 启动journalnode

点击(此处)折叠或打开

  1. 分别在HadoopMaster主机上启动journalnode
  2. $ sbin/hadoop-daemon.sh start journalnode
  3. starting journalnode, logging to /home/yinmo/hadoop/logs//hadoop-yinmo-journalnode-Master.Hadoop.out

  4. $ jps
  5. 10288 QuorumPeerMain
    10403 JournalNode
    10437 Jps


3 在Hadoop Master上执行命令
(首次启动需执行这个命令,以后跳过这个步骤,这个执行前,请先启动journalnode,否则会报错)

点击(此处)折叠或打开

  1. $ ./hdfs namenode -format

备注:
格式化成功会生成tmp文件,其路径为core-site.xml中的hadoop.tmp.dir配置路径,将其拷到其他节点

格式化ZK
(首次启动需执行这个命令,以后跳过这个步骤
格式化zookeeper集群 目的是在zookeeper集群建立HA相应的节点,仅在Hadoop Master上执行命令

点击(此处)折叠或打开

  1. $ /usr/local/hadoop/bin/hdfs zkfc –formatZK

5 启动namenode,通过jps验证,或者网页验证

点击(此处)折叠或打开

  1. 启动namenode
  2. $ sbin/start-dfs.sh
  3. Starting namenodes on [Master.Hadoop]
  4. Master.Hadoop: starting namenode, logging to /home/yinmo/hadoop/logs//hadoop-yinmo-namenode-Master.Hadoop.out
  5. 192.168.2.103: starting datanode, logging to /home/yinmo/hadoop/logs/hadoop-yinmo-datanode-Slave103.Hadoop.out
  6. 192.168.2.101: starting datanode, logging to /home/yinmo/hadoop/logs/hadoop-yinmo-datanode-Slave101.Hadoop.out
  7. 192.168.2.102: starting datanode, logging to /home/yinmo/hadoop/logs/hadoop-yinmo-datanode-Slave102.Hadoop.out

6 启动yarn

点击(此处)折叠或打开

  1. 启动yarn
  2. $ sbin/start-yarn.sh
  3. starting yarn daemons
  4. starting resourcemanager, logging to /home/yinmo/hadoop/logs/yarn-yinmo-resourcemanager-Master.Hadoop.out
  5. 192.168.2.102: starting nodemanager, logging to /home/yinmo/hadoop/logs/yarn-yinmo-nodemanager-Slave102.Hadoop.out
  6. 192.168.2.103: starting nodemanager, logging to /home/yinmo/hadoop/logs/yarn-yinmo-nodemanager-Slave103.Hadoop.out
  7. 192.168.2.101: starting nodemanager, logging to /home/yinmo/hadoop/logs/yarn-yinmo-nodemanager-Slave101.Hadoop.out

7 启动ZooKeeperFailoverController,在hadoop集群各节点分别执行
注:
在hadoopHA集群中,执行start-dfs.sh已经启动了这个进程,这里单独列出来只是防止这个进程挂了之后,方便重启

点击(此处)折叠或打开

  1. $ sbin/hadoop-daemon.sh start zkfc
  2. $ jps
  3. 12342 DFSZKFailoverController

8 启动httpfs

开启 httpfs 服务使得对外可以提高 http 的restful接口服 务

点击(此处)折叠或打开

  1. $ ./httpfs.sh start
  2. $ jps
  3. Bootstrap


8 spark 

点击(此处)折叠或打开

  1. $ ./start-master.sh
  2. $ ./start-slaves.sh
  3. 分别在主机和备机查看spark进程
  4. 主机
  5. $ jps
  6. 6421 Master
  7. 备机
  8. $ jps
  9. 5103 Worker

9 同步active数据到standby

点击(此处)折叠或打开

  1. $ hdfs namenode –bootstrapStandby

10 Master主机手动切换

点击(此处)折叠或打开

  1. $ hdfs haadmin -failover --forcefence --forceactive nna nns









阅读(2240) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~