如何编写MapReduce应用程序
MapReduce API是用Java编写的,因此MapReduce应用程序主要是基于Java的。
以下列表指定我们可以开发的MapReduce应用程序的组件:
驱动程序(必填):这是从客户端调用的应用程序shell。它配置MapReduce类(我们未自定义),并将其提交给资源管理器(如果我们使用Hadoop 1,则将其提交给Resource Manager(或者JobTracker)。
类(必填):我们实现的类需要在处理每个记录时定义我们输入和输出的键/值对的格式。此类仅具有单个方法,即代码每个记录将如何处理以及输出的键/值是多少。要从映射器任务输出键/值对,请将它们写入类的实例。
Class(可选):Reducer对于仅需要缩小阶段的映射应用程序是可选的,其中不需要缩小阶段。
类(可选):组合器通常可以定义为减速器,但在某些情况下需要不同。 (例如,记住,减速器可能无法在数据集上运行多次,而不会突变结果。)
class(可选):自定义默认分区器以执行特殊任务,例如每个键的值的辅助排序或者涉及映射数据的稀疏数据和不平衡输出文件的稀有案例。
andclasses(可选):Hadoop具有一些标准数据格式(例如,文本文件,序列文件和数据库),这对许多情况有用。对于专门的格式化数据,实现我们自己的读写数据类可以大大简化映射器和减速器代码。
从驱动程序中,我们可以使用MapReduce API,其中包括出厂方法来创建前面列表中所有组件的实例。
(如果我们不是Java人,则出厂方法是创建对象的工具。
)
名为Hadoop Streaming的通用API允许我们使用其他编程语言(最常见的,c,python和perl)。
虽然此API使组织能够使用非Java技能来编写MapReduce代码,但使用它具有一些缺点。
由于此流代码需要经过此流代码以运行的额外抽象层,因此存在性能惩罚和增加的内存使用情况。
此外,我们只需使用Hadoop Streaming代码映射器和减速器函数。
记录读者和作家以及所有的分区,都需要用Java编写。
直接后果 - 以及无法自定义记录读者和作家的额外缺点是Hadoop流媒体应用程序非常适合处理基于文本的数据。