【转自】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
3 [wyp@master ~]$ cd lzo-2.06
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
2 total 12
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格式的压缩包,可以进行解压:

1 [wyp@master ~]$ unzip master

解压后的文件夹名为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:

1 <properties>
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>
5   </properties>

然后进入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 ~命令之后,会在~目录下生成一下几个文件:

1 [wyp@master ~]$ ls -l
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加上如下配置:

01 <property>
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
08         </value>
09 </property>
10  
11 <property>
12     <name>io.compression.codec.lzo.class</name>
13     <value>com.hadoop.compression.lzo.LzoCodec</value>
14 </property>

  3、在$HADOOP_HOME/etc/hadoop/mapred-site.xml加上如下配置

01 <property>
02     <name>mapred.compress.map.output</name>
03     <value>true</value>
04 </property>
05  
06 <property>
07     <name>mapred.map.output.compression.codec</name>
08     <value>com.hadoop.compression.lzo.LzoCodec</value>
09 </property>
10  
11 <property>
12     <name>mapred.child.env</name>
13     <value>LD_LIBRARY_PATH=/usr/local/hadoop/lzo/lib</value>
14 </property>

  将刚刚修改的配置文件全部同步到集群的所有机器上,并重启Hadoop集群,这样就可以在Hadoop中使用lzo。

四、如何使用

  这里在Hive中使用一下lzo,在hive中创建一个lzo表:

1 hive> create table lzo(
2     > id int,
3     > name string)
4     > STORED AS INPUTFORMAT 'com.hadoop.mapred.DeprecatedLzoTextInputFormat'
5     > OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat';
6 OK
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的内容:

01 [wyp@master ~]$ cat users.txt
02 1^Awyp
03 2^Azs
04 3^Als
05 4^Aww
06 5^Awyp2
07 6^Awyp3
08 7^Awyp4
09 8^Awyp5
10 9^Awyp6
11 10^Awyp7
12 11^Awyp8
13 12^Awyp5
14 13^Awyp9
15 14^Awyp20
16 [wyp@master ~]$ lzop 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]
07 OK
08 Time taken: 0.49 seconds
09 hive> select * from lzo;
10 OK
11 1   wyp
12 2   zs
13 3   ls
14 4   ww
15 5   wyp2
16 6   wyp3
17 7   wyp4
18 8   wyp5
19 9   wyp6
20 10  wyp7
21 11  wyp8
22 12  wyp5
23 13  wyp9
24 14  wyp20
25 Time taken: 0.244 seconds, Fetched: 14 row(s)

好了,我们可以在Hadoop中使用lzo了!!(完)

