附录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-lzo

A.10.2 编译LZOP

在具体步骤之前,需要注意一下几点:

  • LZOP的编译环境及硬件最好能够和最终部署的生产环境一致。
  • 在每个需要使用LZOP的节点上都需要分别进行安装和配置,包括集群的数据节点。

在CDH发行版上安装Hadoop本地库

在Hadoop中运行LZOP依赖于本地库。首先需要设置本地库。这件事在CDH版本中很容易。脚本如下:

$ yum install hadoop-0.20-native.x86_64

以下是安装的结果:

$ rpm -ql hadoop-0.20-native-0.20.2+923.97-1
/usr/lib/hadoop-0.20/lib/native
/usr/lib/hadoop-0.20/lib/native/Linux-amd64-64
/usr/lib/hadoop-0.20/lib/native/Linux-amd64-64/libhadoop.a
/usr/lib/hadoop-0.20/lib/native/Linux-amd64-64/libhadoop.la
/usr/lib/hadoop-0.20/lib/native/Linux-amd64-64/libhadoop.so
/usr/lib/hadoop-0.20/lib/native/Linux-amd64-64/libhadoop.so.1
/usr/lib/hadoop-0.20/lib/native/Linux-amd64-64/libhadoop.so.1.0.0
/usr/lib/hadoop-0.20/lib/native/Linux-amd64-64/libsnappy.a
/usr/lib/hadoop-0.20/lib/native/Linux-amd64-64/libsnappy.la
/usr/lib/hadoop-0.20/lib/native/Linux-amd64-64/libsnappy.so
/usr/lib/hadoop-0.20/lib/native/Linux-amd64-64/libsnappy.so.1
/usr/lib/hadoop-0.20/lib/native/Linux-amd64-64/libsnappy.so.1.1.1

在非CDN发行版上安装Hadoop本地库

如果用的是Apache的Hadoop发行版,它已经自带了Linux 32位和64位的本地库。文件位于$HADOOP_HOME/lib/native。对于其它的Hadoop发行版,请咨询供应商如何安装Hadoop本地库。也可以自行通过官方文档编译本地库。文档位于http://hadoop.apache.org/common/docs/r1.0.0/native_libraries.html

安装LZOP本地库

使用LZOP必须安装LZOP本地库。在RedHat上,脚本如下:

$ yum install liblzo-devel

在CentOS上,必须从http://pkgs.repoforge.org/lzo/下载和操作系统版本架构匹配的lzo-devel的RPM包。

在Hadoop中编译,安装,配置LZOP库

有两个GitHub库维护LZOP库。Todd Lipcon维护一个基于CDH发行版的,在https://github.com/toddlipcon/hadoop-lzo。Twitter维护另一个,在https://github.com/kevinweil/hadoop-lzo。如果需要最新和最好的,用Twitter的那个版本。如果要在CDH发行版上应用,那么就需要Todd的那个版本。

源代码中包含了LZOP的本地库和JAVA库。在下载并解压缩tarball包之后,到相应的目录中编译代码可得到本地库和JAVA库。脚本如下:

$ ant package

在完成以后,将生成的库文件复制到Hadoop的库目录中。脚本如下:

