新旧 Hadoop MapReduce 框架比对(配置)

[size=0.76em]让我们来对新旧 MapReduce 框架做详细的分析和对比,可以看到有以下几点显著变化:
[size=0.76em]首先客户端不变,其调用 API 及接口大部分保持兼容,这也是为了对开发使用者透明化,使其不必对原有代码做大的改变 ( 详见 2.3 Demo 代码开发及详解),但是原框架中核心的 JobTracker 和 TaskTracker 不见了,取而代之的是 ResourceManager, ApplicationMaster 与 NodeManager 三个部分。
[size=0.76em]我们来详细解释这三个部分,首先 ResourceManager 是一个中心的服务,它做的事情是调度、启动每一个 Job 所属的 ApplicationMaster、另外监控 ApplicationMaster 的存在情况。细心的读者会发现:Job 里面所在的 task 的监控、重启等等内容不见了。这就是 AppMst 存在的原因。ResourceManager 负责作业与资源的调度。接收 JobSubmitter 提交的作业,按照作业的上下文 (Context) 信息,以及从 NodeManager 收集来的状态信息,启动调度过程,分配一个 Container 作为 App Mstr
[size=0.76em]NodeManager 功能比较专一,就是负责 Container 状态的维护,并向 RM 保持心跳。
[size=0.76em]ApplicationMaster 负责一个 Job 生命周期内的所有工作,类似老的框架中 JobTracker。但注意每一个 Job(不是每一种)都有一个 ApplicationMaster,它可以运行在 ResourceManager 以外的机器上。
[size=0.76em]Yarn 框架相对于老的 MapReduce 框架什么优势呢?我们可以看到:
  • 这个设计大大减小了 JobTracker(也就是现在的 ResourceManager)的资源消耗,并且让监测每一个 Job 子任务 (tasks) 状态的程序分布式化了,更安全、更优美。
  • 在新的 Yarn 中,ApplicationMaster 是一个可变更的部分,用户可以对不同的编程模型写自己的 AppMst,让更多类型的编程模型能够跑在 Hadoop 集群中,可以参考 hadoop Yarn 官方配置模板中的 mapred-site.xml 配置。
  • 对于资源的表示以内存为单位 ( 在目前版本的 Yarn 中,没有考虑 cpu 的占用 ),比之前以剩余 slot 数目更合理。
  • 老的框架中,JobTracker 一个很大的负担就是监控 job 下的 tasks 的运行状况,现在,这个部分就扔给 ApplicationMaster 做了,而 ResourceManager 中有一个模块叫做 ApplicationsMasters( 注意不是 ApplicationMaster),它是监测 ApplicationMaster 的运行状况,如果出问题,会将其在其他机器上重启。
  • Container 是 Yarn 为了将来作资源隔离而提出的一个框架。这一点应该借鉴了 Mesos 的工作,目前是一个框架,仅仅提供 java 虚拟机内存的隔离 ,hadoop 团队的设计思路应该后续能支持更多的资源调度和控制 , 既然资源表示成内存量,那就没有了之前的 map slot/reduce slot 分开造成集群资源闲置的尴尬情况。

[size=0.76em]新的 Yarn 框架相对旧 MapRduce 框架而言,其配置文件 , 启停脚本及全局变量等也发生了一些变化,主要的改变如下:
[size=0.76em]
表 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.shYarn 框架中由于启动 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 变量而造成日志位置混乱,而该位置没有访问权限的话启动过程中会报错 
[size=0.76em]由于新的 Yarn 框架与原 Hadoop MapReduce 框架相比变化较大,核心的配置文件中很多项在新框架中已经废弃,而新框架中新增了很多其他配置项,看下表所示会更加清晰:
[size=0.76em]
表 2. 新旧 Hadoop 框架配置项变化表[table]
[tr][td]配置文件[/td][td]配置项[/td][td]Hadoop 0.20.X 配置[/td][td]Hadoop 0.23.X 配置[/td][td]说明[/td][/tr]
[tr][td]core-site.xml[/td][td]系统默认分布式文件 URI[/td][td]fs.default.name[/td][td]fs.defaultFS[/td][td][/td][/tr]
[tr][td]hdfs-site.xml[/td][td]DFS name node 存放 name table 的目录[/td][td]dfs.name.dir[/td][td]dfs.namenode.name.dir[/td][td]新框架中 name node 分成 dfs.namenode.name.dir( 存放 naname table 和 dfs.namenode.edits.dir(存放 edit 文件),默认是同一个目录[/td][/tr]
[tr][td][/td][td]DFS data node 存放数据 block 的目录[/td][td]dfs.data.dir[/td][td]dfs.datanode.data.dir[/td][td]新框架中 DataNode 增加更多细节配置,位于 dfs.datanode. 配置项下,如dfs.datanode.data.dir.perm(datanode local 目录默认权限);dfs.datanode.address(datanode 节点监听端口);等[/td][/tr]
[tr][td][/td][td]分布式文件系统数据块复制数[/td][td]dfs.replication[/td][td]dfs.replication[/td][td]新框架与老框架一致,值建议配置为与分布式 cluster 中实际的 DataNode 主机数一致[/td][/tr]
[tr][td]mapred-site.xml[/td][td]Job 监控地址及端口[/td][td]mapred.job.tracker[/td][td]无[/td][td]新框架中已改为 Yarn-site.xml 中的 resouceManager 及 nodeManager 具体配置项,新框架中历史 job 的查询已从 Job tracker 剥离,归入单独的mapreduce.jobtracker.jobhistory 相关配置,[/td][/tr]
[tr][td][/td][td]第三方 MapReduce 框架[/td][td]无[/td][td]mapreduce.framework.name[/td][td]新框架支持第三方 MapReduce 开发框架以支持如 SmartTalk/DGSG 等非 Yarn 架构,注意通常情况下这个配置的值都设置为 Yarn,如果没有配置这项,那么提交的 Yarn job 只会运行在 locale 模式,而不是分布式模式。[/td][/tr]
[tr][td][/td][td][/td][td][/td][td][/td][td][/td][/tr]
[tr][td]Yarn-site.xml[/td][td]The address of the applications manager interface in the RM[/td][td]无[/td][td]Yarn.resourcemanager.address[/td][td]新框架中 NodeManager 与 RM 通信的接口地址[/td][/tr]
[tr][td][/td][td]The address of the scheduler interface[/td][td]无[/td][td]Yarn.resourcemanager.scheduler.address[/td][td]同上,NodeManger 需要知道 RM 主机的 scheduler 调度服务接口地址[/td][/tr]
[tr][td][/td][td]The address of the RM web application[/td][td]无[/td][td]Yarn.resourcemanager.webapp.address[/td][td]新框架中各个 task 的资源调度及运行状况通过通过该 web 界面访问[/td][/tr]
[tr][td][/td][td]The address of the resource tracker interface[/td][td]无[/td][td]Yarn.resourcemanager.resource-tracker.address

0 个评论

要回复文章请先登录注册