【转】hadoop2.6 配置lzo压缩的更多相关文章

  1. 配置hadoop集群的lzo压缩

    MR-Job中使用lzop详见MR案例:Job中使用Lzo压缩 1). 配置前的环境准备 # yum -y install lzo-devel zlib-devel gcc autoconf auto ...

  2. Hadoop、Hive【LZO压缩配置和使用】

    目录 一.编译 二.相关配置 三.为LZO文件创建索引 四.Hive为LZO文件建立索引 1.hive创建的lzo压缩的分区表 2.给.lzo压缩文件建立索引index 3.读取Lzo文件的注意事项( ...

  3. hadoop 支持 LZO 压缩配置

    1)hadoop 本身并不支持 lzo 压缩,故需要使用 twitter 提供的 hadoop-lzo 开源组件.hadoop lzo 需依赖 hadoop 和 lzo 进行编译,编译步骤如下. 编译 ...

  4. Hadoop 2.2.0安装和配置lzo

    转自:http://www.iteblog.com/archives/992 Hadoop经常用于处理大量的数据,如果期间的输出数据.中间数据能压缩存储,对系统的I/O性能会有提升.综合考虑压缩.解压 ...

  5. 开启hadoop和Hbase集群的lzo压缩功能(转)

    原文链接:开启hadoop和Hbase集群的lzo压缩功能 问题导读: 1.如何启动hadoop.hbase集群的压缩功能? 2.lzo的作用是什么? 3.hadoop配置文件需要做哪些修改? 首先我 ...

  6. MR案例:MR和Hive中使用Lzo压缩

    在MapReduce中使用lzo压缩 1).首先将数据文件在本地使用lzop命令压缩.具体配置过详见配置hadoop集群的lzo压缩 //压缩lzop,解压缩lzop -d [root@ncst wo ...

  7. Hadoop添加LZO压缩支持

    启用lzo的压缩方式对于小规模集群是很有用处,压缩比率大概能降到原始日志大小的1/3.同时解压缩的速度也比较快. 安装 准备jar包 1)先下载lzo的jar项目https://github.com/ ...

  8. Hadoop配置lzo

    编译: 0. 环境准备 maven(下载安装,配置环境变量,修改sitting.xml加阿里云镜像) gcc-c++ zlib-devel autoconf automake libtool 通过yu ...

  9. Hadoop 2.x(YARN)安装配置LZO

    今天尝试在Hadoop 2.x(YARN)上安装和配置LZO,遇到了很多坑,网上的资料都是基于Hadoop 1.x的,基本没有对于Hadoop 2.x上应用LZO,我在这边记录整个安装配置过程 1. ...

随机推荐

  1. 如何查询端口号和网址的ip地址?

    import socket print socket.gethostname()#主机名 hostname=socket.gethostname() #传递主机名 print socket.getho ...

  2. JDBC实例--JDBC连接池技术解密,连接池对我们不再陌生

    一.为什么我们要用连接池技术? 前面的数据库连接的建立及关闭资源的方法有些缺陷.统舱传统数据库访问方式:一次数据库访问对应一个物理连接,每次操作数据库都要打开.关闭该物理连接, 系统性能严重受损. 解 ...

  3. linux 系统文件的特殊权限

    文件权限与归属 Linux系统中的一切都是文件,但每个文件的类型不尽相同,并且Linux系统会用不同的符号来加以区分,常见的包括有 -:普通文件,d:目录文件,l:链接文件,b:块设备文件,c:字符设 ...

  4. python3.x 和 python2.x关于 urllib的用法

    在python2.x版本中可以直接使用import urllib来进行操作,但是python3.x版本中使用的是import urllib.request来进行操作,下面是简单的例子: python2 ...

  5. 转:变手把手教你玩转SOCKET模型之重叠I/O篇

    手把手教你玩转SOCKET模型之重叠I/O篇 “身为一个初学者,时常能体味到初学者入门的艰辛,所以总是想抽空作点什么来尽我所能的帮助那些需要帮助的人.我也希望大家能把自己的所学和他人一起分享,不要去鄙 ...

  6. 使用SpringMVC搭建第一个项目

    概述 使用SpringMVC搭建第一个项目,入门教程,分享给大家. 详细 代码下载:http://www.demodashi.com/demo/10596.html 一.概述 1.什么是Spring ...

  7. WebView和JavaScript如何实现相互调用

    WebView可以同JavaScript互相调用,因此我们可以用HTML和JavaScript来辅助编写Android应用. 示例:使用javaScript获取Android程序中的对象数据 clas ...

  8. 老毛桃pe装机工具一键还原系统

    系统崩溃后,很多菜鸟朋友会六神无主,不知接下来怎么办.如果是老手,已经屡见不鲜了,因为只需一键还原系统就可以恢复到原来的工作状态.下面不妨跟小编一起继续看看怎么一键还原系统.  ①制作一个老毛桃win ...

  9. 【LeetCode】41. First Missing Positive (3 solutions)

    First Missing Positive Given an unsorted integer array, find the first missing positive integer. For ...

  10. jsp里面实现asp.net的Global文件内容。

    Global.java文件: import javax.servlet.ServletContext; import javax.servlet.ServletContextEvent; import ...