天天看点

《深入理解Hadoop(原书第2版)》——3.3一个MapReduce程序的组成

本节书摘来自华章计算机《深入理解hadoop(原书第2版)》一书中的第3章,第3.3节,作者 [美]萨米尔·瓦德卡(sameer wadkar),马杜·西德林埃(madhu siddalingaiah),杰森·文纳(jason venner),译 于博,冯傲风,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

本节介绍基于java语言的mapreduce程序由哪些部分构成。下文逐一讲解了各个组成部分:

java程序客户机(client java program):一个java程序,由集群中的一个客户端节点(又被称为边缘节点)提交运行。这个客户端节点可以访问hadoop集群,它经常(并不总是)由集群中的一个数据节点来充当。该节点仅是集群中的一台机器,并且有权限访问hadoop。

自定义mapper类(custom mapper class):除非在最简单的应用场景下,mapreduce程序中的这个mapper类通常是一个用户自定义类。如果不是在伪集群模式下运行mapreduce程序作业,这个类的实例会在远程任务节点上执行。这些任务节点往往与用来提交作业程序的客户端节点不同。

自定义reducer类(custom reducer class):除非在最简单的应用场景下,mapreduce程序中的这个reducer类通常是一个用户自定义类。与mapper类一样,如果不是在伪集群模式下运行mapreduce程序作业,这个类的实例会在远程任务节点上执行。这些任务节点往往与用来提交作业程序的客户端节点不同。

客户端函数库(client-side libraries):客户端函数库不同于hadoop系统的标准函数库,这个函数库是在客户端运行期间使用的。客户端需要使用的hadoop系统的标准函数库已经安装,并且使用通过hadoop的client命令(这与客户端程序不同)配置到classpath中。我们在文件夹$hadoop_home/bin/中可以找到它,其名称为hadoop。就像java命令用来执行一个java程序,hadoop命令用来执行客户端程序,该程序会启动一个hadoop作业。这些函数库都被配置到了环境变量hadoop_classpath中。这个变量与classpath变量一样,是一个冒号分隔的函数列表。

远程函数库(remote libraries):这个函数库是用户自定义mapper类和 reducer类所需要的。这个远程函数库不包括hadoop系统自带的函数库,因为hadoop系统自带的函数库已经在每个数据节点都配置好了。举个例子,如果mapper类用到了一个特殊的xml解析器,包含这个解析器的函数库就必须要被传输到执行这个mapper类实例的远程数据节点。

java程序档案文件(java application archive (jar) files):java程序以jar文件的形式打包,这个jar文件中包括了客户端java类,以及用户自定义mapper 和 reducer类。还包括了客户端java类、mapper类和reducer类用到的其他自定义依赖类。