作者:过往记忆 | 新浪微博:左手牵右手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' |
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/' |
10 |
> 'avro.schema.literal'='{ |
13 |
> "namespace": "com.miguno.avro", |
15 |
> { "name":"username", "type":"string"}, |
16 |
> { "name":"tweet", "type":"string"}, |
17 |
> { "name":"timestamp", "type":"long"} |
22 |
Time taken: 0.076 seconds |
24 |
hive> describe tweets; |
26 |
username string from deserializer |
27 |
tweet string from deserializer |
28 |
timestamp bigint from deserializer |
然后用Snappy压缩我们需要的数据,下面是压缩前我们的数据:
03 |
"tweet": "Rock: Nerf paper, scissors is fine.", |
04 |
"timestamp": 1366150681 |
07 |
"username": "BlizzardCS", |
08 |
"tweet": "Works as intended. Terran is IMBA.", |
09 |
"timestamp": 1366154481 |
12 |
"username": "DarkTemplar", |
13 |
"tweet": "From the shadows I come!", |
14 |
"timestamp": 1366154681 |
17 |
"username": "VoidRay", |
18 |
"tweet": "Prismatic core online!", |
19 |
"timestamp": 1366160000 |
压缩完的数据假如存放在/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;; |
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中的
04 |
"namespace": "com.miguno.avro", |
存放在一个文件中,比如: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' |
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/' |
效果和上面的一样。本博客文章除特别声明,全部都是原创!
尊重原创,转载请注明: 转载自过往记忆(http://www.iteblog.com/)
本文链接地址: 《在Hive中使用Avro》(http://www.iteblog.com/archives/1007)
转自http://www.iteblog.com/archives/1007
- hive中数据存储格式对比:textfile,parquent,orc,thrift,avro,protubuf
这篇文章我会从业务中关注的: 1. 存储大小 2.查询效率 3.是否支持表结构变更既数据版本变迁 5.能否避免分隔符问题 6.优势和劣势总结 几方面完整的介绍下hive中数据以下几种数据格式:text ...
- Hive中的HiveServer2、Beeline及数据的压缩和存储
1.使用HiveServer2及Beeline HiveServer2的作用:将hive变成一种server服务对外开放,多个客户端可以连接. 启动namenode.datanode.resource ...
- SparkSQL读取Hive中的数据
由于我Spark采用的是Cloudera公司的CDH,并且安装的时候是在线自动安装和部署的集群.最近在学习SparkSQL,看到SparkSQL on HIVE.下面主要是介绍一下如何通过SparkS ...
- hive中rcfile格式(收藏文)
首先声明,此文是属于纯粹收藏文,感觉讲的很不错. 本文介绍了Facebook公司数据分析系统中的RCFile存储结构,该结构集行存储和列存储的优点于一身,在MapReduce环境下的大规模数据分析中扮 ...
- hive中分析函数window子句
hive中有些分析函数功能确实很强大,在和sum,max等聚合函数结合起来能实现不少功能. 直接上代码演示吧 原始数据 channel1 2016-11-10 1 channel1 2016-11-1 ...
- hive中的一种假NULL现象
使用hive时,我们偶尔会遇到这样的问题,当你将结果输出到屏幕时,查出的数据往往显示为null,但是当你将结果输出到文本时,却显示为空(即未填充),这是为什么呢? 在hive中有一种假NULL,它看起 ...
- hive中导入json格式的数据(hive分区表)
hive中建立外部分区表,外部数据格式是json的如何导入呢? json格式的数据表不必含有分区字段,只需要在hdfs目录结构中体现出分区就可以了 This is all according to t ...
- sqoop将关系型数据库的表导入hive中
1.sqoop 将关系型数据库的数据导入hive的参数说明:
- hive中order by,sort by, distribute by, cluster by作用以及用法
1. order by Hive中的order by跟传统的sql语言中的order by作用是一样的,会对查询的结果做一次全局排序,所以说,只有hive的sql中制定了order by所有的 ...
随机推荐
- Redis数据存储优化机制(转)
原文:Redis学习笔记4--Redis数据存储优化机制 1.zipmap优化hash: 前面谈到将一个对象存储在hash类型中会占用更少的内存,并且可以更方便的存取整个对象.省内存的原因是新建一个h ...
- Leetcode 之 Keys Keyboard
1. 2 Keys Keyboard 先把dp的最小不走都设置为无穷大(Integer.MAX_VALUE),初始化条件:dp[0] = dp[1] = 0,状态转移方程为dp[i] = Math.m ...
- 浅谈 JS 内存泄露方式与避免方法(二)
Concept WHAT : 内存泄露是指一块被分配的内存既不能使用,又不能回收,直到浏览器进程结束.正常情况下,垃圾回收器在DOM元素和event处理器不被引用或访问的时候回收它们.但是,IE的早些 ...
- C#驱动级模拟按键操作
C#驱动级模拟按键操作 2013-09-26 03:17 ·AB叔 447 3 <- 点击左侧的数字“攒”一个吧 昨天遇到一个程序自动输入财付通密码的任务. 因为财付通密码控件是有安全保护的,所 ...
- uva 11752 The Super Powers (数论+枚举)
题意:找出1~2^64-1中 能写成至少两个数的幂形式的数,再按顺序输出 分析:只有幂是合数的数才是符合要求的.而幂不会超过64,预处理出64以内的合数. 因为最小的合数是4,所以枚举的上限是2的16 ...
- SqlHelper简单实现(通过Expression和反射)5.Lambda表达式解析类
这个ExpressionHelper类,是整个SqlHelper中,最核心的一个类,主要功能就是将Lambda表达式转换为Sql语句.同时这个转换过程比较复杂,所以下面详细讲解一下思路和这个类的作用. ...
- js 性能优化 篇一
JS性能优化 摘自:http://www.china125.com/design/js/3631.htm 首先,由于JS是一种解释型语言,执行速度要比编译型语言慢得多.(注:,Chrome是第一款内 ...
- dbml 注意事项
1,修改dbml中的字段,需要修改2个地方
- Tomcat在windows服务器下,将tomcat控制台日志记录到日志文件中
Tomcat在windows服务器下,将tomcat控制台日志记录到日志文件中 在Linux系统中,Tomcat 启动后默认将很多信息都写入到 catalina.out 文件中,我们可以通过tail ...
- jQuery单选框跟复选框美化
在线演示 本地下载