作者:过往记忆 | 新浪微博:左手牵右手TEL | 
可以转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明
博客地址:http://www.iteblog.com/
文章标题:《在Hive中使用Avro》
本文链接:http://www.iteblog.com/archives/1007
Hadoop、Hive、Hbase、Flume等QQ交流群:138615359(已满),请加入新群:149892483

本博客的微信公共帐号为:iteblog_hadoop,欢迎大家关注。
如果你觉得本文对你有帮助,不妨分享一次,你的每次支持,都是对我最大的鼓励

如果本文的内容对您的学习和工作有所帮助,不妨支付宝赞助(wyphao.2007@163.com)一下

  Avro(读音类似于[ævrə])是Hadoop的一个子项目,由Hadoop的创始人Doug Cutting牵头开发。Avro是一个数据序列化系统,设计用于支持大批量数据交换的应用。它的主要特点有:支持二进制序列化方式,可以便捷,快速地处理大量数据;动态语言友好,Avro提供的机制使动态语言可以方便地处理Avro数据。
  在Hive中,我们可以将数据使用Avro格式存储,本文以avro-1.7.1.jar为例,进行说明。

  如果需要在Hive中使用Avro,需要在$HIVE_HOME/lib目录下放入以下四个工具包:avro-1.7.1.jar、avro-tools-1.7.4.jar、 jackson-core-asl-1.8.8.jar、jackson-mapper-asl-1.8.8.jar。当然,你也可以把这几个包存在别的路径下面,但是你需要把这四个包放在CLASSPATH中。

  为了解析Avro格式的数据,我们可以在Hive建表的时候用下面语句:

01 hive> CREATE EXTERNAL TABLE tweets
02     > COMMENT "A table backed by Avro data with the
03     >        Avro schema embedded in the CREATE TABLE statement"
04     > ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.avro.AvroSerDe'
05     > STORED AS
06     > INPUTFORMAT  'org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat'
07     > OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.avro.AvroContainerOutputFormat'
08     > LOCATION '/user/wyp/examples/input/'
09     > TBLPROPERTIES (
10     >    'avro.schema.literal'='{
11     >        "type""record",
12     >        "name""Tweet",
13     >        "namespace""com.miguno.avro",
14     >        "fields": [
15     >            { "name":"username",  "type":"string"},
16     >            { "name":"tweet",     "type":"string"},
17     >            { "name":"timestamp""type":"long"}
18     >        ]
19     >   }'
20     > );
21 OK
22 Time taken: 0.076 seconds
23  
24 hive> describe tweets;                                                            
25 OK
26 username                string                  from deserializer  
27 tweet                   string                  from deserializer  
28 timestamp               bigint                  from deserializer

然后用Snappy压缩我们需要的数据,下面是压缩前我们的数据:

01 {
02    "username""miguno",
03    "tweet""Rock: Nerf paper, scissors is fine.",
04    "timestamp"1366150681
05 },
06 {
07    "username""BlizzardCS",
08    "tweet""Works as intended.  Terran is IMBA.",
09    "timestamp"1366154481
10 },
11 {
12    "username""DarkTemplar",
13    "tweet""From the shadows I come!",
14    "timestamp"1366154681
15 },
16 {
17    "username""VoidRay",
18    "tweet""Prismatic core online!",
19    "timestamp"1366160000
20 }

压缩完的数据假如存放在/home/wyp/twitter.avsc文件中,我们将这个数据复制到HDFS中的/user/wyp/examples/input/目录下:

1 hadoop fs -put /home/wyp/twitter.avro  /user/wyp/examples/input/

然后我们就可以在Hive中使用了:

1 hive> select * from tweets limit 5;;
2 OK
3 miguno  Rock: Nerf paper, scissors is fine. 1366150681
4 BlizzardCS  Works as intended.  Terran is IMBA. 1366154481
5 DarkTemplar From the shadows I come!    1366154681
6 VoidRay Prismatic core online!  1366160000
7 Time taken: 0.495 seconds, Fetched: 4 row(s)

当然,我们也可以将avro.schema.literal中的

01 {
02    "type""record",
03    "name""Tweet",
04    "namespace""com.miguno.avro",
05    "fields": [
06       {
07          "name""username",
08          "type""string"
09       },
10       {
11          "name""tweet",
12          "type""string"
13       },
14       {
15          "name""timestamp",
16          "type""long"
17       }
18    ]
19 }

存放在一个文件中,比如:twitter.avsc,然后上面的建表语句就可以修改为:

01 CREATE EXTERNAL TABLE tweets
02     COMMENT "A table backed by Avro data with the Avro schema stored in HDFS"
03     ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.avro.AvroSerDe'
04     STORED AS
05     INPUTFORMAT  'org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat'
06     OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.avro.AvroContainerOutputFormat'
07     LOCATION '/user/wyp/examples/input/'
08     TBLPROPERTIES (
09         'avro.schema.url'='hdfs:///user/wyp/examples/schema/twitter.avsc'
10     );

