用于简化MapReduce编程的Java库Apache Crunch简介

Apache Crunch(孵化器项目)是基于Google的FlumeJava库编写的Java库,用于创建MapReduce流水线。与其他用来创建 MapReduce作业的高层工具(如Apache Hive、Apache Pig和Cascading等)类似,Crunch提供了用于实现如连接数据、执行 聚合和排序记录等常见任务的模式库。而与其他工具不同的是,Crunch并不强制所有输入遵循同一数据类型。相反,Crunch 使用了一种定制的类型系统,非常灵活,能够直接处理复杂数据类型,如时间序列、HDF5文件、Apache HBase表和序列化对 象(像protocol buffer或Avro记录)等。

Crunch并不想阻止开发者以MapReduce方式思考,而是尝试使之简化。尽管 MapReduce有诸多优点,但对很多问题而言,并非正确的抽象级别:大部分有意思的计算都是由多个MapReduce作业组成的, 情况往往是这样——出于性能考虑,我们需要将逻辑上独立的操作(如数据过滤、数据投影和数据变换)组合为一个物理上 的MapReduce作业。

本质上,Crunch设计为MapReduce之上的一个薄层,希望在不牺牲MapReduce力量(或者说不影响 开发者使用MapReduce API)的前提下,更容易在正确的抽象级别解决手头问题。

尽管Crunch会让人想起历史悠久的 Cascading API,但是它们各自的数据模型有很大不同:按照常识简单总结一下,可以认为把问题看做数据流的人会偏爱 Crunch和Pig,而考虑SQL风格连接的人会偏爱Cascading和Hive。

Crunch的理念

PCollection和PTable<K, V>是Crunch的核心抽象,前者代表一个分布式、不可变的对象集合,后者是Pcollection的一个子接口,其中包含了处理 键值对的额外方法。这两个核心类支持如下四个基本操作:

parallelDo:将用户定义函数应用于给定PCollection,返回一个新的PCollection作为结果。 groupByKey :将一个PTable中的元素按照键值排序并分组(等同于MapReduce作业中的shuffle阶段)

combineValues:执行一个关联操作来聚合来自groupByKey操作的值。

union:将两个或多个Pcollection看做一个虚拟的PCollection。

Crunch的所有高阶操作(joins、cogroups和set operations等)都是通过这些基本原语实现的。Crunch的作业计划器( job planner)接收流水线开发者定义的操作图,将操作分解为一系列相关的MapReduce作业,然后在Hadoop集群上执行。 Crunch也支持内存执行引擎,可用于本地数据上流水线的测试与调试。

有些问题可以从能够操作定制数据类型的大 量用户定义函数受益,而Crunch就是为这种问题设计的。Crunch中的用户定义函数设计为轻量级的,为满足应用程序的需要 ,仍然提供了完整的访问底层MapReduce API的功能。Crunch开发者也可以使用Crunch原语来定义API,为客户提供涉及一系 列复杂MapReduce作业的高级ETL、机器学习和科学计算功能。

Crunch起步

可以从Crunch的网站: http://incubator.apache.org/crunch/download.html下载最新版本的源代码或二进制文件,或者使用在Maven Central发 布的dependencies。

时间: 2024-10-01 21:44:38

用于简化MapReduce编程的Java库Apache Crunch简介的相关文章

Apache Crunch:简化编写MapReduce Pipeline程序

Apache Crunch提供了一套Java API,能够简化编写.测试.运行MapReduce Pipeline程序.Crunch的基本思想是隐藏编写MapReduce程序的细节,基于函数式编程的思想,定义了一套函数式编程接口,因为Java并不支持函数式编程,只能通过回调的方式来实现,虽然写起来代码不够美观简洁,但是编写MapReduce程序的思路是非常清晰的,而且比编写原生的MapReduce程序要容易地多.如果直接使用MapReduce API编写一个复杂的Pipeline程序,可能需要考

模拟MapReduce编程的程序案例(用于统计文本中单词出现频率)

