http://share.blog.51cto.com/278008/663555
Hadoop集群中启用了lzo后,还需要一些配置,才能使集群能够对单个的lzo文件进行并行的map操作,以提升job的执行速度。
首先,要为lzo文件创建index。下面的命令对某个目录里的lzo文件创建index:
使用该命令创建index要花些时间的,我一个7.5GB大小的文件,创建index,花了2分30秒的样子。 其实创建index时还有另外一个参数, 即com.hadoop.compression.lzo.DistributedLzoIndexer。两个选项可以参考:https://github.com/kevinweil/hadoop-lzo,该文章对这两个选项的解释,我不是很明白,但使用后一个参数可以减少创建index时所花费的时间, 而对mapreduce任务的执行没有影响。如下:
$HADOOP_HOME/bin/hadoop jar $HADOOP_HOME/lib/hadoop-lzo-0.4.10.jar com.hadoop.compression.lzo.LzoIndexer /log/source/cd/
然后,在Hive中创建表时,要指定INPUTFORMAT和OUTPUTFORMAT,否则集群仍然不能对lzo进行并行的map处理。在hive中创建表时加入下列语句:
$HADOOP_HOME/bin/hadoop jar $HADOOP_HOME/lib/hadoop-lzo-0.4.10.jar com.hadoop.compression.lzo.DistributedLzoIndexer /log/source/cd/
-
SET FILEFORMAT
-
INPUTFORMAT "com.hadoop.mapred.DeprecatedLzoTextInputFormat"
-
OUTPUTFORMAT "org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat";
-