启用lzo压缩对于小规模集群还是很有用的,压缩比率大概能达到原始日志大小的1/3。同时解压缩速度也比较快,Hadoop原生是支持gzip和bzip2压缩的,这两种压缩虽然压缩比率比lzo更大,但是在做map reduce解压缩的时候,慢的不能忍,所以通常不会用gzip或者bzip2。相同数据量,gzip的mr速度大概是lzo的1.5-2倍,而bzip2是lzo的3-4倍。
不过lzo不比gzip和bzip2是linux系统原生支持的,需要下载软件包并安装。这里至少涉及三个软件包。lzo,lzop和hadoop-gpl-packaging。我们是使用hadoop-gpl-packaging,或者也可以使用一个叫kevinweil的包。
gpl-packaging的作用主要是对压缩的lzo文件创建索引,否则的话,无论你的压缩文件是否大于HDFS的block大小,都只会按默认启动2个map操作,这是我们不愿意看到的事情。
当然,要启用lzo,以下这些操作每个节点都是需要做的。
下载编译lzo和lzop,这个就configure,make,make install就行了。
然后 http://code.google.com/p/hadoop-gpl-packing/downloads/list 下载最新的rpm包,并安装,安装完成会创建/opt/hadoopgpl文件夹。
接下来是具体步骤:
1. 将/opt/hadoopgpl/lib下的所有文件复制到/usr/lib和/usr/lib64。
2. 将/opt/hadoopgpl/native下的所有文件复制到/usr/share/hadoop/native,如果是tar包安装的hadoop,就复制到$HADOOP_HOME/lib下。
理论上是不需要这步的,但是在使用过程中发现省略了会在mr的过程中报错,通常就是报找不到lzo的jar包。
然后开始设置hadoop:
core-site.xml
- <property>
- <name>io.compression.codecs</name>
- <value>org.apache.hadoop.io.compress.DefaultCodec,com.hadoop.compression.lzo.LzoCodec,com.hadoop.compression.lzo.LzopCodec,org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.BZip2Codec</value>
- </property>
- <property>
- <name>io.compression.codec.lzo.class</name>
- <value>com.hadoop.compression.lzo.LzoCodec</value>
- </property>
使用lzo,lzop,gzip,bzip2压缩作为io压缩的编解码器,并指定lzo的类
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.java.opts</name>
- <value>-Djava.library.path=/opt/hadoopgpl/native/Linux-amd64-64</value>
- </property>
map结果采用压缩输出,可以降低网络带宽的使用,并指定map输出所使用的lzo的类。以及指定编解码器所在位置。
创建lzo索引:
- hadoop jar /opt/hadoopgpl/lib/hadoop-lzo.jar com.hadoop.compression.lzo.LzoIndexer /data/rawlog/your_log_file.lzo
在streaming中使用lzo:
- hadoop jar /usr/share/hadoop/contrib/streaming/hadoop-streaming-1.0.3.jar \
- -file map.py \
- -file red.py \
- -mapper map.py \
- -reducer red.py \
- -inputformat com.hadoop.mapred.DeprecatedLzoTextInputFormat \
- -input /data/rawlog/test/20130325 -output /tmp/test_20130325
----------------------------------------------------------
以及在hive中指定压缩编解码器:
hadoop集群启用了压缩,就需要在Hive建表的时候指定压缩时所使用的编解码器,否则Hive无法正确读取数据。
Gzip和Bzip2由于是hadoop默认支持的,所以无需指定特殊的编解码器,只要指定Text类型即可。
- CREATE EXTERNAL TABLE adpv_20130325(
- stat_date string,
- stat_hour string,
- ip string,
- logdate string,
- uid string,
- ver string,
- pid string,
- chid string,
- json string,
- country string,
- province string,
- city string,
- isp string)
- ROW FORMAT DELIMITED
- FIELDS TERMINATED BY '\t'
- STORED AS TEXTFILE
- LOCATION
- 'hdfs://hadoopmaster:9000/data/dw/adpv/20130325'
而LZO是外挂的第三方库,所以要指定输入和输出的编解码器。
- CREATE EXTERNAL TABLE adpv_20130325(
- stat_date string,
- stat_hour string,
- ip string,
- logdate string,
- uid string,
- ver string,
- pid string,
- chid string,
- json string,
- country string,
- province string,
- city string,
- isp string)
- ROW FORMAT DELIMITED
- FIELDS TERMINATED BY '\t'
- STORED AS INPUTFORMAT
- 'com.hadoop.mapred.DeprecatedLzoTextInputFormat'
- OUTPUTFORMAT
- 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
- LOCATION
- 'hdfs://hadoopmaster:9000/data/dw/adpv/20130325'
至于你的日志,就用lzop在本地压缩好了,直接丢到hdfs上就可以了。
另外,在做数据清洗的时候,假如源日志是lzo压缩的,输出的时候也希望使用lzo压缩。则在数据清洗的脚本中对hadoop的jobconf做一个指定。这样就可以做到,输入是lzo,输出也可以lzo。或者输入是text,输出是lzo。
- -inputformat com.hadoop.mapred.DeprecatedLzoTextInputFormat -jobconf mapred.output.compress=true -jobconf mapred.output.compression.codec=com.hadoop.compression.lzo.LzopCodec
最后对清洗过的日志做Indexer就可以了,这样无论是Hive还是做MR,都可以把大文件分成多个map来并行计算。
相关推荐
标题中的“hadoop毅哥的...总之,这个压缩包提供了一个学习和操作Hadoop 2.7.2以及LZO压缩的起点,对于熟悉Hadoop的分布式存储和处理,以及数据压缩有极大的帮助。无论是初学者还是经验丰富的开发者,都可以从中受益。
2. **索引优化**:虽然 Hive 不支持传统意义上的索引,但可以通过创建外部表和使用索引文件等方式来加速查询过程。 3. **表结构设计**:合理设计表结构对于提高查询性能至关重要。例如,使用合适的分桶策略可以减少...
在大数据处理领域,Hive是一个基于Hadoop的数据仓库工具,它允许通过SQL-like查询语言(HQL)对存储在Hadoop分布式文件系统(HDFS)中的大量数据进行分析和处理。这个压缩包文件“HIVE相关的jar包”包含了不同版本的...
service.jar`(Hive服务端)、`libthrift.jar`(Thrift库,用于Hive的RPC通信)以及各种依赖库如Hadoop、Avro、Parquet、Lzo、Snappy等压缩库的jar包。 了解这些jar包的用途,可以帮助开发者更有效地使用Hive: 1....
编译环境:centos 6.4 64bit、maven 3.3.9、jdk1.7.0_79、lzo-2.09;...解决:hive报错:Cannot create an instance of InputFormat class org.apache.hadoop ....... as specified in mapredwork!
这包括安装LZO开发库,编译Hadoop的源代码以支持LZO,创建必要的自定义编解压器,以及在Hadoop的配置文件中启用LZO压缩。 4. **安装hive客户端.txt**: Hive是基于Hadoop的数据仓库工具,允许用户使用SQL查询HDFS...
- **压缩技术**:采用高效的压缩算法,如BZ2、LZO等,对原始日志或中间结果进行压缩,减少存储空间和网络传输量。 - **数据格式**:使用更高效的数据格式,如SEQUENCEFILE、RCFILE等,这些格式支持列式存储,有利于...
在IT领域,特别是大数据处理与分析中,Hive作为一个数据仓库工具,被广泛应用于基于Hadoop的数据查询和分析。Hive通过将SQL语句转换成MapReduce任务来处理大规模数据集,大大简化了数据分析的过程。然而,由于其底层...
1. SQL编写技巧:避免使用全表扫描,尽量使用分区和索引来定位数据;使用JOIN时,选择正确的JOIN类型(如LEFT JOIN、RIGHT JOIN、INNER JOIN),并确保大表在JOIN操作中位于右侧。 2. 数据倾斜处理:数据倾斜会导致...
大象鸟(Elephant Bird)是一个由Twitter开源的项目,主要用于处理LZO压缩的数据和协议缓冲区相关的Hadoop、Pig、Hive以及HBase的代码。这个项目的核心在于提供了一套高效的工具,使得在大数据处理框架中对LZO压缩...
Hadoop是大数据处理领域的重要工具,它以Apache开源许可证的形式发布,为全球的企业和个人提供了强大的分布式计算能力。这个“hadoop-0.20.0.tar”文件是Hadoop的一个早期版本,它包含了运行和开发Hadoop应用所需的...
例如,在创建表时可以指定数据存储的格式和压缩编解码器,如LZO压缩,从而提升查询效率和存储性能。Hive的配置命令通常在Hive启动前通过set语句设置。 Hive的运维使用也包含了对集群的监控和管理。在Hive中可以配置...
可以开启Hive的中间数据和最终数据压缩,使用`hive.exec.compress.output=true`和`hive.exec.compress.intermediate=true`,并选择合适的压缩编码器如LZO、GZIP或Snappy。 2. **处理数据倾斜**:数据倾斜发生在某些...
自动化安装多系统多软件测试版可能意味着这个脚本不仅能安装Hadoop和Zookeeper,还可能涵盖了其他相关的大数据组件,如Hive、Spark、HBase等,提供了一站式的安装解决方案。这样的脚本大大减少了手动配置的时间,...
虽然Hive不支持传统数据库中的B树索引,但可以通过创建虚拟列(Bucketing)和Skewed Join优化来模拟索引效果。虚拟列可根据特定列值将数据分配到不同的桶中,而Skewed Join则处理数据倾斜问题,通过预处理将倾斜...
11. **缓存优化**:Hive的BlockCache和LZO压缩可以提高读取速度。此外,使用Hadoop的TFile或SequenceFile格式,它们有内置的缓存机制。 12. **资源调度优化**:配置Hadoop的ResourceManager以优化内存和CPU分配,...
- **压缩**:启用数据压缩,如Snappy、Gzip或LZO,可以减少存储空间并提高读取速度。 - **数据倾斜**:注意数据分布的均匀性,避免某些分区或桶中的数据量远大于其他。 3. **查询优化**: - **JOIN优化**: - ...
- 使用压缩格式(如Snappy、LZO)减少磁盘I/O。 - 应用高效的文件格式(如Parquet、ORC),这些格式支持列式存储,有利于提高查询性能。 3. **存储布局**: - 数据倾斜处理:确保数据在各Reducer间均匀分布,...
3. **索引**:虽然Hive默认不支持索引,但可以通过创建索引表的方式实现索引的功能。 4. **UDF/UDAF/UDTF**:Hive支持用户自定义函数(UDF)、聚合函数(UDAF)以及表生成函数(UDTF),可以扩展Hive的功能。 ### 性能...