本帖最后由 xioaxu790 于 2014-9-4 16:49 编辑
问题导读
1、如何启动或关闭一个单一节点的Hadoop集群?
2、如何安装Hadoop Tarball?
3、怎样实现一个自定义的 Shuffle 和 Sort?
目的
使用 CLI MiniCluster, 用户可以简单地只用一个命令就启动或关闭一个单一节点的Hadoop集群,不需要设置任何环境变量或管理配置文件。 CLI MiniCluster 同时启动一个 YARN/MapReduce 和 HDFS 集群。
这对那些想要快速体验一个真实的Hadoop集群或是测试依赖明显的Hadoop函数的非Java程序 的用户很有用。
Hadoop Tarball
你需要从发布页获取tar包。或者,你可以从源码中自己编译。
- $ mvn clean install -DskipTests
- $ mvn package -Pdist -Dtar -DskipTests -Dmaven.javadoc.skip
复制代码
注意: 你需要事先安装有 protoc 2.5.0 。
tar包应该在 hadoop-dist/target/ 目录.
运行 MiniCluster
从解压出的tar包的根目录,你可以用下面的命令启动 CLI MiniCluster :
- $ bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-2.2.0-tests.jar minicluster -rmport RM_PORT -jhsport JHS_PORT
复制代码
在上面的命令示例中,RM_PORT 和 JHS_PORT 应该由用户的端口号替换。如果不指定,会随机使用空闲的端口。
命令行参数中有一个数字,用户可以用来控制启动哪个服务,或者传递别的属性。可用的命令行参数如下:
$ -D <property=value> Options to pass into configuration object
$ -datanodes <arg> 启动多少个 datanodes (默认是 1)
$ -format 格式化 DFS (默认是 false)
$ -help 打印帮助选项
$ -jhsport <arg> JobHistoryServer 端口 (默认是 0--我们选的)
$ -namenode <arg> namenode 的 URL (默认 要么是 DFS 集群,要么是临时目录)
$ -nnport <arg> NameNode 端口 (默认是 0--我们选的)
$ -nodemanagers <arg> 要启动多少个 nodemanagers(默认是 1)
$ -nodfs 不启动一个 mini DFS 集群
$ -nomr Don't start a mini MR cluster
$ -rmport <arg> ResourceManager 端口 (默认是 0--我们选的)
$ -writeConfig <path> 保存配置文件到这个XML文件里。
$ -writeDetails <path> 写出基本信息到这个JSON文件中。
要显示可用的参数的全列表,用户可以传-help参数给上面的命令。
Hadoop-2.2.0中文文档—— MapReduce下一代- 可插入的 Shuffle 和 Sort
简介
可插入的 shuffle 和 sort 功能,允许在shuffle 和 sort 逻辑中用可选择的实现类替换。这个情况的例子是:用一个不是HTTP的应用协议,如RDMA来 shuffle 从Map节点中到Reducer节点的数据;或者用自定义的允许 Hash聚合和Limit-N查询的算法来代替sort逻辑。
重要: 可插入的 shuffle sort 功能是实验性的、不稳定。这意味着提供的API可能改变或破坏未来Hadoop版本的兼容性。
实现一个自定义的 Shuffle 和 Sort
一个自定义的 shuffle 实现需要一个 org.apache.hadoop.yarn.server.nodemanager.containermanager.AuxServices.AuxiliaryService 在 NodeManagers 上运行的实现类和 org.apache.hadoop.mapred.ShuffleConsumerPlugin 在Reducer任务上运行的实现类。
由 Hadoop 提供的默认实现可以作为参考:
- org.apache.hadoop.mapred.ShuffleHandler
- org.apache.hadoop.mapreduce.task.reduce.Shuffle
复制代码
一个自定义的 sort 实现需要一个 org.apache.hadoop.mapred.MapOutputCollector 在Mapper任务上运行的实现类和(可选的,依赖于sort实现)实现类一个 org.apache.hadoop.mapred.ShuffleConsumerPlugin在Reducer任务上运行的实现类。
由 Hadoop 提供的默认实现可以作为参考:
- org.apache.hadoop.mapred.MapTask$MapOutputBuffer
- org.apache.hadoop.mapreduce.task.reduce.Shuffle
复制代码
配置
除了运行在 NodeManagers 上的辅助的服务帮助 shuffle(默认是 ShuffleHandler),所有的可插入组件运行在作业任务上。这意味着,他们在每一个作业上配置。帮助Shuffle 的辅助服务必须在NodeManager上进行配置。
Job 配置属性 (在每个作业上):
这些属性也可以在 mapred-site.xml 中配置,以对所有作业修改默认值。
NodeManager 属性配置, yarn-site.xml,所有节点上:
重要: 如果在默认的 mapreduce_shuffle 服务之外设置一个辅助的服务,那么新的服务key 应该添加到 yarn.nodemanager.aux-services 属性中,例如 mapred.shufflex. 然后属性定义相关的类必须是 yarn.nodemanager.aux-services.mapreduce_shufflex.class.
|