(一)环境:
hadoop | 2.8.1 |
hive | 1.2.2 |
core-site.xml 配置项
<property> <name>io.compression.codecs</name> <value>org.apache.hadoop.io.compress.GzipCodec, org.apache.hadoop.io.compress.DefaultCodec, org.apache.hadoop.io.compress.BZip2Codec, com.hadoop.compression.lzo.LzopCodec, com.hadoop.compression.lzo.LzoCodec </value> </property> <!-- lzop --> <property> <name>io.compression.codec.lzo.class</name> <value>com.hadoop.compression.lzo.LzopCodec</value> </property>
mapred-site.xml 配置项
<!--设置map中间结果使用 lzop 压缩--> <property> <name>mapreduce.map.output.compress</name> <value>true</value> </property> <property> <name>mapreduce.map.output.compress.codec</name> <value>com.hadoop.compression.lzo.LzopCodec</value> </property> <!--设置map/reduce 整个过程使用 lzop 压缩 --> <property> <name>mapreduce.output.fileoutputformat.compress</name> <value>true</value> </property> <!-- lzop --> <property> <name>mapreduce.output.fileoutputformat.compress.codec</name> <value>com.hadoop.compression.lzo.LzopCodec</value> </property>
(二)
1.hive建表sql
CREATE TABLE `lzo5`( `uuid` string) STORED AS INPUTFORMAT 'com.hadoop.mapred.DeprecatedLzoTextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
2.创建uuid.txt文件,放1行数据
uuid1
3.lzop创建lzo文件
lzop uuid.txt
4.hive load数据
load data inpath "/home/hadoop/uuid.txt.lzo" into table lzo5;
5.hive查询,查看结果是1(正确)
select count(1) from lzo5;
6.给hive表lzo5路径下的lzo文件,创建lzo索引
$HADOOP_HOME/bin/hadoop jar $HADOOP_HOME/share/hadoop/common/hadoop-lzo-0.mmon/hadoop-lzo-0.4.21-SNAPSHOT.jar com.hadoop.compression.lzo.DistributeddLzoIndexer hdfs://hd1:9000/user/hive/warehouse/lzo5
7.查看索引生成情况
hdfs dfs -ls hdfs://hd1:9000/user/hive/warehouse/lzo5
8.再次查询sql,查看结果是1(正确)
select count(1) from lzo5;
(三)如何知道lzo index是否生效?
创建一个lzo文件,比hdfs的block size略大一点,分别在无索引和有索引两种场景下测试,看map数
- 无索引的map数是1,因为lzo无索引不可split,
- 有索引的map数是lzo文件大小 / block size 个, 因为lzo + index后支持split
(四)对比结果:
block size是128M,生成的lzo文件是370M
无索引和有索引的执行时间如下,有索引的查询略快一点:
无索引,map数1个
有索引的,map数3个(index后,支持split)
相关推荐
1. **配置Hadoop**:为了使用LZO,用户需要在Hadoop的配置文件中添加相应的设置,如启用对LZO的支持,并指定LZO库的路径。 2. **生成LZO压缩文件**:可以使用Hadoop的命令行工具,如`hadoop fs -put`和`hadoop fs -...
hadoop2 lzo 文件 ,编译好的64位 hadoop-lzo-0.4.20.jar 文件 ,在mac 系统下编译的,用法:解压后把hadoop-lzo-0.4.20.jar 放到你的hadoop 安装路径下的lib 下,把里面lib/Mac_OS_X-x86_64-64 下的所有文件 拷到 ...
hadoop2 lzo 文件 ,编译好的64位 hadoop-lzo-0.4.15.jar 文件 ,在mac 系统下编译的,用法:解压后把hadoop-lzo-0.4.15.jar 放到你的hadoop 安装路径下的lib 下,把里面lib/Mac_OS_X-x86_64-64 下的所有文件 拷到 ...
编写代码时,需要包含对应的头文件,例如`#include <lzo/lzo1x.h>`。 6. **跨平台移植**:LZO库设计得相当便携,支持多种操作系统和架构。移植到其他平台时,可能需要调整编译选项和链接器设置,确保所有依赖项都已...
6. **API和使用**:LZO库提供了一系列的API函数供开发者使用,例如`lzo1x压缩`和`lzo1x_decompress解压缩`,允许开发者将LZO压缩集成到他们的应用程序中。LZO库的使用通常包括初始化、压缩、解压缩和释放资源等步骤...
1. **压缩效率**:LZO算法以牺牲压缩比为代价,换取了极高的压缩和解压缩速度,这在资源有限的嵌入式系统中尤为重要。在UBIFS中,LZO可以快速压缩和解压缩数据,从而减小文件系统占用的存储空间,同时保持较高的读写...
1. 安装和配置:首先,下载hadoop-lzo-0.4.21-SNAPSHOT.jar,并将其复制到所有Hadoop节点的lib目录下,确保所有节点都能访问到。接着,需要在Hadoop的配置文件(如hadoop-site.xml)中配置相关的属性,如启用LZO压缩...
1. **获取LZO库:** 首先,你需要下载LZO库的源代码,如`lzo1x.c`和`lzo1x.h`,这是LZO的主要实现文件。 2. **项目设置:** 创建一个新的C或C++项目,将LZO源代码添加到项目中,确保编译器设置与LZO库的要求兼容。 3...
在给定的“图形图像压缩资料(LZO+LZSS+LZW)”压缩包中,包含了关于这三种压缩算法的代码、例子和文档,这对于学习和理解这些算法的实现原理极其有价值。通过研究这些资料,开发者可以更好地掌握如何在实际项目中...
LZO(Lempel-Ziv-Oberhumer)是一种数据压缩算法,由V. Lempel、A. Ziv和M. Oberhumer在1986年提出。这个算法以其快速、简单和低内存需求著称,尤其适用于嵌入式系统和实时应用。在"LZO-2.10.zip"这个压缩包中,我们...
1. 下载并解压hadoop-lzo-master.zip 2. 需要jdk1.6+(非mac),jdk1.7 3. 安装LZO-2.x库(上步) 4. 编译hadoop-lzo $>C_INCLUDE_PATH=/usr/local/include $>LIBRARY_PATH=/usr/local/lib $>参见下文先搭建maven...
1. **速度**:LZO的压缩和解压缩速度都非常快,它能在单个CPU核心上实现高效运行,不需要复杂的预处理或后处理步骤。 2. **内存效率**:LZO在内存使用方面相对节省,这使得它适合资源有限的环境,如嵌入式设备或...
1. `lib/` 目录:包含了Hadoop LZO的库文件,这些文件是Java编译的类库,用于Hadoop环境中的数据压缩和解压缩。 2. `src/` 目录:包含了源代码,开发者可以查看和修改源代码,以适应特定需求或修复潜在问题。 3. `...
编译后的hadoop-lzo源码,将hadoop-lzo-0.4.21-SNAPSHOT.jar放到hadoop的classpath下 如${HADOOP_HOME}/share/hadoop/common。hadoop才能正确支持lzo,免去编译的烦恼
1. **融入Hadoop源码**:首先,你需要获取Hadoop的源代码,然后将LZO的源代码整合进Hadoop项目。这通常涉及将LZO的Java代码添加到Hadoop的源代码树中,修改相应的配置文件,确保Hadoop知道如何处理LZO压缩的数据块。...