简介

启用lzo

    启用lzo的压缩方式对于小规模集群是很有用处,压缩比率大概能降到原始日志大小的1/3。同时解压缩的速度也比较快。

安装lzo

lzo并不是linux系统原生支持,所以需要下载安装软件包。这里至少需要安装3个软件包:lzo, lzop, hadoop-gpl-packaging。

 增加索引

    gpl-packaging的作用主要是对压缩的lzo文件创建索引,否则的话,无论压缩文件是否大于hdfs的block大小,都只会按照默认启动2个map操作

安装lzop native library

[root@localhost ~]#  wget http://www.oberhumer.com/opensource/lzo/download/lzo-2.06.tar.gz

[root@localhost ~]#  tar -zxvf lzo-2.06.tar.gz

[root@localhost ~]#  cd lzo-2.06

[root@localhost ~]#  export CFLAGS=-m64

[root@localhost ~]#  ./configure -enable-shared -prefix=/usr/local/hadoop/lzo/

[root@localhost ~]# make && sudo make install

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

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

[root@localhost ~]# yum -y install lzo-devel zlib-devel gcc autoconf automake libtool

安装hadoop-lzo

下载Twitter hadoop-lzo,解压后的文件夹名为hadoop-lzo-master


[root@localhost ~]#  wget https://github.com/twitter/hadoop-lzo/archive/master.zip
[root@localhost ~]# unzip master

也可以通过git,你也可以用下面的命令去下载

[root@localhost ~]#  git clone https://github.com/twitter/hadoop-lzo.git
hadoop-lzo中的pom.xml依赖修改成Hadoop 2.9.2
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<hadoop.current.version>2.9.2</hadoop.current.version>
<hadoop.old.version>1.0.4</hadoop.old.version>
</properties>
然后进入hadoop-lzo-master目录,依次执行下面的命令
[root@localhost ~]# export CFLAGS=-m64

[root@localhost ~]# export CXXFLAGS=-m64

[root@localhost ~]# export C_INCLUDE_PATH=/usr/local/hadoop/lzo/include

[root@localhost ~]# export LIBRARY_PATH=/usr/local/hadoop/lzo/lib

[root@localhost ~]# mvn clean package -Dmaven.test.skip=true

[root@localhost ~]# cd target/native/Linux-amd64-64

[root@localhost ~]# tar -cBf - -C lib . | tar -xBvf - -C ~

[root@localhost ~]# cp ~/libgplcompression* $HADOOP_HOME/lib/native/

[root@localhost ~]# cp target/hadoop-lzo-0.4.18-SNAPSHOT.jar $HADOOP_HOME/share/hadoop/common/

其实在tar -cBf – -C lib . | tar -xBvf – -C ~命令之后,会在~目录下生成一下几个文件
其中libgplcompression.so和libgplcompression.so.0是链接文件,指向libgplcompression.so.0.0.0
[root@localhost ~]# ls -l
1-rw-r--r-- 1 libgplcompression.a
2-rw-r--r-- 1 libgplcompression.la
3lrwxrwxrwx 1 libgplcompression.so -> libgplcompression.so.0.0.0
4lrwxrwxrwx 1 libgplcompression.so.0 -> libgplcompression.so.0.0.0
5-rwxr-xr-x 1 libgplcompression.so.0.0.0

刚生成的libgplcompression*和target/hadoop-lzo-0.4.18-SNAPSHOT.jar同步到集群中的所有机器对应的目录。

scp -r hadoop-lzo-0.4.21-SNAPSHOT.jar root@node02:$HADOOP_HOME/share/hadoop/common/
scp -r libgplcompression* root@node03:$HADOOP_HOME/lib/native/

配置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>

4.将刚刚修改的配置文件全部同步到集群的所有机器上,并重启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文件的格式如下:

xxx.xxx.xx.xxx  -       [23/Dec/2015:23:22:38 +0800]    "GET /ClientGetResourceDetail.action?id=318880&token=Ocm HTTP/1.1"   200     199     0.008   "xxx.com"        "Android4.1.2/LENOVO/Lenovo A706/ch_lenovo/80"
"-"

直接采用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";
												

hadoop支持lzo完整过程的更多相关文章

  1. hadoop 支持 LZO 压缩配置

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

  2. Hadoop支持LZO

    0. 环境准备 maven(下载安装,配置环境变量,修改sitting.xml加阿里云镜像)gcc-c++zlib-develautoconfautomakelibtool通过yum安装即可 yum ...

  3. Hadoop添加LZO压缩支持

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

  4. hadoop的lzo支持

    目录 1.下载相关文件: 2.Configure LZO to build a shared library (required) and use a package-specific prefix ...

  5. Hadoop之 MapReducer工作过程

    1. 从输入到输出 一个MapReducer作业经过了input,map,combine,reduce,output五个阶段,其中combine阶段并不一定发生,map输出的中间结果被分到reduce ...

  6. StartSSL免费SSL证书申请和账户注册完整过程

    StartSSL算是比较早提供免费SSL证书的第三方提供商,我们可以免费申请且免费续期使用到有需要HTTPS网址的用户.关于网站使用SSL证书主要还是因为谷歌在向导说明中提到如果一个网站使用到SSL证 ...

  7. hadoop输出lzo文件并添加索引

    public static void main(String[] args) throws Exception { Configuration conf = new Configuration(); ...

  8. Linux内核编译完整过程

    Linux内核编译完整过程 通过网上的资料我自己的实际内核编译,我把对Linux内核编译的过程写在这里,也许对其他的Linux爱好者的编译学习有些帮助,其中很大部分是网上的资料,另外就是我在实际编译过 ...

  9. Hadoop配置lzo

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

随机推荐

  1. Weblogic漏洞利用

    Weblogic漏洞 Weblogic任意文件上传(CVE-2018-2894) 受影响版本 weblogic 10.3.6.0.weblogic 12.1.3.0.weblogic 12.2.1.2 ...

  2. markdown 编辑器使用教程---字体、颜色、表格换行、链接等

    资源池: 绿色版markdown编辑器:点击这里 提取码:ftf9 1.标题 #一级标题 ##二级标题 ###三级标题 ####四级标题 #####五级标题 ######六级标题 一级标题 二级标题 ...

  3. 交换机CPU使用率高的原因

    交换机CPU的功能 1.管理已配置的软件协议,例如: – 生成树协议(STP) – 路由协议,例如OSPF和EIGRP – 热备路由协议(HSRP) – 思科发现协议(CDP) – 端口聚合协议(PA ...

  4. cassandra权威指南读书笔记--读写数据

    写cassandra除了轻量级事务,不支持别的事务.cassandra是追加写,写的速度非常快.cassandra还有hint日志,这个数据库总是可写的,而且单个列的写操作是原子的.hint并不是一定 ...

  5. A - 最长回文(马拉车算法//manacher)

    给出一个只由小写英文字符a,b,c...y,z组成的字符串S,求S中最长回文串的长度.回文就是正反读都是一样的字符串,如aba, abba等 Input输入有多组case,不超过120组,每组输入为一 ...

  6. AtCoder Beginner Contest 164

    比赛链接:https://atcoder.jp/contests/abc164 A - Sheep and Wolves #include <bits/stdc++.h> using na ...

  7. UVA442 矩阵链乘 Matrix Chain Multiplication

    题意: 这道题也是在不改变原序列每个元素位置的前提下,看每个元素与他身边的两个元素那个先结合能得到最大的能量 题解: 很明显这是一道区间dp的题目,这道题要断环成链,这道题需要考虑在这个区间上某个元素 ...

  8. Databricks 第11篇:Spark SQL 查询(行转列、列转行、Lateral View、排序)

    本文分享在Azure Databricks中如何实现行转列和列转行. 一,行转列 在分组中,把每个分组中的某一列的数据连接在一起: collect_list:把一个分组中的列合成为数组,数据不去重,格 ...

  9. python 迭代器 iter多次消费

    问题 Python 中的迭代器是我们经常使用的迭代工具, 但其只能消费一次,再次消费便会出现 StopIteration 报错. 解决方案 封装了一个类,当迭代器使用完后再次初始化. 代码 class ...

  10. Kubernets二进制安装(9)之部署主控节点控制器controller-manager

    kube-controller-manager运行控制器,它们是处理集群中常规任务的后台线程 Controller Manager就是集群内部的管理控制中心,由负责不同资源的多个Controller构 ...