转自:http://www.iteblog.com/archives/992

 Hadoop经常用于处理大量的数据,如果期间的输出数据、中间数据能压缩存储,对系统的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包

[wyp@master ~]$ wget http://www.oberhumer.com/opensource/lzo/download/lzo-2.06.tar.gz
[wyp@master ~]$ tar -zxvf lzo-2.06.tar.gz
[wyp@master ~]$ cd lzo-2.06
[wyp@master ~]$ export CFLAGS=-m64
[wyp@master ~]$ ./configure -enable-shared -prefix=/usr/local/hadoop/lzo/
[wyp@master ~]$ make && sudo make install

  编译完lzo包之后,会在/usr/local/hadoop/lzo/生成一些文件,目录结构如下:

[wyp@master /usr/local/hadoop/lzo]$ ls -l
total 12
drwxr-xr-x 3 root root 4096 Mar 21 17:23 include
drwxr-xr-x 2 root root 4096 Mar 21 17:23 lib
drwxr-xr-x 3 root root 4096 Mar 21 17:23 share

  将/usr/local/hadoop/lzo目录下的所有文件打包,并同步到集群中的所有机器上。

  在编译lzo包的时候,需要一些环境,可以用下面的命令安装好lzo编译环境

[wyp@master ~]$ yum -y install  lzo-devel     \
               zlib-devel  gcc autoconf automake libtool

二、安装Hadoop-LZO

  这里下载的是Twitter hadoop-lzo,可以用Maven(如何安装Maven请参照本博客的《Linux命令行下安装Maven与配置》)进行编译。

[wyp@master ~]$ wget https://github.com/twitter/hadoop-lzo/archive/master.zip

下载后的文件名是master,它是一个zip格式的压缩包,可以进行解压:

[wyp@master ~]$ unzip master

解压后的文件夹名为hadoop-lzo-master

  当然,如果你电脑安装了git,你也可以用下面的命令去下载

