【发布时间】:2011-06-27 15:43:50
【问题描述】:
我是 Hadoop 和 HBase 的新手,即使我已经阅读了 allot,但我仍然不了解 map reduce 作业 API 的基本层次结构和工作流程。
据我了解,我需要使用 java API 来实现某些类并将它们传递给 hbase,hbase 将协调拆分和分发过程。对吗?
如果是这样,应用程序如何与服务器通信以传递 map reduce 作业的相关代码?我这里缺少一个链接....
谢谢
【问题讨论】:
我是 Hadoop 和 HBase 的新手,即使我已经阅读了 allot,但我仍然不了解 map reduce 作业 API 的基本层次结构和工作流程。
据我了解,我需要使用 java API 来实现某些类并将它们传递给 hbase,hbase 将协调拆分和分发过程。对吗?
如果是这样,应用程序如何与服务器通信以传递 map reduce 作业的相关代码?我这里缺少一个链接....
谢谢
【问题讨论】:
当您运行 HBase MapReduce 作业时,您的类路径必须包含 HBase 和 MapReduce 配置文件。配置文件将包含 JobTracker 的位置、HDFS NameNode 和 HBase 主节点等设置。然后运行时会自动从配置文件中获取所有这些设置,以便您的工作知道要联系哪些服务器。
【讨论】:
我认为您应该通过basic tutorial 来解决问题,这应该会让事情变得清晰。我发现最快的入门方法是使用Cloudera VM。
另外,我不确定您对 HBase 的引用;您应该将 Java 类传递给 Hadoop,而不是 HBase。
但是,为了回答您的问题,应在集群中的所有节点上安装 Hadoop。 Hadoop 框架将负责耕种地图并将任务减少到节点。
【讨论】:
使用 HBase 执行 M/R 作业的标准方式与执行非 HBase m/r 作业的方式相同: ${HADOOP_HOME}/bin/hadoop jar .jar [args]
这会将您的 jar 复制到所有任务跟踪器(通过 HDFS),以便它们可以执行您的代码。
使用 HBase,您通常还会使用 HBase 实用程序: TableMapReduceUtil.initTableReducerJob
这使用内置算法来拆分 HBase 表(使用表的区域),以便计算可以分布在 m/r 作业上。如果您想要不同的拆分,则必须修改拆分的计算方式,这意味着您无法使用内置实用程序。
您可以指定的另一件事是返回的行的条件。如果您使用内置的扫描条件,那么您不必做任何特别的事情。但是,如果要创建自定义比较器,则必须确保区域服务器在其类路径中具有此代码,以便它们可以执行它。在你走这条路之前,请仔细检查内置的比较器,因为它们非常强大。
【讨论】: