概述
- Lempel-Ziv-Oberhumer
是一种 无损的 数据压缩算法 - 实现它的一个自由软件工具是
lzop - LZO压缩可用在HDFS,压缩数据并支持分片
在CentOS7使用LZO压缩
安装
yum install -y lzop
lzop 命令常见参数 | 说明 |
---|
-v, --verbose | 查看过程信息 | -d, --decompress, --uncompress | 解压 | -t, --test | 检查压缩文件的完整性 | -U, --unlink, --delete | 压缩或解压完成后,删除输入文件 | -f, --force | 强制执行一些操作,例如覆盖文件 |
搞个文件
echo abc > a.txt
压缩
lzop -Uv a.txt
测试压缩文件的完整性
lzop -t a.txt.lzo
解压
lzop -dv a.txt.lzo
CDH6安装配置LZO
1、安装
主机=>Parcel=>配置
添加https://archive.cloudera.com/gplextras6/6.x.y/parcels/ 其中x和y要替换为CDH的具体版本,我的是6.3.2
下载,分配,激活
查看hadoop-lzo.jar 路径
2、配置
HDFS配置添加com.hadoop.compression.lzo.LzopCodec
HIVE配置的Hive 辅助 JAR 目录 添加/opt/cloudera/parcels/GPLEXTRAS/lib/hadoop/lib
配置修改后重启服务
3、测试
- 生成1个10000000行的文件,约40G
vim a.py
from multiprocessing import Process
from os import system
def append_file(file_name='a.txt'):
for i in xrange(100000):
f1 = 'abcdefghij' * 400
system('echo %s >> %s' % (f1, file_name))
def parallel(f, parallelism=100):
pool = []
for offset in range(parallelism):
pool.append(Process(target=f))
for p in pool:
p.start()
for p in pool:
p.join()
parallel(append_file)
python a.py
- 压缩文件,上传到HDFS
lzop a.txt
ll -h | grep a.txt
hadoop fs -put a.txt.lzo /user/hive/warehouse/
hadoop fs -ls -h /user/hive/warehouse/
压缩后文件190M,块大小128M,预期mapper数=2
- HIVE建表,数据装载
DROP TABLE IF EXISTS t;
CREATE TABLE t (f STRING)
STORED AS
INPUTFORMAT 'com.hadoop.mapred.DeprecatedLzoTextInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat';
LOAD DATA INPATH '/user/hive/warehouse/a.txt.lzo' INTO TABLE t;
- 添加LZO索引
sudo -u hive \
hadoop jar \
/opt/cloudera/parcels/GPLEXTRAS/lib/hadoop/lib/hadoop-lzo.jar \
com.hadoop.compression.lzo.DistributedLzoIndexer \
/user/hive/warehouse/t/a.txt.lzo
- 查看mapper数(切片数)
SET hive.input.format=org.apache.hadoop.hive.ql.io.HiveInputFormat;
SELECT COUNT(1) FROM t;
Appendix
en | 🔉 | cn |
---|
deprecate | ?depr?ke?t | vt. 反对;抨击;轻视;声明不赞成 | deprecated | ?depr?ke?t?d | deprecate 的过去式和过去分词 | parcel | ?pɑ?rsl | n. <英>包裹,邮包;一批;一块土地(尤指地产的一部分);v. <英>把……包起来(parcel sth. up) | extras | ?ekstr?z | n. 附加设备;额外部分;另外收费的部分(extra的复数) | extra | ?ekstr? | adj. 额外的;另外收费的;n. 另收费的事物;临时演员;(非击球所得的)附加分;adv. 额外 | unlink | ??n?l??k | vt. 解开……的环节;拆开;vi. 分开;分离 |
HIVE创建LZO表语法
STORED AS
INPUTFORMAT 'com.hadoop.mapred.DeprecatedLzoTextInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat';
创建LZO索引语法
hadoop jar /path/to/your/hadoop-lzo.jar com.hadoop.compression.lzo.DistributedLzoIndexer big_file.lzo
HIVE查询LZO表语法
SET hive.input.format=org.apache.hadoop.hive.ql.io.HiveInputFormat;
|