附录D.2 复制连接框架 复制连接是map端连接,得名于它的具体实现:连接中最小的数据集将会被复制到所有的map主机节点.复制连接的实现非常直接明了.更具体的内容可以参考Chunk Lam的<Hadoop in Action>. 这个部分的目标是:创建一个可以支持任意类型的数据集的通用的复制连接框架.这个框架中提供了一个优化的小功能:动态监测分布式缓存内容和输入块的大小,并判断哪个更大.如果输入块较小,那么你就需要将map的输入块放到内存缓冲中,然后在map的cleanup方法中执行连接操作了…
原书章节 原书章节题目 翻译文章序号 翻译文章题目 链接 4.1 Joining Hadoop(1) MapReduce 连接:重分区连接(Repartition join) http://www.cnblogs.com/datacloud/p/3578509.html 4.1.1 Repartition join Hadoop(1) MapReduce 连接:重分区连接(Repartition join) http://www.cnblogs.com/datacloud/p/3578509.h…
4.1.3 半连接(Semi-join) 假设一个场景,需要连接两个很大的数据集,例如,用户日志和OLTP的用户数据.任何一个数据集都不是足够小到可以缓存在map作业的内存中.这样看来,似乎就不能使用reduce端的连接了.尽管不是必须,可以思考以下问题:如果在数据集的连接操作中,一个数据集中有的记录由于因为无法连接到另一个数据集的记录,将会被移除.这样还需要将整个数据集放到内存中吗?在这个例子中,在用户日志中的用户仅仅是OLTP用户数据中的用户中的很小的一部分.那么就可以从OLTP用户数据中只…
4.1.2 复制连接(Replication join) 复制连接是map端的连接.复制连接得名于它的具体实现:连接中最小的数据集将会被复制到所有的map主机节点.复制连接有一个假设前提:在被连接的数据集中,有一个数据集足够小到可以缓存在内存中. 如图4.5所示,MapReduce复制连接工作原理如下: 使用分布式缓存(Districubted cache)将这个小数据集复制到所有运行map任务的节点. 用各个map任务初始化方法将这个小数据集装载到一个哈希表(hashtable)中. 逐条用大…
附录D.1 优化后的重分区框架 Hadoop社区连接包需要将每个键的所有值都读取到内存中.如何才能在reduce端的连接减少内存开销呢?本文提供的优化中,只需要缓存较小的数据集,然后在连接中遍历较大数据集中的数据.这个方法中还包括针对map的输出数据的次排序,那么reducer先接收到较小的数据集,然后接收到较大的数据集.图D.1是这个过程的流程图. 图D.2是实现的类图.类图中包含两个部分,一个通用框架和一些类的实现样例. 连接框架 我们以和Hadoop社区连接包的近似的风格编写连接的代码.目…
4.1 连接(Join) 连接是关系运算,可以用于合并关系(relation).对于数据库中的表连接操作,可能已经广为人知了.在MapReduce中,连接可以用于合并两个或多个数据集.例如,用户基本信息和用户活动详情信息.用户基本信息来自于OLTP数据库.用户活动详情信息来自于日志文件. MapReduce的连接操作可以用于以下场景: 用户的人口统计信息的聚合操作(例如:青少年和中年人的习惯差异). 当用户超过一定时间没有使用网站后,发邮件提醒他们.(这个一定时间的阈值是用户自己预定义的) 分析…
附录A.10 LZOP LZOP是一种压缩解码器,在MapReduce中可以支持可分块的压缩.第5章中有一节介绍了如何应用LZOP.在这一节中,将介绍如何编译LZOP,在集群做相应配置. A.10.1 获得更多的信息 表A.12 有用的资源 描述 URL地址 Twitter有关于LZOP的博客文章,包括一些统计信息和安装指南 http://bit.ly/dfEvGn Todd Lipcon的LZO GitHub库.  https://github.com/toddlipcon/hadoop-lz…
5.2 基于压缩的高效存储(续) (仅包括技术27) 技术27 在MapReduce,Hive和Pig中使用可分块的LZOP 如果一个文本文件即使经过压缩后仍然比HDFS的块的大小要大,就需要考虑选择一个支持分块的压缩编码器,以防一个单一的map任务来处理整个超大的文件. LZOP可以满足分块的要求,但是使用起来很复杂.原因在于LZOP不是直接支持分块.LZOP是基于块的格式,但是并不支持块的随机访问. 问题 需要选择一个压缩编码器使MapReduce可以调用多个任务并行处理一个单一的压缩文件.…
5.2 基于压缩的高效存储 (仅包括技术25,和技术26) 数据压缩可以减小数据的大小,节约空间,提高数据传输的效率.在处理文件中,压缩很重要.在处理Hadoop的文件时,更是如此.为了让Hadoop更高效处理文件,就需要选择一个合适的压缩编码器,加快作业运行,增加集群的数据存储能力. 技术25 为待处理数据选择正确的压缩编码器在HDFS上使用压缩并不像ZFS文件系统上那样透明,特别是在处理那些可分块的压缩文件时.(这些将在本章中稍后介绍.)由于Avro和SequenceFiles等文件格式提供…
5.1 小文件 大数据这个概念似乎意味着处理GB级乃至更大的文件.实际上大数据可以是大量的小文件.比如说,日志文件通常增长到MB级时就会存档.这一节中将介绍在HDFS中有效地处理小文件的技术. 技术24 使用Avro存储多个小文件假定有一个项目akin在google上搜索图片,并将数以百万计的图片存储分别在HDFS中.很不幸的是,这样做恰好碰上了HDFS和MapReduce的弱项,如下: Hadoop的NameNode将所有的HDFS元数据保存在内存中以加快速度.Yahoo估计平均每个文件需要6…