[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:

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <hadoop.current.version>2.2.0</hadoop.current.version>
    <hadoop.old.version>1.0.4</hadoop.old.version>
  </properties>

然后进入hadoop-lzo-master目录,依次执行下面的命令

[wyp@master hadoop-lzo-master]$ export CFLAGS=-m64
[wyp@master hadoop-lzo-master]$ export CXXFLAGS=-m64
[wyp@master hadoop-lzo-master]$ export C_INCLUDE_PATH=     \
                                  /usr/local/hadoop/lzo/include
[wyp@master hadoop-lzo-master]$ export LIBRARY_PATH=/usr/local/hadoop/lzo/lib
[wyp@master hadoop-lzo-master]$ mvn clean package -Dmaven.test.skip=true
[wyp@master hadoop-lzo-master]$ cd target/native/Linux-amd64-64
[wyp@master Linux-amd64-64]$ tar -cBf - -C lib . | tar -xBvf - -C ~
[wyp@master ~]$cp ~/libgplcompression* $HADOOP_HOME/lib/native/
[wyp@master hadoop-lzo-master]$cp target/hadoop-lzo-0.4.18-SNAPSHOT.jar   \
                                   $HADOOP_HOME/share/hadoop/common/

其实在tar -cBf - -C lib . | tar -xBvf - -C ~命令之后,会在~目录下生成一下几个文件:

[wyp@master ~]$ ls -l
-rw-r--r--  1 libgplcompression.a
-rw-r--r--  1 libgplcompression.la
lrwxrwxrwx  1 libgplcompression.so -> libgplcompression.so.0.0.0
lrwxrwxrwx  1 libgplcompression.so.0 -> libgplcompression.so.0.0.0
-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加上下面配置:

export LD_LIBRARY_PATH=/usr/local/hadoop/lzo/lib

  2、在$HADOOP_HOME/etc/hadoop/core-site.xml加上如下配置:

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

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

<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>mapred.child.env</name>
    <value>LD_LIBRARY_PATH=/usr/local/hadoop/lzo/lib</value>
</property>

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

四、如何使用

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

hive> create table lzo(
    > id int,
    > name string)
    > STORED AS INPUTFORMAT 'com.hadoop.mapred.DeprecatedLzoTextInputFormat'
    > OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat';
OK
Time taken: 3.423 seconds
如果在创建lzo表出现了如下错误:

FAILED: Error in metadata: Class not found:     \
com.hadoop.mapred.DeprecatedLzoTextInputFormat
FAILED: Execution Error,
return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask

请检查你的环境是否配置好。

然后在本地用lzo压缩一个文件,先看看users.txt的内容:

[wyp@master ~]$ cat users.txt
1^Awyp
2^Azs
3^Als
4^Aww
5^Awyp2
6^Awyp3
7^Awyp4
8^Awyp5
9^Awyp6
10^Awyp7
11^Awyp8
12^Awyp5
13^Awyp9
14^Awyp20
[wyp@master ~]$ lzop users.txt
[wyp@master ~]$ ls -l users.txt*
-rw-r--r-- 1 wyp wyp 97  Mar 25 15:40 users.txt
-rw-r--r-- 1 wyp wyp 154 Mar 25 15:40 users.txt.lzo

将users.txt.lzo的数据导入到lzo表里面:

hive> load data local inpath '/home/wyp/users.txt.lzo' into table lzo;
Copying data from file:/home/wyp/users.txt.lzo
Copying file: file:/home/wyp/users.txt.lzo
Loading data to table default.lzo
Table default.lzo stats: [num_partitions: 0, num_files: 1,
               num_rows: 0, total_size: 154, raw_data_size: 0]
OK
Time taken: 0.49 seconds
hive> select * from lzo;
OK
1   wyp
2   zs
3   ls
4   ww
5   wyp2
6   wyp3
7   wyp4
8   wyp5
9   wyp6
10  wyp7
11  wyp8
12  wyp5
13  wyp9
14  wyp20
Time taken: 0.244 seconds, Fetched: 14 row(s)

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

附:linux下maven安装配置 :http://www.iteblog.com/archives/775

Hadoop 2.2.0安装和配置lzo的更多相关文章

  1. CDH6.3.0下Apache Atlas2.1.0安装与配置

    CDH6.3.0下Apache Atlas2.1.0安装与配置 0. 说明 文中的${ATLAS_HOME}, ${HIVE_HOME} 环境变更需要根据实际环境进行替换. 1. 依赖 A. 软件依赖 ...

  2. 烂泥:zabbix3.0安装与配置

    本文由ilanniweb提供友情赞助,首发于烂泥行天下 想要获得更多的文章,可以关注我的微信ilanniweb 这个月又快过完了,最近也比较忙,没时间写文章,今天挤点时间把zabbix3.0安装与配置 ...

  3. CentOS-6.6下Tomcat-7.0安装与配置(Linux)

    CentOS-6.6下Tomcat-7.0安装与配置(Linux) 一.认识tomcat Tomcat是一个免费的开源的Serlvet容器,它是Apache基金会的Jakarta项目中的一个核心项目, ...

  4. spark 1.6.0 安装与配置(spark1.6.0、Ubuntu14.04、hadoop2.6.0、scala2.10.6、jdk1.7)

    前几天刚着实研究spark,spark安装与配置是入门的关键,本人也是根据网上各位大神的教程,尝试配置,发现版本对应最为关键.现将自己的安装与配置过程介绍如下,如有兴趣的同学可以尝试安装.所谓工欲善其 ...

  5. [Hadoop入门] - 2 ubuntu安装与配置 hadoop安装与配置

    ubuntu安装(这里我就不一一捉图了,只引用一个网址, 相信大家能力) ubuntu安装参考教程:  http://jingyan.baidu.com/article/14bd256e0ca52eb ...

  6. CentOS7.0安装与配置Tomcat-7

    解决权限不够 #chmod a+x filename 安装说明 安装环境:CentOS-7.0.1406安装方式:源码安装 软件:apache-tomcat-7.0.29.tar.gz 下载地址:ht ...

  7. Hadoop集群的安装与配置(centos 6.5)

    一.Hadoop搭建准备(centOs6.5  且每个系统都要有同一个用户,如:hadoop)     1.IP的配置 包括Master和Slaves的IP配置,之间能够相互ping通:  例如:   ...

  8. Redis4.0.0 安装及配置 (Linux — Centos7)

    本文中的两个配置文件可在这里找到 操作系统:Linux Linux发行版:Centos7 安装 下载地址,点这里Redis4.0.0.tar.gz 或者使用命令: wget http://downlo ...

  9. macOS下MySQL 8.0 安装与配置教程

    一.前言 1.本教程主要内容 适用Homebrew安装MySQL MySQL 8.0 基础适用于配置 MySQL shell管理常用语法示例(用户.权限等) MySQL字符编码配置 MySQL远程访问 ...

随机推荐

  1. vue动态切换页面

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. JAVA自学笔记08

    JAVA自学笔记08 1.构造方法私有,外界就不能再创建对象 2.说明书的制作过程 1)写一个工具类,在同一文件夹下,测试类需要用到工具类,系统将自动编译工具类:工具类的成员方法一般是静态的,因此在测 ...

  3. JavaScirpt对象原生方法

    Object.assign() Object.assign()方法用于合并对象,只会合并可枚举的属性 const obj1= {a: 1} const obj2 = Object.assign({}, ...

  4. C# Xamarin移动开发项目实战篇

    一.课程介绍 在前面阿笨的<C# Xamarin移动开发基础进修篇>课程中,大家已经熟悉和了解了Xamarin移动App开发的基础知识和原理.本次分享课<C# Xamarin移动开发 ...

  5. CSS中margin边界叠加问题及解决方案

    你对CSS的margin边界叠加的概念是否了解,这里和大家分享一下,当一个元素出现在另一个元素上面时,第一个元素的底边界与第二个元素的顶边界发生叠加. CSS的margin边界叠加深度剖析 边界叠加简 ...

  6. 配置iis支持.json格式的文件

    配置iis支持.json格式的文件发现要让IIS支持json文件并不是单纯的添加mime这么简单啊,以下是设置方法:一.IIS 6 1. MIME设置:在IIS的站点属性的HTTP头设置里,选MIME ...

  7. C# Draw multiple Lines

    I would make a Line class having start and end point of the line in struct Point and make list of th ...

  8. 发票打印不全不完整的解决方案(Win10)

    发票不管怎么设置,不是二维码缺少一点,就是金额小数点后边的数字显示不全 具体原因是打印机默认纸张上A4,实际发票纸张要比A4宽度宽一点点 原来写过一篇程序方便的打印票据的控制<终于部分解决了.N ...

  9. centos cron 自动执行脚本异常 命令不生效的解决办法

    办法: 1.sh脚本加入 source /etc/profile 2.非系统命令,要写绝对路径

  10. centos7下使用rpm包安装clickhouse

    clickhouse是由俄罗斯Yandex公司开发的列式存储数据库,于2016年开源,clickhouse的定位是快速的数据分析,对于处理海量数据的情况性能非常好,在网上也有很多测试的案例,在大数据的 ...