# replace the following path with your actual
# Hadoop installation directory
#
# the following is the CDH Hadoop home dir
#
export HADOOP_HOME=/usr/lib/hadoop
$ cp ./build/hadoop-lzo-<version>.jar $HADOOP_HOME/lib/
$ cp -R build/hadoop-lzo-<version>/lib/native/* \
$HADOOP_HOME/lib/native/

配置Hadoop

下一步,需要配置Hadoop的内核,以加入对新的压缩编码器的支持。将一下行加入到core-site.xml中。CDH中core-site.xml的位置是/etc/hadoop/conf/core-site.xml。确保移出了其中的空行和空格。注意,在逗号之间没有白色字符。

其中,io.compression.codecs的值假定Snappy压缩编码器已经安装了。如果不是,那么就需要将org.apache.hadoop.io.compress.SnappyCodec删除。

<property>
<name>mapred.compress.map.output</name>
<value>true</value>
</property>
<property>
<name>mapred.map.output.compression.codec</name>
<value>com.hadoop.compression.lzo.LzoCodec</value>
</property>
<property>
<name>io.compression.codecs</name>
<value>org.apache.hadoop.io.compress.GzipCodec,
org.apache.hadoop.io.compress.DefaultCodec,
org.apache.hadoop.io.compress.BZip2Codec,
com.hadoop.compression.lzo.LzoCodec,
com.hadoop.compression.lzo.LzopCodec,
org.apache.hadoop.io.compress.SnappyCodec</value>
</property>
<property>
<name>io.compression.codec.lzo.class</name>
<value>com.hadoop.compression.lzo.LzoCodec</value>
</property>

CDH发行版中/usr/lib/hadoop/bin/hadoop可以自动添加本地库目录到JVM的java.library.path中。但是,如果客户端的Hadoop代码不是用那个脚本运行的话,那么就需要手动添加以下脚本到JAVA的命令行中。注意引号和/usr之间没有空白字符。

-Djava.library.path=/usr/lib/hadoop/lib/native/Linux-amd64-64:/usr/lib64

然后bin/run.sh脚本就可以运行Hadoop脚本。它会将本地库目录加入到java.library.path中。

[大牛翻译系列]Hadoop(20)附录A.10 压缩格式LZOP编译安装配置的更多相关文章

  1. [大牛翻译系列]Hadoop 翻译文章索引

    原书章节 原书章节题目 翻译文章序号 翻译文章题目 链接 4.1 Joining Hadoop(1) MapReduce 连接:重分区连接(Repartition join) http://www.c ...

  2. [大牛翻译系列]Hadoop(9)MapReduce 性能调优:理解性能瓶颈,诊断map性能瓶颈

    6.2 诊断性能瓶颈 有的时候作业的执行时间会长得惊人.想靠猜也是很难猜对问题在哪.这一章中将介绍如何界定问题,找到根源.涉及的工具中有的是Hadoop自带的,有的是本书提供的. 系统监控和Hadoo ...

  3. [大牛翻译系列]Hadoop(19)MapReduce 文件处理:基于压缩的高效存储(二)

    5.2 基于压缩的高效存储(续) (仅包括技术27) 技术27 在MapReduce,Hive和Pig中使用可分块的LZOP 如果一个文本文件即使经过压缩后仍然比HDFS的块的大小要大,就需要考虑选择 ...

  4. [大牛翻译系列]Hadoop(18)MapReduce 文件处理:基于压缩的高效存储(一)

    5.2 基于压缩的高效存储 (仅包括技术25,和技术26) 数据压缩可以减小数据的大小,节约空间,提高数据传输的效率.在处理文件中,压缩很重要.在处理Hadoop的文件时,更是如此.为了让Hadoop ...

  5. [大牛翻译系列]Hadoop(22)附录D.2 复制连接框架

    附录D.2 复制连接框架 复制连接是map端连接,得名于它的具体实现:连接中最小的数据集将会被复制到所有的map主机节点.复制连接的实现非常直接明了.更具体的内容可以参考Chunk Lam的<H ...

  6. [大牛翻译系列]Hadoop(21)附录D.1 优化后的重分区框架

    附录D.1 优化后的重分区框架 Hadoop社区连接包需要将每个键的所有值都读取到内存中.如何才能在reduce端的连接减少内存开销呢?本文提供的优化中,只需要缓存较小的数据集,然后在连接中遍历较大数 ...

  7. [大牛翻译系列]Hadoop(10)MapReduce 性能调优:诊断reduce性能瓶颈

    6.2.3 Reduce的性能问题 Reduce的性能问题有和map类似的方面,也有和map不同的方面.图6.13是reduce任务的具体的执行各阶段,标识了可能影响性能的区域. 这一章将介绍影响re ...

  8. [大牛翻译系列]Hadoop(3)MapReduce 连接:半连接(Semi-join)

    4.1.3 半连接(Semi-join) 假设一个场景,需要连接两个很大的数据集,例如,用户日志和OLTP的用户数据.任何一个数据集都不是足够小到可以缓存在map作业的内存中.这样看来,似乎就不能使用 ...

  9. [大牛翻译系列]Hadoop(17)MapReduce 文件处理:小文件

    5.1 小文件 大数据这个概念似乎意味着处理GB级乃至更大的文件.实际上大数据可以是大量的小文件.比如说,日志文件通常增长到MB级时就会存档.这一节中将介绍在HDFS中有效地处理小文件的技术. 技术2 ...

随机推荐

  1. C#面向对象(四)虚方法实现多态

    一.虚方法实现多态 1,创建一个people基类 using System; using System.Collections.Generic; using System.Linq; using Sy ...

  2. The Last Practice

    Problem Description Tomorrow is contest day, Are you all ready?We have been training for 45 days, an ...

  3. jquery 请求apache solr 跨域解决方案

    <script type="text/javascript" src="js/jquery-1.7.2.min.js"></script> ...

  4. Java Hashtable类

    哈希表(Hashtable)是原来的java.util中的一部分,是一个字典的具体实现. 然而,Java2重新设计的哈希表,以便它也实现了​​Map接口.因此,哈希表现已集成到集合框架.它类似于Has ...

  5. OC 和 swift 小结

    1 什么是 OC 语言? OC 语言即面向对象语言,它扩展了 ANSI C 语言,将 SmallTalk 式的消息传递机制加入到 ANSI C 中.它是苹果 OS 和 iOS 以及相关的 API,Co ...

  6. Java Script基础(二) 基本语法

    一.变量的声明和使用 JavaScript是一种弱类型的语言,没有明确的数据类型,在声明变量时,不需要指定变量的类型,变量的类型由赋给变量的值决定. 变量声明的语法: var 变量名; 示例: var ...

  7. Hessian矩阵

    http://baike.baidu.com/link?url=o1ts6Eirjn5mHQCZUHGykiI8tDIdtHHOe6IDXagtcvF9ncOfdDOzT8tmFj41_DEsiUCr ...

  8. hdu 4117 GRE Words AC自动机DP

    题目:给出n个串,问最多能够选出多少个串,使得前面串是后面串的子串(按照输入顺序) 分析: 其实这题是这题SPOJ 7758. Growing Strings AC自动机DP的进阶版本,主题思想差不多 ...

  9. RC4 加密算法asp版

    Function RC4(data, Key) ), k(), outstr, Acii, j, tst, xre1, xre2, temp, x, t, y, qwe, zxc s(i) = i - ...

  10. MySQL之控制台修改密码

    进入控制台:use mysql Database changed update user set password=PASSWORD('设置的密码') where user='root'; flush ...