版权声明:本文为博主原创文章,未经博主允许不得转载。 /u/article/details/
此文档的假定条件是zk已经安装并配置完成,其实也没什么安装的。
此处配置的mycluster目前还没有定义,我们需要记住这个值,
接下来,配置当namenode发生切换时的检查方法,当NAMENODE切换时,
需要检查并确保只有一个active节点。
因此会通过SHELL或SSH的方式过去强制中止或执行检查
配置ha连接的zk的连接地址,
还可以有如下几个配置:
接下来配置namenode edits的共享存储,在这里使用QJM来进行配置:
qjm是一个很轻量的进程,可以直接部署到namenode或datanode中。
qjm必须配置为单数个(N),可以保证在(N-1)/2个正常运行时,能够正常提供服务。
配置QJM的存储路径 :
接下来配置namenode的自动故障转换。
把配置文件 复制到所有的节点中。这个不能忘呀。
在配置有QJM的节点中启动QJM.
接下来启动各个datanode节点。
最后一步,启动zkfc,自动切换namenode节点的服务。
因为此时两个namenode都是standby的状态,需要启动zkfc来实现切换。
rm连接失败的重试间隔
是否启用ha配置,默认是false.
启动自动故障转移,默认为false
启用一个内嵌的故障转移,与ZKRMStateStore一起使用。
配置当前的rm节点,这个地方要注意,在rm1这个机器上时,配置为rm1
在rm2这台机器上时,需要配置为rm2.它们之间通过zk来实现active操作
启动yarn的各节点,
对于业界的大数据存储及分布式处理系统来说,Hadoop 是耳熟能详的卓越开源分布式文件存储及处理框架,对于 Hadoop 框架的介绍在此不再累述,读者可参考 。使用和学习过老 Hadoop 框架(0.20.0 及之前版本)的同仁应该很熟悉如下的原 MapReduce 框架图:
从上图中可以清楚的看出原 MapReduce 程序的流程及设计思路:
可以看得出原来的 map-reduce 架构是简单明了的,在最初推出的几年,也得到了众多的成功案例,获得业界广泛的支持和肯定,但随着分布式系统集群的规模和其工作负荷的增长,原框架的问题逐渐浮出水面,主要的问题集中如下:
从业界使用分布式系统的变化趋势和 hadoop 框架的长远发展来看,MapReduce 的 JobTracker/TaskTracker 机制需要大规模的调整来修复它在可扩展性,内存消耗,线程模型,可靠性和性能上的缺陷。在过去的几年中,hadoop 开发团队做了一些 bug 的修复,但是最近这些修复的成本越来越高,这表明对原框架做出改变的难度越来越大。
重构根本的思想是将 JobTracker 两个主要的功能分离成单独的组件,这两个功能是资源管理和任务调度 / 监控。新的资源管理器全局管理所有应用程序计算资源的分配,每一个应用的 ApplicationMaster 负责相应的调度和协调。一个应用程序无非是一个单独的传统的 MapReduce 任务或者是一个 DAG( 有向无环图 ) 任务。ResourceManager 和每一台机器的节点管理服务器能够管理用户在那台机器上的进程并能对计算进行组织。
上图中 ResourceManager 支持分层级的应用队列,这些队列享有集群一定比例的资源。从某种意义上讲它就是一个纯粹的调度器,它在执行过程中不对应用进行监控和状态跟踪。同样,它也不能重启因应用失败或者硬件错误而运行失败的任务。
ResourceManager 是基于应用程序对资源的需求进行调度的 ; 每一个应用程序需要不同类型的资源因此就需要不同的容器。资源包括:内存,CPU,磁盘,网络等等。可以看出,这同现 Mapreduce 固定类型的资源使用模型有显著区别,它给集群的使用带来负面的影响。资源管理器提供一个调度策略的插件,它负责将集群资源分配给多个队列和应用程序。调度插件可以基于现有的能力调度和公平调度模型。
上图中 NodeManager 是每一台机器框架的代理,是执行应用程序的容器,监控应用程序的资源使用情况 (CPU,内存,硬盘,网络 ) 并且向调度器汇报。
每一个应用的 ApplicationMaster 的职责有:向调度器索要适当的资源容器,运行任务,跟踪应用程序的状态和监控它们的进程,处理任务的失败原因。
让我们来对新旧 MapReduce 框架做详细的分析和对比,可以看到有以下几点显著变化:
首先客户端不变,其调用 API 及接口大部分保持兼容,这也是为了对开发使用者透明化,使其不必对原有代码做大的改变 ( 详见 ),但是原框架中核心的 JobTracker 和
我们来详细解释这三个部分,首先 ResourceManager 是一个中心的服务,它做的事情是调度、启动每一个 Job 所属的 ApplicationMaster、另外监控 ApplicationMaster 的存在情况。细心的读者会发现:Job 里面所在的 task 的监控、重启等等内容不见了。这就是 AppMst 存在的原因。ResourceManager 负责作业与资源的调度。接收
Yarn 框架相对于老的 MapReduce 框架什么优势呢?我们可以看到:
新的 Yarn 框架相对旧 MapRduce 框架而言,其配置文件 , 启停脚本及全局变量等也发生了一些变化,主要的改变如下:
Yarn 框架也兼容老的 ${hadoop_home_dir}/conf 位置配置,启动时会检测是否存在老的 conf 目录,如果存在将加载 conf 目录下的配置,否则加载 etc 下配置 |
变量而造成日志位置混乱,而该位置没有访问权限的话启动过程中会报错 |
由于新的 Yarn 框架与原 Hadoop MapReduce 框架相比变化较大,核心的配置文件中很多项在新框架中已经废弃,而新框架中新增了很多其他配置项,看下表所示会更加清晰:
系统默认分布式文件 URI | |
分布式文件系统数据块复制数 | 新框架与老框架一致,值建议配置为与分布式 cluster 中实际的 DataNode 主机数一致 |
Job 监控地址及端口 | |
新框架支持第三方 MapReduce 开发框架以支持如 SmartTalk/DGSG 等非 Yarn 架构,注意通常情况下这个配置的值都设置为 Yarn,如果没有配置这项,那么提交的 Yarn job 只会运行在 locale 模式,而不是分布式模式。 | |
新框架中各个 task 的资源调度及运行状况通过通过该 web 界面访问 | |
我们考虑如下应用场景:用户的生产系统由多台 Weblogic 应用服务器组成,每天需要每台对应用服务器的日志内容进行检查,统计其日志级别和日志模块的总数。
WebLogic 的日志范例如下图所示:
由于 Weblogic 应用服务器分布于不同的主机,且日志数据量巨大,我们采用 hadoop 框架将 WebLogic 各个应用服务器主机上建立分布式目录,每天将 WebLogic 日志装载进 hadoop 分布式文件系统,并且编写基于 Yarn 框架的 MapReduce 程序对日志进行处理,分别统计出 LogLevel 和 Logmodule 在日志中出现的次数并计算总量,然后输出到分布式文件系统中,输出目录命名精确到小时为后缀以便区分每次 Demo 程序运行的处理结果。
位(Hadoop 支持异构性), 具体如下:
我们根据 Yarn 框架要求,分别在 core-site.xml 中配置分布式文件系统的 URL,详细如下:
具体配置项的含义,在 hadoop 官方网站有详细的说明,读者可以参见 。
以下我们详细介绍一下新的 Yarn 框架下针对该应用场景的 Demo 代码的开发, 在 Demo 程序的每个类都有详细的注释和说明,Yarn 开发为了兼容老版本,API 变化不大,可以参考 。
// 输出日志级别统计结果,通过 logLevel:: 作为前缀来标示。 // 输出模块名的统计结果,通过 moduleName:: 作为前缀来标示 // 删除输入和输出的临时文件Demo 输入输出的控制
本 demo 中我们将从 Weblogic 日志目录中拷贝原始待处理日志文件作为 Yarn 程序的输入,使用 hadoop dfs 命令将其放入分布式目录的 input 目录,处理完后将生成以时间戳为文件目录后缀的输出目录
项指定其他端口 ) 来验证其文件系统情况:
从上图中我们可以看到 /user/oracle/dfs 分布式文件系统已成功建立。
然后我们使用上文中的脚本启动 demo 并执行:
从上图的 console 输出中我们可以看到 Demo 程序的结果和各项统计信息输出,下面我们通过 Web 监控界面详细中观察程序执行的执行流程和步骤细节。
上图中我们可以看到 ID 为 application_2_0003 的 Job 正在执行,有 2 个 Map 进程,已经处理完毕,有 2 个 Reduce 正在处理,这跟我们程序设计预期的是一样的。
当状态变为 successful 后,进入 dfs 文件系统可以看到,输出的 dfs 文件系统已经生成,位置位于 /user/oracle/dfs 下,目录名为 output-.13.52,可以看到格式和命名方式与 Demo 设计是一致的,如下图所示:
我们进入具体的输出目录,可以清楚的看到程序处理的输出结果,正如我们 Demo 中设计的,两个 Reduce 分别生成了两个输出文件,分别是 part-r-00000 和 part-r-00001,对应 Module 和 Log Level 的处理输出信息:
点击 part-r-00000 的输出文件链接,可以看到程序处理后的 log level 的统计信息:
点击 part-r-00001 的输出文件链接,可以看到程序处理后 Module 的统计信息:
至此我们基于新的 Yarn 框架的 Demo 完全成功运行,实现功能与预期设计完全一致,运行状态和 NameNode/DataNode 部署,Job/MapReduece 程序的调度均和设计一致。读者可参考该 Demo 的配置及代码进行修改,做为实际生产环境部署和实施的基础。
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。