Hadoop 2.2.0 安装和配置 lzo 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 目录下的所有文件打包, 并同步到集群中的所有机器上 1 / 6
在编译 lzo 包的时候, 需要一些环境, 可以用下面的命令安装好 lzo 编译环境 [wyp@master ~]$ yum -y install lzo-devel \ zlib-devel gcc autoconf automake libtool 二 安装 Hadoop-LZO 这里下载的是 Twitter hadooplzo, 可以用 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> 2 / 6
然后进入 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.s o.0.0.0, 将刚刚生成的 libgplcompression* 和 target/hadooplzo-0.4.18-snapshot.jar 同步到集群中的所有机器对应的目录 三 配置 Hadoop 环境变量 1 在 Hadoop 中的 $HADOOP_HOME/etc/hadoop/hadoop-env.sh 加上下面配置 : export LD_LIBRARY_PATH=/usr/local/hadoop/lzo/lib 3 / 6
2 在 $HADOOP_HOME/etc/hadoop/core-site.xml 加上如下配置 : <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> <name>io.compression.codec.lzo.class</name> <value>com.hadoop.compression.lzo.lzocodec</value> 3 在 $HADOOP_HOME/etc/hadoop/mapred-site.xml 加上如下配置 <name>mapred.compress.map.output</name> <value>true</value> <name>mapred.map.output.compression.codec</name> <value>com.hadoop.compression.lzo.lzocodec</value> <name>mapred.child.env</name> <value>ld_library_path=/usr/local/hadoop/lzo/lib</value> 将刚刚修改的配置文件全部同步到集群的所有机器上, 并重启 Hadoop 集群, 这样就可以在 H adoop 中使用 lzo 四 如何使用 4 / 6
这里在 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 5 / 6
Powered by TCPDF (www.tcpdf.org) Hadoop 2.2.0 安装和配置 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 了!!( 完 ) 本博客文章除特别声明, 全部都是原创! 禁止个人和公司转载本文 谢谢理解 : 过往记忆 (https://www.iteblog.com/) 本文链接 : () 6 / 6