本案例要实现的目标: 1.模拟修改配置,通过发指令的方式统计一个文件中出现的单词的字数. 案例代码结构如下: 在整个案例中需要有以下几类文件: A:worker服务端,用于类似Mapreduce接收jar,接收配置文件,执行业务逻辑 B:程序客户端.用于组装配置文件.发送业务执行的命令(听过socket发送jarfile.jobconf.和job2run的命令) 代码结构,每个包和代码作用介绍 cn.toto.bigdata.mymr.task TaskProcessor 核心的主体执行程序  

java-类库-Apache Commons

   Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动.下面是我这几年做开发过程中自己用过的工具类做简单介绍.   组件 功能介绍 BeanUtils 提供了对于JavaBean进行各种操作,克隆对象,属性等等. Betwixt XML与Java对象之间相互转换. Codec 处理常用的编码方法的工具类包 例如DES.SHA1.MD5.Base64等. Collections java集合框架操作. Compress java提供文件打包 压缩类库

java-类库-Apache Commons补充

Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动.我选了一些比较常用的项目做简单介绍.文中用了很多网上现成的东西,我只是做了一个汇总整理. 一.Commons BeanUtils http://jakarta.apache.org/commons/beanutils/index.html 说明:针对Bean的一个工具集.由于Bean往往是有一堆get和set组成,所以BeanUtils也是在此基础上进行一些包装. 使用示例:功能有很多,网站上有详细

Java 库的建立方法及其实例

作者 ariesram 电子邮件地址 ariesram@linuxaid.com.cn, 或 ariesram@may10.ca 本文及本人所有文章均收集在bambi.may10.ca/~ariesram/articles/中. 本文授权给www.linuxaid.com.cn. 正文: 任何一种面向对象语言都有它的库.任何一种面向对象的语言也都离不开库的支持.用我们熟悉的 面向对象语言为例子,C++有STL,Java有API函数,具体到开发工具,Visual C++提供了MFC, Borlan

Hadoop MapReduce编程:计算最大值

其实,使用MapReduce计算最大值的问题,和Hadoop自带的WordCount的程序没什么区别,不过在Reducer中一个是求最大值,一个是做累加,本质一样,比较简单.下面我们结合一个例子来实现. 测试数据 我们通过自己的模拟程序,生成了一组简单的测试样本数据.输入数据的格式,截取一个片段,如下所示: 01 SG 253654006139495 253654006164392 619850464 02 KG 253654006225166 253654006252433 743485698

2016年度最受欢迎的100个 Java 库

[编者按]本文作者为 Henn Idan,主要介绍基于 GitHub 中的数据分析,得出的2016年度最受欢迎的100个 Java 库.本文系国内 ITOM 管理平台 OneAPM 编译呈现. 谁拔得头筹?谁又落于人后?我们分析了 GitHub 中 47,251 条依赖关系,得出最受欢迎的100个 Java 库. 漫长的周末里,我们最喜欢的消遣方式是遍历 GitHub,找出最受欢迎的 Java 库.我们决定,将其中的乐趣与所得分享给大家. 我们分析了 GitHub 中前3862个 Java 项目

Hadoop MapReduce编程:计算极值

现在,我们不是计算一个最大值了(想了解如何计算最大值,可以参考Hadoop MapReduce编程:计算最大值),而是计算一个最大值和一个最小值.实际上,实现Mapper和Reducer也是非常简单的,但是我们要输出结果,需要能够区分出最大值和最小值,并同时输出结果,这就需要自定义自己的输出类型,以及需要定义输出格式. 测试数据 数据格式,如下所示: 01 SG 253654006139495 253654006164392 619850464 02 KG 253654006225166 253

MapReduce 编程模型概述

MapReduce 编程模型给出了其分布式编程方法,共分 5 个步骤: 1) 迭代(iteration).遍历输入数据, 并将之解析成 key/value 对. 2) 将输入 key/value 对映射(map) 成另外一些 key/value 对. 3) 依据 key 对中间数据进行分组(grouping). 4) 以组为单位对数据进行归约(reduce). 5) 迭代. 将最终产生的 key/value 对保存到输出文件中. MapReduce 将计算过程分解成以上 5 个步骤带来的最大好处