【转自】http://my.oschina.net/u/1169079/blog/225070
经常用于处理大量的数据,如果期间的输出数据、中间数据能压缩存储,对系统的I/O性能会有提升。综合考虑压缩、解压速度、是否支持split,目前lzo是最好的选择。LZO(LZO是Lempel-Ziv-Oberhumer的缩写)是一种高压缩比和解压速度极快的编码,它的特点是解压缩速度非常快,无损压缩,压缩后的数据能准确还原,lzo是基于block分块的,允许数据被分解成chunk,能够被并行的解压。LZO库实现了许多有下述特点的算法:
(1)、解压简单,速度非常快。
(2)、解压不需要内存。
(3)、压缩相当地快。
(4)、压缩需要64 kB的内存。
(5)、允许在压缩部分以损失压缩速度为代价提高压缩率,解压速度不会降低。
(6)、包括生成预先压缩数据的压缩级别,这样可以得到相当有竞争力的压缩比。
(7)、另外还有一个只需要8 kB内存的压缩级别。
(8)、算法是线程安全的。
(9)、算法是无损的。
本文针对Hadoop 2.2.0,介绍如何安装和使用lzo。
一、下载、解压并编译lzo包
1 |
[wyp@master ~]$ wget http://www.oberhumer.com/opensource/lzo/download/lzo-2.06.tar.gz |
2 |
[wyp@master ~]$ tar -zxvf lzo-2.06.tar.gz |
4 |
[wyp@master ~]$ export CFLAGS=-m64 |
5 |
[wyp@master ~]$ ./configure -enable-shared -prefix=/usr/local/hadoop/lzo/ |
6 |
[wyp@master ~]$ make && sudo make install |
编译完lzo包之后,会在/usr/local/hadoop/lzo/生成一些文件,目录结构如下:
1 |
[wyp@master /usr/local/hadoop/lzo]$ ls -l |
3 |
drwxr-xr-x 3 root root 4096 Mar 21 17:23 include |
4 |
drwxr-xr-x 2 root root 4096 Mar 21 17:23 lib |
5 |
drwxr-xr-x 3 root root 4096 Mar 21 17:23 share |
将/usr/local/hadoop/lzo目录下的所有文件打包,并同步到集群中的所有机器上。
在编译lzo包的时候,需要一些环境,可以用下面的命令安装好lzo编译环境
1 |
[wyp@master ~]$ yum -y install lzo-devel \ |
2 |
zlib-devel gcc autoconf automake libtool |
二、安装Hadoop-LZO
这里下载的是Twitter hadoop-lzo,可以用Maven(如何安装Maven请参照本博客的《Linux命令行下安装Maven与配置》)进行编译。
1 |
[wyp@master ~]$ wget https://github.com/twitter/hadoop-lzo/archive/master.zip |
下载后的文件名是master,它是一个zip格式的压缩包,可以进行解压:
解压后的文件夹名为hadoop-lzo-master
当然,如果你电脑安装了git,你也可以用下面的命令去下载
1 |
[wyp@master ~]$ git clone https://github.com/twitter/hadoop-lzo.git |
hadoop-lzo中的pom.xml依赖了hadoop2.1.0-beta,由于我们这里用到的是Hadoop 2.2.0,所以建议将hadoop版本修改为2.2.0:
2 |
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> |
3 |
<hadoop.current.version>2.2.0</hadoop.current.version> |
4 |
<hadoop.old.version>1.0.4</hadoop.old.version> |
然后进入hadoop-lzo-master目录,依次执行下面的命令
01 |
[wyp@master hadoop-lzo-master]$ export CFLAGS=-m64 |
02 |
[wyp@master hadoop-lzo-master]$ export CXXFLAGS=-m64 |
03 |
[wyp@master hadoop-lzo-master]$ export C_INCLUDE_PATH= \ |
04 |
/usr/local/hadoop/lzo/include |
05 |
[wyp@master hadoop-lzo-master]$ export LIBRARY_PATH=/usr/local/hadoop/lzo/lib |
06 |
[wyp@master hadoop-lzo-master]$ mvn clean package -Dmaven.test.skip=true |
07 |
[wyp@master hadoop-lzo-master]$ cd target/native/Linux-amd64-64 |
08 |
[wyp@master Linux-amd64-64]$ tar -cBf - -C lib . | tar -xBvf - -C ~ |
09 |
[wyp@master ~]$cp ~/libgplcompression* $HADOOP_HOME/lib/native/ |
10 |
[wyp@master hadoop-lzo-master]$cp target/hadoop-lzo-0.4.18-SNAPSHOT.jar \ |
11 |
$HADOOP_HOME/share/hadoop/common/ |
其实在tar -cBf – -C lib . | tar -xBvf – -C ~命令之后,会在~目录下生成一下几个文件:
2 |
-rw-r--r-- 1 libgplcompression.a |
3 |
-rw-r--r-- 1 libgplcompression.la |
4 |
lrwxrwxrwx 1 libgplcompression.so -> libgplcompression.so.0.0.0 |
5 |
lrwxrwxrwx 1 libgplcompression.so.0 -> libgplcompression.so.0.0.0 |
6 |
-rwxr-xr-x 1 libgplcompression.so.0.0.0 |
其中libgplcompression.so和libgplcompression.so.0是链接文件,指向libgplcompression.so.0.0.0,将刚刚生成的libgplcompression*和target/hadoop-lzo-0.4.18-SNAPSHOT.jar同步到集群中的所有机器对应的目录。
三、配置Hadoop环境变量
1、在Hadoop中的$HADOOP_HOME/etc/hadoop/hadoop-env.sh加上下面配置:
1 |
export LD_LIBRARY_PATH=/usr/local/hadoop/lzo/lib |
2、在$HADOOP_HOME/etc/hadoop/core-site.xml加上如下配置:
02 |
<name>io.compression.codecs</name> |
03 |
<value>org.apache.hadoop.io.compress.GzipCodec, |
04 |
org.apache.hadoop.io.compress.DefaultCodec, |
05 |
com.hadoop.compression.lzo.LzoCodec, |
06 |
com.hadoop.compression.lzo.LzopCodec, |
07 |
org.apache.hadoop.io.compress.BZip2Codec |
12 |
<name>io.compression.codec.lzo.class</name> |
13 |
<value>com.hadoop.compression.lzo.LzoCodec</value> |
3、在$HADOOP_HOME/etc/hadoop/mapred-site.xml加上如下配置
02 |
<name>mapred.compress.map.output</name> |
07 |
<name>mapred.map.output.compression.codec</name> |
08 |
<value>com.hadoop.compression.lzo.LzoCodec</value> |
12 |
<name>mapred.child.env</name> |
13 |
<value>LD_LIBRARY_PATH=/usr/local/hadoop/lzo/lib</value> |
将刚刚修改的配置文件全部同步到集群的所有机器上,并重启Hadoop集群,这样就可以在Hadoop中使用lzo。
四、如何使用
这里在Hive中使用一下lzo,在hive中创建一个lzo表:
1 |
hive> create table lzo( |
4 |
> STORED AS INPUTFORMAT 'com.hadoop.mapred.DeprecatedLzoTextInputFormat' |
5 |
> OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'; |
7 |
Time taken: 3.423 seconds |
如果在创建lzo表出现了如下错误:
1 |
FAILED: Error in metadata: Class not found: \ |
2 |
com.hadoop.mapred.DeprecatedLzoTextInputFormat |
3 |
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask |
请检查你的环境是否配置好。
然后在本地用lzo压缩一个文件,先看看users.txt的内容:
17 |
[wyp@master ~]$ ls -l users.txt* |
18 |
-rw-r--r-- 1 wyp wyp 97 Mar 25 15:40 users.txt |
19 |
-rw-r--r-- 1 wyp wyp 154 Mar 25 15:40 users.txt.lzo |
将users.txt.lzo的数据导入到lzo表里面:
01 |
hive> load data local inpath '/home/wyp/users.txt.lzo' into table lzo; |
02 |
Copying data from file:/home/wyp/users.txt.lzo |
03 |
Copying file: file:/home/wyp/users.txt.lzo |
04 |
Loading data to table default.lzo |
05 |
Table default.lzo stats: [num_partitions: 0, num_files: 1, |
06 |
num_rows: 0, total_size: 154, raw_data_size: 0] |
08 |
Time taken: 0.49 seconds |
09 |
hive> select * from lzo; |
25 |
Time taken: 0.244 seconds, Fetched: 14 row(s) |
好了,我们可以在Hadoop中使用lzo了!!(完)
- 配置hadoop集群的lzo压缩
MR-Job中使用lzop详见MR案例:Job中使用Lzo压缩 1). 配置前的环境准备 # yum -y install lzo-devel zlib-devel gcc autoconf auto ...
- Hadoop、Hive【LZO压缩配置和使用】
目录 一.编译 二.相关配置 三.为LZO文件创建索引 四.Hive为LZO文件建立索引 1.hive创建的lzo压缩的分区表 2.给.lzo压缩文件建立索引index 3.读取Lzo文件的注意事项( ...
- hadoop 支持 LZO 压缩配置
1)hadoop 本身并不支持 lzo 压缩,故需要使用 twitter 提供的 hadoop-lzo 开源组件.hadoop lzo 需依赖 hadoop 和 lzo 进行编译,编译步骤如下. 编译 ...
- Hadoop 2.2.0安装和配置lzo
转自:http://www.iteblog.com/archives/992 Hadoop经常用于处理大量的数据,如果期间的输出数据.中间数据能压缩存储,对系统的I/O性能会有提升.综合考虑压缩.解压 ...
- 开启hadoop和Hbase集群的lzo压缩功能(转)
原文链接:开启hadoop和Hbase集群的lzo压缩功能 问题导读: 1.如何启动hadoop.hbase集群的压缩功能? 2.lzo的作用是什么? 3.hadoop配置文件需要做哪些修改? 首先我 ...
- MR案例:MR和Hive中使用Lzo压缩
在MapReduce中使用lzo压缩 1).首先将数据文件在本地使用lzop命令压缩.具体配置过详见配置hadoop集群的lzo压缩 //压缩lzop,解压缩lzop -d [root@ncst wo ...
- Hadoop添加LZO压缩支持
启用lzo的压缩方式对于小规模集群是很有用处,压缩比率大概能降到原始日志大小的1/3.同时解压缩的速度也比较快. 安装 准备jar包 1)先下载lzo的jar项目https://github.com/ ...
- Hadoop配置lzo
编译: 0. 环境准备 maven(下载安装,配置环境变量,修改sitting.xml加阿里云镜像) gcc-c++ zlib-devel autoconf automake libtool 通过yu ...
- Hadoop 2.x(YARN)安装配置LZO
今天尝试在Hadoop 2.x(YARN)上安装和配置LZO,遇到了很多坑,网上的资料都是基于Hadoop 1.x的,基本没有对于Hadoop 2.x上应用LZO,我在这边记录整个安装配置过程 1. ...
随机推荐
- 函数响应式编程(FRP)框架--ReactiveCocoa
由于工作原因,有段时间没更新博客了,甚是抱歉,只是,从今天開始我又活跃起来了,哈哈,于是决定每周更新一博.大家互相学习.交流. 今天呢.讨论一下关于ReactiveCocoa,这个採用函数响应式编程( ...
- POJ 1579 Function Run Fun 记忆化递归
典型的记忆化递归问题. 这类问题的记忆主要是利用数组记忆.那么已经计算过的值就能够直接返回.不须要进一步递归了. 注意:下标越界.递归顺序不能错,及时推断是否已经计算过值了,不要多递归. 或者直接使用 ...
- python之函数用法xrange()
# -*- coding: utf-8 -*- #python 27 #xiaodeng #python之函数用法xrange() #xrange() #说明:返回一个生成器 #xrange做循环的性 ...
- CAS 5.1.x 的搭建和使用(二)—— 通过Overlay搭建服务端-其它配置说明
CAS单点登录系列: CAS 5.1.x 的搭建和使用(一)—— 通过Overlay搭建服务端 CAS5.1.x 的搭建和使用(二)—— 通过Overlay搭建服务端-其它配置说明 CAS5.1.x ...
- Java 性能测试的四项原则
绝大数的开发人员在日常工作过程中都会或多或少的遇见过性能问题,本文旨在阐述性能测试的理论,从而为性能分析和开发人员做指导.本文对于那些刚刚接触性能调优和正在解决问题的开发人员也能提供一些启发性的思路. ...
- 10个你必须知道的jQueryMobile代码片段(转)
1.在列表项和按钮上禁用文本截断 如果你的列表项或者按钮上是一个很长的文本,它将会被jQuery Mobile自动截断,要禁用这个截断设置,需要在CSS选择器上添加属性"white ...
- Android 小技巧-- TextView与EditText 同步显示
方法一.利用View.OnKeyListener"同步"显示 EditText myEdit = (EditText)findViewById(R.id.myEdit); Tex ...
- TFS 切换登录用户的方法[转]
来自:http://blog.csdn.net/tiangaojie123abc/article/details/12121929 方法一 用VS2010开发项目,一直困扰着我的是不知道怎么去切换TF ...
- python - multi-mechanize 安装笔记
1. multi-mechanize 是什么Multi-Mechanize 是一个开源的性能和负载测试框架,它并发运行多个 Python 脚本对网站或者服务生成负载(组合事务).测试输出报告保存为HT ...
- OAF_OAF Framework学习笔记的基本概念(概念)
2014-11-02 Created By BaoXinjian