Hive使用ORC格式存储离线表

在大数据时代,列式存储变得越来越流行了,当然并不是说行式存储就没落了,只是针对的场景不同,行式存储的代表就是我们大多数时候经常用的数据库,比较适合数据量小,字段数目少,查询性能高的场景,列式存储主要针对大多数互联网公司中的业务字段数目多,数据量规模大,离线分析多的场景,这时候避免大量无用IO扫描,往往提高离线数据分析的性能,而且列式存储具有更高的压缩比,能够节省一定的磁盘IO和网络IO传输。 基础环境如下: Apache Hadoop2.7.1 Apache Hbase0.98.12 Apache Hive1.2.1 先看下列式存储的两个代表框架: Apache Parquet比较适合存储嵌套类型的数据,如json,avro,probuf,thrift等 Apache ORC是对RC格式的增强,支持大多数hive支持的数据类型,主要在压缩和查询层面做了优化。 具体请参考这篇文章:http://wenda.chinahadoop.cn/question/333

Java代码

  1. 在hive中的文件格式主要如下几种:
  2. textfile:默认的文本方式
  3. Sequencefile:二进制格式
  4. rcfile:面向列的二进制格式
  5. orc:rcfile的增强版本,列式存储
  6. parquet:列式存储,对嵌套类型数据支持较好
  7. hive文件支持压缩方式:
  8. 这个与底层的hadoop有关,hadoop支持的压缩,hive都支持,主要有:
  9. gzip,bizp,snappy,lzo

文件格式可以与压缩类似任意组合,从而达到比较的压缩比。 下面看下具体以orc为例子的场景实战: 需求: 将Hbase的表的数据,加载到Hive中一份,用来离线分析使用。 看下几个步骤: (1)集成Hive+Hbase,使得Hive可以关联查询Hbase表的数据,但需要注意的是,hbase表中的每个字段都有时间戳版本,而进行hive映射时是没办法 指定的timestamp的,在hive1.x之后可虽然可以指定,但是还是有问题的,不建议使用,如果想要标识这一个rowkey的最后修改或者更新时间,可以单独添加一个字段到hbase表中, 然后就可以使用Hive映射了。 关于hive+hbase集成,请参考这篇文章:http://qindongliang.iteye.com/blog/2101094 (2)使用hive建立一个外部表,关联hbase,sql文件如下:

Sql代码

  1. drop table if exists etldb_hbase;
  2. CREATE EXTERNAL TABLE etldb_hbase(rowkey string,
  3. cnum string,
  4. conn string,
  5. cntype string,
  6. cct string,
  7. ctitle string,
  8. curl string,
  9. murl string,
  10. mcat1 string,
  11. mcat2 string,
  12. mcat3 string,
  13. mtitle string,
  14. mconn string,
  15. mcourtid string,
  16. mdel string,
  17. ctime string
  18. )
  19. STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
  20. WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,
  21. content:casenum,
  22. content:conn,
  23. content:contentType,
  24. content:contentabstract,
  25. content:title,
  26. content:url,
  27. meta:websiteType,
  28. meta:documentType,
  29. meta:spiderTypeFirst,
  30. meta:spiderTypeSecond,
  31. meta:title,
  32. meta:content,
  33. meta:hearOrganization,
  34. meta:isdelete,
  35. content:createTime
  36. ")
  37. TBLPROPERTIES ("hbase.table.name" = "ETLDB");

执行sql文件的hive命令:hive -f xxx.sql 执行sql字符串的hive命令: hive -e " select * from person " (3)由于orc格式,无法直接从text加载到hive表中,所以需要加入一个中间临时表,用于中转数据,先将 text数据导入一个文件格式weitextfile的表,然后再把这个表的数据直接导入orc的表,当然现在我们的数据源 在hbase中,所以,先建立hive关联hbase的表,然后在建里一个orc的表,用来放数据,sql如下:

Sql代码

  1. drop table if exists etldb;
  2. CREATE TABLE etldb(rowkey string,
  3. cnum string,
  4. conn string,
  5. cntype string,
  6. cct string,
  7. ctitle string,
  8. curl string,
  9. murl string,
  10. mcat1 string,
  11. mcat2 string,
  12. mcat3 string,
  13. mtitle string,
  14. mconn string,
  15. mcourtid string,
  16. mdel string,
  17. ctime string
  18. )
  19. stored as orc
  20. --stored as textfile;
  21. tblproperties ("orc.compress"="SNAPPY");
  22. --从临时表,加载数据到orc中
  23. insert into table etldb select * from etldb_hbase;

(4)加载完成后,就可以离线分析这个表了,用上orc+snappy的组合,查询时比直接 hive关联hbase表查询性能要高一点,当然缺点是数据与数据源hbase里的数据不同步,需要定时增量或者全量,用于离线分析。

原文发布于微信公众号 - 我是攻城师(woshigcs)

原文发表时间:2016-02-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏恰童鞋骚年

Hadoop学习笔记—22.Hadoop2.x环境搭建与配置

自从2015年花了2个多月时间把Hadoop1.x的学习教程学习了一遍,对Hadoop这个神奇的小象有了一个初步的了解,还对每次学习的内容进行了总结,也形成了我...

26310
来自专栏Hadoop实操

HDFS部署最佳实践

56940
来自专栏Hadoop实操

如何将CDH从企业版降级为免费版

在使用CDH企业版时,当License过期后,在CM顶部总是会有一个红色的banner条显示License已过期。我们有时会觉得它影响美观,想要考虑将CDH从企...

85150
来自专栏牛肉圆粉不加葱

ResourceManager剖析

10420
来自专栏Hadoop实操

如何在CDSW上创建Git工程

在CDSW上有多中创建工程的方式(创建一个空的工程、模板工程、本地上传工程或者是创建git工程),前面的都比较好理解,那如何在CDSW上创建Git工程呢?本篇文...

36830
来自专栏搜云库

Hadoop-2.7.4 集群快速搭建

Hadoop简介 Hadoop是一个由Apache基金会所开发的分布式系统基础架构。 用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力...

33570
来自专栏祝威廉

使用Spark SQL构建批处理程序

在批处理模式下,所有的数据源和输出都各自有一个固定的模块(使用了Spark的Datasource API),然后对模块做配置即可,无需使用不同的模块。

12330
来自专栏Hadoop实操

CDSW1.3的新功能

前两天Fayson介绍过《CDH5.14和CM5.14的新功能》,与CDH5.14同时发布的还有CDSW1.3,以下我们具体看看CDSW1.3的新功能。

44360
来自专栏Hadoop实操

如何在CDH集群上部署Python3运行环境及运行Python作业

当前有很多工具辅助大数据分析,但最受欢迎的就是Python。Python简单易用,语言有着直观的语法并且提供强大的科学计算和集群学习库。借着最近人工智能,深度学...

90140
来自专栏编程坑太多

跟我一起学docker(16)--单节点mesos集群

18630

扫码关注云+社区

领取腾讯云代金券