Hive0.14数据存储优化

来源:互联网 发布:临沂小商品城淘宝培训 编辑:程序博客网 时间:2024/06/18 04:34
1.hive数据存储优化
   1>对于需要经常连接查询的表一定要建立分区和桶。分区的意义在于列裁剪数据,桶的意义在于并行计算
(因为用来做桶的列通过hash后分布在各自桶里,在连接时并行进行桶与桶之间的连接即可。(ORC格式的stripes文件同样有这个功能后面讲到))
        要使用以上这个特性需要在建表时构建表的分区结构和分桶结构。这个行为发生在数据存储环节。
   2> hive存储文件格式介绍:
        1》textfile--原生的文本存储格式,行存储,可以用bzip,gzip压缩,但是TEXTFILE在压缩后不能发挥MapReduce的并行处理能力。
        2》sequencefile序列文件--行存储,hadoop提供的文件存储格式(二进制文件)。有record,block,none三种压缩格式。(可以分割,压缩默认使用block压缩格式。)
              create table test2(str STRING)  
              STORED AS SEQUENCEFILE;  
              设置这两个参数:
              hive.exec.compress.output=true;  
              io.seqfile.compression.type=BLOCK;  
        3》RCFile--(Row colums file)行列存储相结合的存储格式,首先按相同行在一个块上(避免分散在不同块上产生多余的扫描),然后块按列的方式存储 以方便快速的索引和存取列。(数据写入时时间代价比较大,但是查询性能有很大提升,同时也是Lazy解压)
        create table test3(str STRING)          STORED AS RCFILE;
         4》ORCFile--(Optimalized Row colums File)优化过的RCFile。
               相比RCFile有以下的优点:
                1)一个task只输出一个文件(几个行块文件组成一个大的文件),减小碎片文件率。
                2)在列块中每个列存有行索引文件方便快速定位行。
                3)可以使用RecordReader并行的读多个块或多个列。
                4)有多种索引文件记录行信息和列信息。
               
              ORCFile的文件结构.
               
                index Data文件保存每列的最大和最小值以及列的行索引。
                fileFooter文件保存每个块有多少行,每列的数据类型,列上的一些聚合信息。
                Stripe foooter包含文件流信息的目录
                row data保存行的信息。
                ORCFile的一些参数:
                orc.compress=[ZLIB,NONE,SNAPPY]
                orc.compress.size=262144
                orc.stripe.size=268435456
                orc.row.index.stride=10000
                orc.create.index=true
           5》自定义文件输入输出格式:
        inputformat 'org.apache.hadoop.hive.contrib.fileformat.base64.Base64TextInputFormat'  
        outputformat 'org.apache.hadoop.hive.contrib.fileformat.base64.Base64TextOutputFormat';
             
    3>各种文件格式数据加载,压缩比率,查询响应横向比较:
         不管什么文件格式建议使用gzip压缩格式,原因是gzip在时间和空间效率上都比较平衡:
          
    
           在数据加载性能方面:sequencefile优于textfile优于rcfile。
           在查询效率方面:rcfile优于sequencefile优于textfile。
           在存储成本方面:rcfile优于sequencefile优于textfile。
           显而易见,我们不应该使用textfile这种文件格式。相反,在类似一次加载多次查询的场景,应该使用rcfile这种格式。
测试结果数据:

 

 
TextFile
ORCFile
存储效率(50G)
50G
9G
Tablescan效率
80s
40s
mapTask数
175个
36个

 

下表是一次CPU 的开销:

 

rank

self

accum

count

trace

method

20       

0.48%

79.64%

65

315554

org.apache.hadoop.hive.ql.io.RCFile$Reader.getCurrentRow

28

0.24%

82.07%

32

315292

org.apache.hadoop.hive.serde2.columnar.ColumnarStruct.init

55

0.10%

85.98%

14

315788

org.apache.hadoop.hive.ql.io.RCFileRecordReader.getPos

56

0.10%

86.08%

14

315797

org.apache.hadoop.hive.ql.io.RCFileRecordReader.next


 
TRACE 315554: (thread=200001) org.apache.hadoop.hive.ql.io.RCFile$Reader.getCurrentRow(RCFile.java:1434) org.apache.hadoop.hive.ql.io.RCFileRecordReader.next(RCFileRecordReader.java:88) org.apache.hadoop.hive.ql.io.RCFileRecordReader.next(RCFileRecordReader.java:39) org.apache.hadoop.hive.ql.io.CombineHiveRecordReader.doNext(CombineHiveRecordReader.java:98) org.apache.hadoop.hive.ql.io.CombineHiveRecordReader.doNext(CombineHiveRecordReader.java:42) org.apache.hadoop.hive.ql.io.HiveContextAwareRecordReader.next(HiveContextAwareRecordReader.java:67)
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 去韩国留学手机怎么办 韩国办无线网怎么办 淘宝卖家被骗怎么办 淘宝买软件被骗怎么办 被淘宝店诈骗怎么办? 支付宝被骗2000怎么办 给私人打款后不发货怎么办 毕业证寄丢了怎么办 微商下单返现被骗一千四怎么办 淘宝买东西卡里多扣钱怎么办 付款了卖家不发货怎么办 淘宝客服不解决问题怎么办 淘宝未付款订单怎么办 淘宝被限制购买怎么办 苹果官换机维修过怎么办 iphone x官换机坏了怎么办 小娃不要大人睡怎么办? 深度睡眠太少怎么办 踏板摩托车淹缸怎么办 电喷摩托车淹缸怎么办 踏板摩托不过油怎么办 火花塞被汽油淹怎么办 踏板车淹缸了怎么办 电喷汽车淹缸怎么办 踏板摩托车粘缸怎么办 鬼火打不着火怎么办 踏板摩托车没电怎么办 买摩托车被骗了怎么办 鬼火电瓶坏了怎么办 摩托闷油了怎么办 鬼火发不着火怎么办 淘宝买东西发错货了怎么办 咸鱼售假处罚怎么办 趣头条登录不上怎么办 淘宝集运超租怎么办 淘宝发货多发了怎么办 小学生数学学不好怎么办 小学生不爱学英语怎么办 小学生基础知识没学好怎么办 小学生应用题学不明白怎么办 不提供纸质发票怎么办