hadoop支持lzo完整过程

本文详细介绍如何在Hadoop环境中安装并配置LZO压缩功能,包括安装lzo原生库、hadoop-lzo,配置Hadoop环境变量等步骤。此外还介绍了如何通过Hive测试LZO压缩效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介
部署
安装lzop native library
安装hadoop-lzo
配置hadoop环境变量
验证lzo通过hive测试
创建lzo表
导入数据
索引LZO文件
利用hive执行mr任务
修改使用中hive表的输入输出格式
简介
   启用lzo
   启用lzo的压缩方式对于小规模集群是很有用处,压缩比率大概能降到原始日志大小的1/3。同时解压缩的速度也比较快。
   安装lzo
   lzo并不是Linux系统原生支持,所以需要下载安装软件包。这里至少需要安装3个软件包:lzo, lzop, Hadoop-gpl-packaging。
   增加索引
   gpl-packaging的作用主要是对压缩的lzo文件创建索引,否则的话,无论压缩文件是否大于hdfs的block大小,都只会按照默认启动2个map操作。
部署


   安装lzop native library


       1 [root@localhost ~]#  wget http://www.oberhumer.com/opensource/lzo/download/lzo-2.06.tar.gz
       2 [root@localhost ~]#  tar -zxvf lzo-2.06.tar.gz
       3 [root@localhost ~]#  cd lzo-2.06
       4 [root@localhost ~]#  export CFLAGS=-m64
       5 [root@localhost ~]#  ./configure -enable-shared -prefix=/usr/local/hadoop/lzo/
       6 [root@localhost ~]# make && sudo make install
                      编译完lzo包之后,会在/usr/local/hadoop/lzo/生成一些文件。
                      将/usr/local/hadoop/lzo目录下的所有文件打包,并同步到集群中的所有机器上。
                      在编译lzo包的时候,需要一些环境,可以用下面的命令安装好lzo编译环境
       7 [root@localhost ~]#  yum -y install  lzo-devel  zlib-devel  gcc autoconf automake libtool


   安装hadoop-lzo


       1 这里下载的是Twitter hadoop-lzo,可以用Maven(如何安装Maven请参照本博客的《Linux命令行下安装Maven与配置》)进行编译。
       2 [root@localhost ~]#  wget https://github.com/twitter/hadoop-lzo/archive/master.zip       
       3 下载后的文件名是master,它是一个zip格式的压缩包,可以进行解压:       
       4 [root@localhost ~]#  unzip master
       5 解压后的文件夹名为hadoop-lzo-master
       6 当然,如果你电脑安装了git,你也可以用下面的命令去下载
       7 [root@localhost ~]#  git clone https://github.com/twitter/hadoop-lzo.git
       8 hadoop-lzo中的pom.xml依赖了hadoop2.1.0-beta,由于我们这里用到的是Hadoop 2.2.0,所以建议将hadoop版本修改为2.2.0:
       9 <properties>
       10    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
       11    <hadoop.current.version>2.2.0</hadoop.current.version>
       12    <hadoop.old.version>1.0.4</hadoop.old.version>
       13 </properties>
       14 然后进入hadoop-lzo-master目录,依次执行下面的命令
       15 [root@localhost ~]# export CFLAGS=-m64
       16 [root@localhost ~]# export CXXFLAGS=-m64
       17 [root@localhost ~]# export C_INCLUDE_PATH=/usr/local/hadoop/lzo/include
       18 [root@localhost ~]# export LIBRARY_PATH=/usr/local/hadoop/lzo/lib
       19 [root@localhost ~]# mvn clean package -Dmaven.test.skip=true
       20 [root@localhost ~]# cd target/native/Linux-amd64-64
       21 [root@localhost ~]# tar -cBf - -C lib . | tar -xBvf - -C ~
       22 [root@localhost ~]# cp ~/libgplcompression* $HADOOP_HOME/lib/native/
       23 [root@localhost ~]# cp target/hadoop-lzo-0.4.18-SNAPSHOT.jar $HADOOP_HOME/share/hadoop/common/
       24 其实在tar -cBf – -C lib . | tar -xBvf – -C ~命令之后,会在~目录下生成一下几个文件:
       25 [root@localhost ~]# ls -l
       26 1-rw-r--r--  1 libgplcompression.a
       27 2-rw-r--r--  1 libgplcompression.la
       28 3lrwxrwxrwx  1 libgplcompression.so -> libgplcompression.so.0.0.0
       29 4lrwxrwxrwx  1 libgplcompression.so.0 -> libgplcompression.so.0.0.0
       30 5-rwxr-xr-x  1 libgplcompression.so.0.0.0
       31 其中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。
     验证lzo(通过hive测试)


         创建lzo表
   
             CREATE TABLE lzo (
             ip STRING,
             user STRING,
             time STRING,
             request STRING,
             status STRING,
             size STRING,
             rt STRING,
             referer STRING,
             agent STRING,
             forwarded String
             )
             partitioned by (
             date string,
             host string
             )
             row format delimited
             fields terminated by '\t'
             STORED AS INPUTFORMAT "com.hadoop.mapred.DeprecatedLzoTextInputFormat"
             OUTPUTFORMAT "org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat";
         导入数据


             LOAD DATA Local INPATH '/home/hadoop/data/access_20151230_25.log.lzo' INTO TABLE lzo PARTITION(date=20151229,host=25);
            /home/hadoop/data/access_20151219.log文件的格式如下:


            直接采用lzop  /home/hadoop/data/access_20151219.log即可生成lzo格式压缩文件/home/hadoop/data/access_20151219.log.lzo


         索引LZO文件


             1. 批量lzo文件修改


                $HADOOP_HOME/bin/hadoop jar 
                /home/hadoop/hadoop-2.2.0/share/hadoop/common/hadoop-lzo-0.4.20-SNAPSHOT.jar 
                com.hadoop.compression.lzo.DistributedLzoIndexer 
                /user/hive/warehouse/lzo


             2. 单个lzo文件修改


                $HADOOP_HOME/bin/hadoop jar 
                /home/hadoop/hadoop-2.2.0/share/hadoop/common/hadoop-lzo-0.4.20-SNAPSHOT.jar
                com.hadoop.compression.lzo.LzoIndexer
                /user/hive/warehouse/lzo/20151228/lzo_test_20151228.lzo
         利用hive执行mr任务


              set hive.exec.reducers.max=10;
              set mapred.reduce.tasks=10;
              select ip,rt from nginx_lzo limit 10;
              在hive的控制台能看到类似如下格式输出,就表示正确了!
              hive> set hive.exec.reducers.max=10;
              hive> set mapred.reduce.tasks=10;
              hive> select ip,rt from lzo limit 10;
              Total MapReduce jobs = 1
              Launching Job 1 out of 1
              Number of reduce tasks is set to 0 since there's no reduce operator
              Starting Job = job_1388065803340_0009, Tracking URL = http://mycluster:8088/proxy/application_1388065803340_0009/
              Kill Command = /home/hadoop/hadoop-2.2.0/bin/hadoop job -kill job_1388065803340_0009
              Hadoop job information for Stage-1: number of mappers: 1; number of reducers: 0
              2013-12-27 09:13:39,163 Stage-1 map = 0%, reduce = 0%
              2013-12-27 09:13:45,343 Stage-1 map = 100%, reduce = 0%, Cumulative CPU 1.22 sec
              2013-12-27 09:13:46,369 Stage-1 map = 100%, reduce = 0%, Cumulative CPU 1.22 sec
              MapReduce Total cumulative CPU time: 1 seconds 220 msec
              Ended Job = job_1388065803340_0009
              MapReduce Jobs Launched:
              Job 0: Map: 1 Cumulative CPU: 1.22 sec HDFS Read: 63570 HDFS Write: 315 SUCCESS
              Total MapReduce CPU Time Spent: 1 seconds 220 msec
              OK
              xxx.xxx.xx.xxx "XXX.com"
              Time taken: 17.498 seconds, Fetched: 10 row(s)


      修改使用中hive表的输入输出格式


              ALTER TABLE lzo SET FILEFORMAT 
              INPUTFORMAT 'com.hadoop.mapred.DeprecatedLzoTextInputFormat' 
              OUTPUTFORMAT "org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat" 

              SERDE "org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe";

转载url:http://blog.youkuaiyun.com/joseph_happy/article/details/50374057

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值