`
longzhun
  • 浏览: 372153 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

hadoop,hive启用lzo压缩和创建lzo索引

 
阅读更多

启用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

  1. <property> 
  2.   <name>io.compression.codecs</name> 
  3.   <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> 
  4. </property> 
  5. <property> 
  6.   <name>io.compression.codec.lzo.class</name> 
  7.   <value>com.hadoop.compression.lzo.LzoCodec</value> 
  8. </property> 

使用lzo,lzop,gzip,bzip2压缩作为io压缩的编解码器,并指定lzo的类

mapred-site.xml

  1. <property> 
  2.   <name>mapred.compress.map.output</name> 
  3.   <value>true</value> 
  4. </property> 
  5. <property> 
  6.   <name>mapred.map.output.compression.codec</name> 
  7.   <value>com.hadoop.compression.lzo.LzoCodec</value> 
  8. </property> 
  9. <property> 
  10.   <name>mapred.child.java.opts</name> 
  11.   <value>-Djava.library.path=/opt/hadoopgpl/native/Linux-amd64-64</value> 
  12. </property> 

map结果采用压缩输出,可以降低网络带宽的使用,并指定map输出所使用的lzo的类。以及指定编解码器所在位置。

创建lzo索引:

  1. hadoop jar /opt/hadoopgpl/lib/hadoop-lzo.jar com.hadoop.compression.lzo.LzoIndexer /data/rawlog/your_log_file.lzo

在streaming中使用lzo:

  1. hadoop jar /usr/share/hadoop/contrib/streaming/hadoop-streaming-1.0.3.jar \ 
  2. -file map.py \ 
  3. -file red.py \ 
  4. -mapper map.py \ 
  5. -reducer red.py \ 
  6. -inputformat com.hadoop.mapred.DeprecatedLzoTextInputFormat \ 
  7. -input /data/rawlog/test/20130325 -output /tmp/test_20130325

----------------------------------------------------------

以及在hive中指定压缩编解码器:

hadoop集群启用了压缩,就需要在Hive建表的时候指定压缩时所使用的编解码器,否则Hive无法正确读取数据。

Gzip和Bzip2由于是hadoop默认支持的,所以无需指定特殊的编解码器,只要指定Text类型即可。

  1. CREATE EXTERNAL TABLE adpv_20130325( 
  2.   stat_date string,  
  3.   stat_hour string,  
  4.   ip string,  
  5.   logdate string,  
  6.   uid string,  
  7.   ver string,  
  8.   pid string,  
  9.   chid string,  
  10.   json string,  
  11.   country string,  
  12.   province string,  
  13.   city string,  
  14.   isp string) 
  15. ROW FORMAT DELIMITED  
  16.   FIELDS TERMINATED BY '\t'  
  17. STORED AS TEXTFILE  
  18. LOCATION 
  19.   'hdfs://hadoopmaster:9000/data/dw/adpv/20130325' 

而LZO是外挂的第三方库,所以要指定输入和输出的编解码器。

  1. CREATE EXTERNAL TABLE adpv_20130325( 
  2.   stat_date string,  
  3.   stat_hour string,  
  4.   ip string,  
  5.   logdate string,  
  6.   uid string,  
  7.   ver string,  
  8.   pid string,  
  9.   chid string,  
  10.   json string,  
  11.   country string,  
  12.   province string,  
  13.   city string,  
  14.   isp string) 
  15. ROW FORMAT DELIMITED  
  16.   FIELDS TERMINATED BY '\t'  
  17. STORED AS INPUTFORMAT  
  18.   'com.hadoop.mapred.DeprecatedLzoTextInputFormat'  
  19. OUTPUTFORMAT  
  20.   'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' 
  21. LOCATION 
  22.   'hdfs://hadoopmaster:9000/data/dw/adpv/20130325' 

至于你的日志,就用lzop在本地压缩好了,直接丢到hdfs上就可以了。

另外,在做数据清洗的时候,假如源日志是lzo压缩的,输出的时候也希望使用lzo压缩。则在数据清洗的脚本中对hadoop的jobconf做一个指定。这样就可以做到,输入是lzo,输出也可以lzo。或者输入是text,输出是lzo。

  1. -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毅哥的压缩包.7z

    标题中的“hadoop毅哥的...总之,这个压缩包提供了一个学习和操作Hadoop 2.7.2以及LZO压缩的起点,对于熟悉Hadoop的分布式存储和处理,以及数据压缩有极大的帮助。无论是初学者还是经验丰富的开发者,都可以从中受益。

    深入浅出Hive企业级架构优化、Hive Sql优化、压缩和分布式缓存

    2. **索引优化**:虽然 Hive 不支持传统意义上的索引,但可以通过创建外部表和使用索引文件等方式来加速查询过程。 3. **表结构设计**:合理设计表结构对于提高查询性能至关重要。例如,使用合适的分桶策略可以减少...

    HIVE相关的jar包

    在大数据处理领域,Hive是一个基于Hadoop的数据仓库工具,它允许通过SQL-like查询语言(HQL)对存储在Hadoop分布式文件系统(HDFS)中的大量数据进行分析和处理。这个压缩包文件“HIVE相关的jar包”包含了不同版本的...

    hadoop中使用的hive包

    service.jar`(Hive服务端)、`libthrift.jar`(Thrift库,用于Hive的RPC通信)以及各种依赖库如Hadoop、Avro、Parquet、Lzo、Snappy等压缩库的jar包。 了解这些jar包的用途,可以帮助开发者更有效地使用Hive: 1....

    hadoop-lzo-lib

    编译环境: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!

    hadoop集群安装、配置、维护文档

    这包括安装LZO开发库,编译Hadoop的源代码以支持LZO,创建必要的自定义编解压器,以及在Hadoop的配置文件中启用LZO压缩。 4. **安装hive客户端.txt**: Hive是基于Hadoop的数据仓库工具,允许用户使用SQL查询HDFS...

    站在hadoop上看hive

    - **压缩技术**:采用高效的压缩算法,如BZ2、LZO等,对原始日志或中间结果进行压缩,减少存储空间和网络传输量。 - **数据格式**:使用更高效的数据格式,如SEQUENCEFILE、RCFILE等,这些格式支持列式存储,有利于...

    hive优化(ppt)

    在IT领域,特别是大数据处理与分析中,Hive作为一个数据仓库工具,被广泛应用于基于Hadoop的数据查询和分析。Hive通过将SQL语句转换成MapReduce任务来处理大规模数据集,大大简化了数据分析的过程。然而,由于其底层...

    开发高效的hive程序

    1. SQL编写技巧:避免使用全表扫描,尽量使用分区和索引来定位数据;使用JOIN时,选择正确的JOIN类型(如LEFT JOIN、RIGHT JOIN、INNER JOIN),并确保大表在JOIN操作中位于右侧。 2. 数据倾斜处理:数据倾斜会导致...

    elephant-bird-core-4.6rc1.zip

    大象鸟(Elephant Bird)是一个由Twitter开源的项目,主要用于处理LZO压缩的数据和协议缓冲区相关的Hadoop、Pig、Hive以及HBase的代码。这个项目的核心在于提供了一套高效的工具,使得在大数据处理框架中对LZO压缩...

    hadoop-0.20.0.tar

    Hadoop是大数据处理领域的重要工具,它以Apache开源许可证的形式发布,为全球的企业和个人提供了强大的分布式计算能力。这个“hadoop-0.20.0.tar”文件是Hadoop的一个早期版本,它包含了运行和开发Hadoop应用所需的...

    04-Hive安装部署及运维使用.pdf

    例如,在创建表时可以指定数据存储的格式和压缩编解码器,如LZO压缩,从而提升查询效率和存储性能。Hive的配置命令通常在Hive启动前通过set语句设置。 Hive的运维使用也包含了对集群的监控和管理。在Hive中可以配置...

    hive常见的优化方案ppt

    可以开启Hive的中间数据和最终数据压缩,使用`hive.exec.compress.output=true`和`hive.exec.compress.intermediate=true`,并选择合适的压缩编码器如LZO、GZIP或Snappy。 2. **处理数据倾斜**:数据倾斜发生在某些...

    hadoop集群安装脚本

    自动化安装多系统多软件测试版可能意味着这个脚本不仅能安装Hadoop和Zookeeper,还可能涵盖了其他相关的大数据组件,如Hive、Spark、HBase等,提供了一站式的安装解决方案。这样的脚本大大减少了手动配置的时间,...

    第6章:Hive性能优化及Hive3新特性1

    虽然Hive不支持传统数据库中的B树索引,但可以通过创建虚拟列(Bucketing)和Skewed Join优化来模拟索引效果。虚拟列可根据特定列值将数据分配到不同的桶中,而Skewed Join则处理数据倾斜问题,通过预处理将倾斜...

    hive常用优化方法大全共2页.pdf.zip

    11. **缓存优化**:Hive的BlockCache和LZO压缩可以提高读取速度。此外,使用Hadoop的TFile或SequenceFile格式,它们有内置的缓存机制。 12. **资源调度优化**:配置Hadoop的ResourceManager以优化内存和CPU分配,...

    hive调优总结文档-hive tuning ppt

    - **压缩**:启用数据压缩,如Snappy、Gzip或LZO,可以减少存储空间并提高读取速度。 - **数据倾斜**:注意数据分布的均匀性,避免某些分区或桶中的数据量远大于其他。 3. **查询优化**: - **JOIN优化**: - ...

    hive参数优化文档

    - 使用压缩格式(如Snappy、LZO)减少磁盘I/O。 - 应用高效的文件格式(如Parquet、ORC),这些格式支持列式存储,有利于提高查询性能。 3. **存储布局**: - 数据倾斜处理:确保数据在各Reducer间均匀分布,...

    Hive编程指南

    3. **索引**:虽然Hive默认不支持索引,但可以通过创建索引表的方式实现索引的功能。 4. **UDF/UDAF/UDTF**:Hive支持用户自定义函数(UDF)、聚合函数(UDAF)以及表生成函数(UDTF),可以扩展Hive的功能。 ### 性能...

Global site tag (gtag.js) - Google Analytics