运行自定义 MapReduce 程序
基于 Apache Hadoop 的大数据系统(例如 HDInsight)支持使用各种工具和技术来处理数据。 下表描述了每种工具和技术的主要优势与注意事项。
查询机制 | 优点 | 注意事项 |
---|---|---|
使用 HiveQL 的 Apache Hive |
|
|
使用 Pig Latin 的 Apache Pig |
|
|
自定义映射/化简 |
|
|
Apache HCatalog |
|
|
通常,我们可以使用上述最简单的方法来获取所需的。 例如,只需使用 Hive 也许就能获取此类结果,但对于较复杂的方案,可能需要使用 Pig,甚至编写自己的映射和化简组件。 在体验 Hive 或 Pig 之后,还可以确定是否能够通过自定义映射和化简组件来微调和优化处理,从而提高性能。
自定义映射/化简组件
映射/化简代码由实现为映射和化简组件的两个独立函数组成。 映射组件在多个群集节点上并行运行,其中每个节点将映射应用到该节点自身的数据子集。 “化简”组件对来自所有映射函数的结果进行整理和汇总。 有关这两个组件的详细信息,请参阅在 HDInsight 上的 Hadoop 中使用 MapReduce。
在大多数 HDInsight 处理方案中,使用更高级别的抽象(例如 Pig 或 Hive)会更简单且更有效。 也可以创建要在 Hive 脚本中使用的自定义映射和化简组件,用于执行更复杂的处理。
自定义映射/化简组件通常以 Java 编写。 Hadoop 提供一个流式处理接口,借助该接口可以使用以其他语言(例如 C#、F#、Visual Basic、Python 及 JavaScript)开发的组件。
- 有关开发自定义 Java MapReduce 程序的演练,请参阅开发适用于 HDInsight 上的 Hadoop 的 Java MapReduce 程序。
对于以下情况,请考虑创建自己的映射和化简组件:
- 需要分析数据并使用自定义逻辑从该数据获取结构化信息,以处理完全非结构化的数据。
- 想要执行在不创建 UDF 的情况下很难(或无法)以 Pig 或 Hive 表达的复杂任务。 例如,可能需要使用外部地理编码服务,将源数据中的纬度和经度坐标或 IP 地址转换为地理位置名称。
- 想要使用 Hadoop 流式处理接口,在 Map/Reduce 组件中重复使用现有的 .NET、Python 或 JavaScript 代码。
上传和运行自定义 MapReduce 程序
最常见的 MapReduce 程序以 Java 编写,并会编译成 jar 文件。
开发、编译和测试 MapReduce 程序之后,请使用
scp
命令将 jar 文件上传到头节点。scp mycustomprogram.jar sshuser@CLUSTERNAME-ssh.azurehdinsight.cn
将 CLUSTERNAME 替换为群集名称。 如果使用密码保护 SSH 帐户,系统会提示输入该密码。 如果使用了证书,则可能需要使用
-i
参数指定私钥文件。使用 ssh 命令连接到群集。 编辑以下命令,将 CLUSTERNAME 替换为群集的名称,然后输入该命令:
ssh sshuser@CLUSTERNAME-ssh.azurehdinsight.cn
在 SSH 会话中,通过 YARN 执行 MapReduce 程序。
yarn jar mycustomprogram.jar mynamespace.myclass /example/data/sample.log /example/data/logoutput
此命令将 MapReduce 作业提交到 YARN。 输入文件是
/example/data/sample.log
,输出目录是/example/data/logoutput
。 输入文件和所有输出文件将存储到群集的默认存储中。