效果和上面的一样。本博客文章除特别声明,全部都是原创!

尊重原创,转载请注明: 转载自过往记忆(http://www.iteblog.com/)
本文链接地址: 《在Hive中使用Avro》(http://www.iteblog.com/archives/1007)

转自http://www.iteblog.com/archives/1007

在Hive中使用Avro的更多相关文章

  1. hive中数据存储格式对比:textfile,parquent,orc,thrift,avro,protubuf

    这篇文章我会从业务中关注的: 1. 存储大小 2.查询效率 3.是否支持表结构变更既数据版本变迁 5.能否避免分隔符问题 6.优势和劣势总结 几方面完整的介绍下hive中数据以下几种数据格式:text ...

  2. Hive中的HiveServer2、Beeline及数据的压缩和存储

    1.使用HiveServer2及Beeline HiveServer2的作用:将hive变成一种server服务对外开放,多个客户端可以连接. 启动namenode.datanode.resource ...

  3. SparkSQL读取Hive中的数据

    由于我Spark采用的是Cloudera公司的CDH,并且安装的时候是在线自动安装和部署的集群.最近在学习SparkSQL,看到SparkSQL on HIVE.下面主要是介绍一下如何通过SparkS ...

  4. hive中rcfile格式(收藏文)

    首先声明,此文是属于纯粹收藏文,感觉讲的很不错. 本文介绍了Facebook公司数据分析系统中的RCFile存储结构,该结构集行存储和列存储的优点于一身,在MapReduce环境下的大规模数据分析中扮 ...

  5. hive中分析函数window子句

    hive中有些分析函数功能确实很强大,在和sum,max等聚合函数结合起来能实现不少功能. 直接上代码演示吧 原始数据 channel1 2016-11-10 1 channel1 2016-11-1 ...

  6. hive中的一种假NULL现象

    使用hive时,我们偶尔会遇到这样的问题,当你将结果输出到屏幕时,查出的数据往往显示为null,但是当你将结果输出到文本时,却显示为空(即未填充),这是为什么呢? 在hive中有一种假NULL,它看起 ...

  7. hive中导入json格式的数据(hive分区表)

    hive中建立外部分区表,外部数据格式是json的如何导入呢? json格式的数据表不必含有分区字段,只需要在hdfs目录结构中体现出分区就可以了 This is all according to t ...

  8. sqoop将关系型数据库的表导入hive中

    1.sqoop 将关系型数据库的数据导入hive的参数说明:

  9. hive中order by,sort by, distribute by, cluster by作用以及用法

    1. order by     Hive中的order by跟传统的sql语言中的order by作用是一样的,会对查询的结果做一次全局排序,所以说,只有hive的sql中制定了order by所有的 ...

随机推荐

  1. JAVA发送http GET/POST请求的两种方式+JAVA http 请求手动配置代理

    java发送http get请求,有两种方式. 第一种用URLConnection: public static String get(String url) throws IOException { ...

  2. Line---CodeForces 7C(扩展欧几里得算法)

    题目链接:http://codeforces.com/problemset/problem/7/C AX+BY=C已知 A B C 求 X Y: #include <iostream> # ...

  3. selectedIndex返回被选中的option的index.

    / <label for="city">城市</label> <select id="city" name="schoo ...

  4. node.js---sails项目开发(6)--- 实现分页功能

    只需要添加一个文件即可  api/blueprints/find.js     代码如下 /** * Module dependencies */ var util = require('util') ...

  5. Rest Framework源码流程解析

    目录: 一 整体流程 二 具体流程 一 请求进来之后,都要先执行dispatch方法,dispatch方法根据请求方式的不同触发get/post/put/delete等方法 注意,APIView中的d ...

  6. python数据可视化、数据挖掘、机器学习、深度学习 常用库、IDE等

    一.可视化方法 条形图 饼图 箱线图(箱型图) 气泡图 直方图 核密度估计(KDE)图 线面图 网络图 散点图 树状图 小提琴图 方形图 三维图 二.交互式工具 Ipython.Ipython not ...

  7. Php ArrayIterator的几个常用方法

    搜索商低..从php.net找到 ,自己翻译一下 总结在一起   rewind()    指针回到初始位置 valid()        判断数组当前指针下是否有元素 key()        数组键 ...

  8. Spring mvc 具体RequestMapping 参数含义

    今天遇到碰到有人问我个问题,RequestMapping中参数的意义,哎呀傻眼了,果断查资料,这下知道了. http://blog.csdn.net/kobejayandy/article/detai ...

  9. C# 并行 反射 去掉实体属性多余空格

          有时会遇到很多不合理的数据附件到实体后有大量空格需要处理,这里提供一个方法,通过并行反射的方式高效清理空格.   Code: //清除字符串空格 public static object ...

  10. LLServer--》对LevelDB的应用

    http://code.google.com/p/llserver/ 查看libs path的路径 LD_DEBUG=libs /usr/bin/llserver -h