命中表的存储格式; ORC格式的使用
命中表的源文件存储格式有几种:
1、文本文件
创建表时未指定默认格式。导入数据时,会将数据文件直接复制到hdfs进行处理。源文件可以直接通过hadoop fs-cat查看
2、SEQUENCEFILE是Hadoop API提供的二进制文件,使用方便、可分离、可压缩。
SEQUENCEFILE 将数据以 <key, value> 的形式序列化成文件。序列化和反序列化是使用 Hadoop 的标准 Writable 接口实现的。 key 为空,value 用于存储实际值,从而避免了 map 阶段的排序过程。
三种压缩选项:NONE、RECORD、BLOCK。记录压缩率低。通常建议使用 BLOCK 压缩。使用时设置参数。
设置 hive.exec.compress.outputu003dtrue;
设置 io.seqfile.compression.typeu003d块; -- 无/记录/块
创建表 test2(str STRING) 存储为 SEQUENCEFILE;
3、RC文件
一种结合行存储和列存储的存储方法。首先,它将数据划分为行,以确保同一条记录在一个块上,避免读取一个记录需要读取多个块。其次,块数据列存储有利于数据压缩和快速列访问。
理论上查询效率高(但是hive官方说效果不明显,只节省10%的存储空间,所以不好用,不能用)。
RCFile结合了行存储快速查询和列存储节省空间的特点
1)同一行的数据位于同一个节点,所以元组重构的成本很低。
2)块内列存储,可以压缩列维度数据,跳过不必要的列读取。
在查询过程中,不关心的列在 IO 上被跳过。实际过程是在map阶段,还是把整块数据从远程拷贝到本地目录。它并不是直接跳过列,而是通过扫描每个行组的标题定义。
但是,整个 HDFS Block 级别的 header 并没有定义每列从哪个行组开始到哪个行组结束。因此,当读取所有列时,RCFile 的性能不如 SequenceFile。
4、ORC hive给出的新格式属于RCFILE的升级版。
5.当前Hive无法识别用户自定义格式的数据文件格式。实现输入格式和输出格式时,自定义输入输出格式。
参考代码:hive-0.8.1 src contrib src java org apache hadoop hive contrib fileformat Base64
见http://www.cnblogs.com/ggjucheng/archive/2013/01/03/2843318.html
-
1
-
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
-
10
-
11
-
12
-
13
-
14
-
15
-
16
-
17
-
18
-
19
zoz100027 20
-
21
-
22
-
23
-
24
-
25
注意:
只有 TEXTFILE 表可以直接加载数据。本地加载数据只需要使用TEXTFILE表,直接加载路径数据需要外部表。
另外,hive默认支持的压缩文件(hadoop默认支持的压缩格式)只能直接从TEXTFILE表中读取。其他格式不起作用。插入可以通过 TEXTFILE 表加载到其他表中。
也就是说,SequenceFile 和 RCFile 表不能直接加载数据。数据要先导入到textfile表中,再通过insert select从textfile表中导入到SequenceFile,RCFile表中。
SequenceFile和RCFile表的源文件不能直接查看,但是可以在hive中用select查看。 RCFile源文件可以用hive--service rcfilecat / XXXXXXXXXXXXXXXXXXXXXXX / 000000_0查看,但是格式不同,比较乱。
hive默认支持压缩文件格式,参考http://blog.csdn.net/longshenlmj/article/details/50550580
-
1
-
2
-
3
zoz100036 4
zoz100037 5
-
6
-
7
-
8
ORC格式
ORC是RCfile的升级版,性能有了很大的提升。
并且可以对数据进行压缩存储,压缩率类似于Lzo压缩,文本文件的压缩率可以达到70%的空间。而且读取性能非常高,可以实现高效的查询。
具体介绍https://cwiki.apache.org/confluence/display/Hive/Language Manual+ORC
TABLE 语句如下:
同时ORC表中的NULL由默认的N改为''。
-
1
-
2
-
3
-
4
-
5
-
6
-
7
一种方式
如果不存在则创建表 test_orc(
广告商_id 字符串,
ad_plan_id 字符串,
cnt BIGINT
) 由 (day string, type TINYINT COMMENT '0 as bid, 1 as win, 2 as ck', hour TINYINT) 分区
存储为兽人;
更改表测试_orc 设置 serdeproperties('serialization.null.format' u003d '');
//查看结果
蜂巢> 显示创建表测试_orc;
创建表 `test_orc`(
`advertiser_id`字符串,
`ad_plan_id`字符串,
`cnt`大整数)
由 (
`day`字符串,
`type`tinyint COMMENT '0 为出价,1 为中奖,2 为 ck',
`hour`小整数)
行格式分隔
NULL 定义为 ''
存储为输入格式
'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat'
输出格式
'org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat'
位置
'hdfs://namenode/hivedata/warehouse/pmp.db/test_orc'
TBL 属性 (
'last\modified\by'\u003d'pmp_bi',
'最后\修改\时间'\u003d'1465992624',
'瞬态_lastDdlTime'\u003d'1465992624')
-
1
-
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
zoz100057 10
-
11
-
12
-
13
-
14
-
15
-
16
-
17
-
18
-
19
-
20
-
21
zoz100069 22
-
23
-
24
-
25
-
26
-
27
-
28
-
29
zoz100077 30
-
31
-
32
方式二
删除表测试_orc;
如果不存在则创建表 test_orc(
广告商_id 字符串,
ad_plan_id 字符串,
cnt BIGINT
) 由 (day string, type TINYINT COMMENT '0 as bid, 1 as win, 2 as ck', hour TINYINT) 分区
行格式SERDE
'org.apache.hadoop.hive.ql.io.orc.OrcSerde'
带有 serdeproperties('serialization.null.format' u003d '')
存储为兽人;
//查看结果
蜂巢> 显示创建表测试_orc;
创建表 `test_orc`(
`advertiser_id`字符串,
`ad_plan_id`字符串,
`cnt`大整数)
由 (
`day`字符串,
`type`tinyint COMMENT '0 为出价,1 为中奖,2 为 ck',
`hour`小整数)
行格式分隔
NULL 定义为 ''
存储为输入格式
'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat'
输出格式
'org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat'
位置
'hdfs://namenode/hivedata/warehouse/pmp.db/test_orc'
TBL 属性 (
'瞬态_lastDdlTime'\u003d'1465992726')
-
1
-
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
-
10
-
11
-
12
-
13
-
14
-
15
-
16
-
17
-
18
-
19
-
20
-
21
-
22
-
23
-
24
-
25
-
26
-
27
-
28
-
29
-
30
-
31
-
32
-
33
模式三
删除表测试_orc;
如果不存在则创建表 test_orc(
广告商_id 字符串,
ad_plan_id 字符串,
cnt BIGINT
) 由 (day string, type TINYINT COMMENT '0 as bid, 1 as win, 2 as ck', hour TINYINT) 分区
行格式分隔
NULL 定义为 ''
存储为兽人;
//查看结果
蜂巢> 显示创建表测试_orc;
创建表 `test_orc`(
`advertiser_id`字符串,
`ad_plan_id`字符串,
`cnt`大整数)
由 (
`day`字符串,
`type`tinyint COMMENT '0 为出价,1 为中奖,2 为 ck',
`hour`小整数)
行格式分隔
NULL 定义为 ''
存储为输入格式
'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat'
输出格式
'org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat'
位置
'hdfs://namenode/hivedata/warehouse/pmp.db/test_orc'
TBL 属性 (
'瞬态_lastDdlTime'\u003d'1465992916')
更多推荐

所有评论(0)