Hadoop测试LZO的index功能

目录


准备测试数据
压缩数据&建立索引文件
以wordcount的input运行MapReduce
LZO索引说明

准备测试数据

因为默认的block是128M大,上传了一份小数据只有19M需要扩大,通过shell脚本解决。
在这里插入图片描述

1.编写shell脚本
[hadoop@192 data]$ touch create_data.sh
[hadoop@192 data]$ vi create_data.sh
#!/bin/bash
basepath=$(cd `dirname $0`; pwd)
if [ "$basepath" != "/home/hadoop/data" ];then
 exit
fi
rm -f page_big_data.dat
for ((a=1;a<=100;a++))
do
   cat page_views.dat >>page_big_data.dat
done
执行完后:

在这里插入图片描述


压缩数据&建立索引文件
1.压缩文件
[hadoop@192 data]$ lzop -9v page_big_data.dat

在这里插入图片描述

2.上传至HDFS
[hadoop@192 bin]$ hdfs dfs -mkdir /user/hadoop/LZO
[hadoop@192 data]$ hdfs dfs -put page_big_data.dat.lzo /user/hadoop/LZO
[hadoop@192 data]$ hdfs dfs -ls /user/hadoop/LZO
Found 1 items
-rw-r--r--   1 hadoop supergroup  670879709 2019-02-11 14:34 /user/hadoop/LZO/page_big_data.dat.lzo
3.建立索引文件
hadoop jar $HADOOP_HOME/share/hadoop/common/hadoop-lzo-0.4.21-SNAPSHOT.jar com.hadoop.compression.lzo.LzoIndexer /user/hadoop/LZO/page_big_data.dat.lzo
[hadoop@192 data]$ hadoop jar $HADOOP_HOME/share/hadoop/common/hadoop-lzo-0.4.21-SNAPSHOT.jar com.hadoop.compression.lzo.LzoIndexer /user/hadoop/LZO/page_big_data.dat.lzo
19/02/11 14:51:33 INFO lzo.GPLNativeCodeLoader: Loaded native gpl library from the embedded binaries
19/02/11 14:51:33 INFO lzo.LzoCodec: Successfully loaded & initialized native-lzo library [hadoop-lzo rev f1deea9a313f4017dd5323cb8bbb3732c1aaccc5]
19/02/11 14:51:34 INFO lzo.LzoIndexer: [INDEX] LZO Indexing file /user/hadoop/LZO/page_big_data.dat.lzo, size 0.62 GB...
19/02/11 14:51:34 INFO compress.LzoCodec: Bridging org.apache.hadoop.io.compress.LzoCodec to com.hadoop.compression.lzo.LzoCodec.
19/02/11 14:51:34 INFO Configuration.deprecation: hadoop.native.lib is deprecated. Instead, use io.native.lib.available
19/02/11 14:51:36 INFO lzo.LzoIndexer: Completed LZO Indexing in 2.22 seconds (288.72 MB/s).  Index size is 56.67 KB.

可以使用集群的方式

$ hadoop jar $HADOOP_HOMOE/share/hadoop/common/hadoop-lzo-0.4.20-SNAPSHOT.jar com.hadoop.compression.lzo.DistributedLzoIndexer /home/wyp/input/cite.txt.lzo

会在hdfs目录下生产一个index文件
在这里插入图片描述

以wordcount的input运行MapReduce
yarn jar /home/hadoop/app/hadoop-2.6.0-cdh5.7.0/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0-cdh5.7.0.jar wordcount \
>  -D mapreduce.job.inputformat.class=com.hadoop.mapreduce.LzoTextInputFormat \
>  -D mapred.output.compress=true \
>  -D mapred.output.compression.codec=com.hadoop.compression.lzo.LzopCodec \
>  /user/hadoop/LZO/page_big_data.dat.lzo /user/hadoop/LZO/output

以128M为一个split形成一个map task,此次任务按计算应该有 640/128 = 5个
在这里插入图片描述


LZO的索引说明

读写lzo文件提供了两种方式LzoInputStream和LzoOutputStream,使用户可以轻松读取和写入压缩的lzo文件,无论哪种方式,10-20秒后会有一个名为big_file.lzo.index的文件。新创建的索引文件告诉LzoTextInputFormat的getSplits函数如何将LZO文件分解为可以并行解压缩和处理的分割。或者,如果指定目录而不是文件名,则两个索引器将递归遍历目录结构,查找.lzo文件,索引任何尚未具有相应.lzo.index文件的文件。

在新文件上运行任何工作,比如wordcount。在基于Java的M / R作业中,只需用LzoTextInputFormat替换TextInputFormat的用法。在流作业中,添加“-inputformat com.hadoop.mapred.DeprecatedLzoTextInputFormat”(流仍然使用旧的API,并且需要一个继承自org.apache.hadoop.mapred.InputFormat的类)。要在hadoop-streaming中正确使用DeprecatedLzoTextInputFormat,还应设置jobconf属性stream.map.input.ignoreKey=true。这将通过从传送到映射器进程的输入行中剥离字节偏移键来复制默认TextInputFormat的行为。对于Pig工作,给我发电子邮件或检查清单 - 我有自定义的LZO加载程序类可以工作但尚未回馈。
请注意,如果忘记索引.lzo文件,该作业将起作用,但会在单个拆分中处理整个文件,效率会降低

索引说明摘自:https://github.com/twitter/hadoop-lzo

猜你喜欢

转载自blog.csdn.net/aubekpan/article/details/86997506
LZO