替代手段
MapReduce的并行处理模式给自己增添了各种问题。虽然Java常用于MapReduce程序,你不见得非要成为Java专家才能享受到Hadoop上MapReduce的好处。
三种
MapReduce开发的替代方法包括Pig, streaming MapReduce和域特定语言,比如Scalding。
Pig是一种Hadoop下不借助Java而处理大数据的平台。Pig,它是Apache Hadoop项目的产品,用Pig Latin写的MapReduce模型的maps脚本。Pig Latin是一种声明性编程语言,用于大型数据集。如果你很熟悉SQL或ETL工具,那么PIG Latin对你来学简单易学。PIG Latin不是像Java,Python或C这样的通用编程语言。你不会用它来写复发的程序逻辑,但它非常适合于数据处理任务。
Pig Latin的功能大致可分为三个部分:加载数据,处理数据和存储数据。
基本的数据加载命令可以用于结构化数据,比如制表符分隔的文件,以及非结构化数据,比如自然语言文本文件。加载命令可以用于压缩文件,省去了你加载前的解压工作。
一旦数据被载入Pig schemas,你就可以进行数据转换了。Pig Latin有关系和算数运算。你可以使用SQL构造,比如FILTER,GROUP和JOIN。 由于这种语言是专为大数据而设计的,因此这里有传统的SQL里没有的东西。例如,SAMPLE命令是用来随机选择一个数据集的子集;对大数据集样本的计算统计十分有用。算术和逻辑运算符包括了你要的功能:算数运算,boolean和类型转换。
你在加载数据并开始处理时,你肯定想把结果存在某处。Pig Latin支持向Hadoop文件系统保存结果或直接交互式显示的功能。(平台的名字取的字面意思太明显了,Pig交互工具叫做Grunt——类似猪的叫声。)
Pig是处理大量数据的理想选择,经常是在你开始分析数据或合并多个数据集时。如果你还需要实现更复杂的逻辑,你应该考虑一下streaming MapReduce或Scalding。#p#
Streaming MapReduce 与 Scalding: 取代Java
Streaming MapReduce是Hadoop的一个功能,可以让你运行MapReduce环境下几乎用任何语言编写的程序。
如果你使用命令行来执行一个程序,而且它以标准输入输出流来进行交互的,那么你就可以使用streaming MapReduce来运行它。这种可以运行任何语言编写的程序的能力是有代价的:你必须把你的程序制定成映射或化简程序。
映射程序接受一个输入数据流,并产生键值对形式的输出。例如,如果你想要计算每种产品被购买的次数,你可以用Python写一个映射函数,读取交易并输出产品ID和那笔交易中该产品卖出的数量。当然,这会产生一个你需要合计的“产品ID—数量”键值对的流。这是化简函数的工作。
底层MapReduce框架会将运行映射功能的所有实例排序,如此一来一个特定产品ID的数据就会送往同样的化简实例。这种情况下的化简程序是一个简单的程序,只是添加与产品ID有关的产品数量。最终的输出是一个产品ID和总销售量的列表。
这种函数式编程要花一些时间来习惯,不过一旦你掌握了一些模式以后,你可以随时将你所学到的技术应用于更广泛的问题中。虽然你不用学Java就能用streaming MapReduce,但如果你用Pig的话,你会更频繁的使用到MapReduce范式。如果你需要实现的业务逻辑不太适用于Pig Latin,那么streaming MapReduce是一个不错的选择。
Pig和streaming MapReduce都是Apache Hadoop项目下的产品,但是还有一些为MapReduce而开发的工具。例如Cascading项目创建了一个隐藏MapReduce实现细节的抽象层。这个抽象层是作为一个Java API实现的,因此Cascading自身还有对Java编程的需要。但是,这个API可以被使用Java虚拟机的其他语言调用,比如Groovy,Clojure,JRuby 和 JPython。
如果你喜欢Scala这种编程语言,它也使用Java虚拟机,那么你可以使用Scalding,一个用于Cascading的Scala API。Scalding是由Twitter开发的,并以开放源代码的方式发布。Scalding是一种域特定语言,可以让你写出类似于Pig脚本上对数据集的迭代,过滤,分组等构建出的代码。
如果你用Java虚拟机语言(包括Java)但不想花太多时间浪费在重复编写代码上,Cascading和Scalding是不错的选择。这些域特定语言可以处理日常任务,这样你就可以专注在你程序的逻辑上。
MapReduce和Hadoop也许就是你某些数据处理和分析任务的绝佳工具。如果你还因为可能需要用到Java而犹豫要不要使用MapReduce,那你就不需要再等了。Pig可以很好的用于我们平时常见的提取,转换和加载操作等基本数据处理任务。Streaming MapReduce可以让程序员继续以他们熟悉的语言进行工作,同时还能从MapReduce中受益。Cascading 和 Scalding 让开发人员在Java虚拟机语言下工作,同时还能在以Java直接编写MapReduce函数时引入一个更高级的抽象层。
如果你想在Hadoop利用MapReduce,你可以用以上这些作为Java的替代手段。