接着上一章我们讲的hive的连接策略,现在我们讲一下hive的数据存储。

下面是hive支持的数据存储格式,有我们常见的文本,JSON,XML,这里我们主要讲一下ORCFile。

Built-in Formats:
– ORCFile
– RCFile
– Avro
– Delimited Text
– Regular Expression
– S3 Logfile
– Typed Bytes
• 3
rd
-Party Addons:
– JSON
– XML

这种格式非常适合HDFS,它有以下的优点:

•高压缩
– 高压缩比.
– 字典编码.
•高性能
– 自带索引.
– 高效的精确查询.
• 灵活的数据模型
– 支持所有的hive类型,包括maps.

从图中可以看出,orc格式的文件存储大小仅为文本的30%左右,比gz格式的都小,采用zlib压缩的话,更小,仅有22%左右。

使用orc格式存储的方式很简单,在建表的时候STORED  AS orc即可

CREATE  TABLE  sale  (    
      id    int,   timestamp  timestamp,   
      productsk   int,  storesk  int,    
      amount   decimal,  state  string   
)    STORED   AS   orc;

相关参数,自己看,不解释了。

不适用zlib压缩的话,查询速度更快,但是也大一些。

CREATE    TABLE    sale    (   
                id    int,    timestamp    timestamp,   
productsk    int,    storesk    int,   
                amount    decimal,    state    string   
)    STORED    AS    orc    tblproperties    ("orc.compress"="NONE");

下面是加快hive查询的一些可以参考的方式:

(1)跳跃读取:采用分区Partition或者使用Skew,才用ORCFile二次排序。

(2)在连接字段上排序并且bucket,在连接小表的时候采用Broadcast joins。

(3)对经常使用的数据,增加备份因子,激活Short-Circuit Read,采用Tez。

当某个表很大的时候,我们往往要对其进行分区,比如按照时间来分区。

CREATE    TABLE    sale    (   
                id    int,    amount    decimal,    ...   
)    partitioned    by    (xdate    string,    state    string);

其中的xdate和state是不存在的列,你可以认为它们是虚拟列,虚拟列会在HDFS当中建立子目录,属于分区的记录会存在那个子文件夹中。

使用分区之后,在查询和插入的时候,就必须带有至少一个分区字段,否则查询将会失败。

INSERT    INTO    sale    (xdate=‘2013-03-01’,    state=‘CA’)   
SELECT    *    FROM    staging_table
WHERE    xdate    =    ‘2013-03-01’    AND    state    =    ‘CA’;

如果你想一次查出所有数据,不想受这个限制的话,你可以 hive.exec.dynamic.partition.mode参数置为nonstrict。

set    hive.exec.dynamic.partition.mode=nonstrict;

INSERT    INTO    sale    (xdate,    state)   
SELECT    *    FROM    staging_table;

有时候插入数据的时候,我们需要重新排序,在select 语句里面把虚拟列也加上,这样会有排序的效果。

INSERT    INTO    sale    (xdate,    state=‘CA’)   
SELECT   
            id,    amount,    other_stuff,   
xdate,    state   
FROM    staging_table
WHERE    state    =    ‘CA’;

下面我们讲一下常用的hive查询调优

mapred.max.split.size和mapred.min.split.size

min    太大->   太少mapper.   
max    太小->   mapper太多.

Example:   
– set    mapred.max.split.size=100000000;   
– set    mapred.min.split.size=1000000;

当然也有个原则,当mappers出现抢占资源的时候,才调整这些参数。

– set    io.sort.mb=100;

• All    the    time:   
– set    hive.optmize.mapjoin.mapreduce=true;   
– set    hive.optmize.bucketmapjoin=true;   
– set    hive.optmize.bucketmapjoin.sortedmerge=true;   
– set    hive.auto.convert.join=true;   
– set    hive.auto.convert.sortmerge.join=true;   
– set    hive.auto.convert.sortmerge.join.nocondi1onaltask=true;   
• When    bucketing    data:   
– set    hive.enforce.bucketing=true;   
– set    hive.enforce.sortng=true;   
• These    and    more    are    set    by    default    in    HDP    1.3(明显的广告词,说明HDP比较强大,已经给我们设置好了).   
这些参数我们可以在hive-site.xml中查询到,我们也可以在shell中查询。

(1)查询所有的参数

(2)查询某一个参数

(3)修改参数

Hive Tunning(二)优化存储的更多相关文章

  1. Hive 的企业优化

    优化 数据优化 一.从大表拆分成小表(更快地检索) 引用:Hive LanguageManual DDL eg2:常用于分表 create table if not exists default.ce ...

  2. 深入浅出Hive企业级架构优化、Hive Sql优化、压缩和分布式缓存(企业Hadoop应用核心产品)

    一.本课程是怎么样的一门课程(全面介绍)    1.1.课程的背景       作为企业Hadoop应用的核心产品,Hive承载着FaceBook.淘宝等大佬 95%以上的离线统计,很多企业里的离线统 ...

  3. HDP Hive StorageHandler 下推优化的坑

    关键词:hdp , hive , StorageHandler 了解Hive StorageHandler的同学都知道,StorageHandler作为Hive适配不同存储的拓展类,同时肩负着Hive ...

  4. {MySQL存储引擎介绍}一 存储引擎解释 二 MySQL存储引擎分类 三 不同存储引擎的使用

    MySQL存储引擎介绍 MySQL之存储引擎 本节目录 一 存储引擎解释 二 MySQL存储引擎分类 三 不同存储引擎的使用 一 存储引擎解释 首先确定一点,存储引擎的概念是MySQL里面才有的,不是 ...

  5. Mongodb同步数据到hive(二)

    Mongodb同步数据到hive(二) 1.            概述 上一篇文章主要介绍了mongodb-based,通过直连mongodb的方式进行数据映射来进行数据查询,但是那种方式会对线上的 ...

  6. Hive(二)CentOS7.5安装Hive2.3.3

    一 Hive的下载 软件下载地址:https://mirrors.tuna.tsinghua.edu.cn/apache/hive/  这里下载的版本是:apache-hive-2.3.3-bin.t ...

  7. 《C#图解教程》读书笔记之二:存储、类型和变量

    本篇已收录至<C#图解教程>读书笔记目录贴,点击访问该目录可获取更多内容. 一.类型初窥:掀起你的盖头来 (1)C程序是一组函数和数据类型,C++程序是一组函数和类,而C#程序是一组类型声 ...

  8. 【原创】构建高性能ASP.NET站点之二 优化HTTP请求(前端)

    原文:[原创]构建高性能ASP.NET站点之二 优化HTTP请求(前端) 构建高性能ASP.NET站点之二 优化HTTP请求(前端) 前言: 这段时间比较的忙,文章写不是很勤,希望大家谅解. 上一篇文 ...

  9. Apache Hive (二)Hive安装

    转自:https://www.cnblogs.com/qingyunzong/p/8708057.html Hive的下载 下载地址http://mirrors.hust.edu.cn/apache/ ...

  10. MySQL优化-存储引擎

    MySQL优化-存储引擎 标签(空格分隔): mysql 存储引擎 查看存储引擎 show engines Myisam: 表锁 全文索引 Innodb: 行锁 事物 外键 Memory: 内存存储引 ...

随机推荐

  1. IOS 内存优化和调试技巧

    基础部分 1: 图片内存大小小结 a: 图片:是占用内存的大户,尤其是手机游戏图片资源众多.对图片资源在内存中占用量的计算成为J2ME游戏开发者的经常性工作,CoCoMo来解释一下如何计算图片在内存中 ...

  2. 谷歌地图地理解析和反解析geocode.geocoder详解(转)

    谷歌地图地理解析和反解析geocode.geocoder详解 谷歌Geocoder服务 实例代码 地址解析就是将地址(如:贵州省贵阳市)转换为地理坐标(如经度:106.71,纬度:26.57)的过程. ...

  3. 转 虫师的selenium借助AutoIt识别上传(下载)详解

    selenium借助AutoIt识别上传(下载)详解 2014-12-27 11:26 by 虫师, 755 阅读, 1 评论, 收藏,  编辑 AutoIt目前最新是v3版本,这是一个使用类似BAS ...

  4. Android特性与系统架构

    Android特性与系统架构 一.Android特性 • 应用程序框架支持组件的重用与替换 • Dalvik 虚拟机专为移动设备优化 • 集成的浏览器基于开源的WebKit 引擎 • 优化的图形库包括 ...

  5. 安装R语言的包的方法

    安装R语言的包的方法: 1. 在线安装 在R的控制台,输入类似install.packages("TSA")  # 安装 TSA install.packages("TS ...

  6. Asp.net 用户控件和自定义控件注册

    在ASPX页中注册用户控件的方法 <%@ Register Src="ListPicker.ascx" TagName="ListPicker"  Tag ...

  7. python map 详解

    python中的map函数应用于每一个可迭代的项,返回的是一个结果list.如果有其他的可迭代参数传进来,map函数则会把每一个参数都以相应的处理函数进行迭代处理.map()函数接收两个参数,一个是函 ...

  8. Eclipse使用git最基本流程(提交远程仓库的方法)

    注册一个github账号 注册完成之后,点击右上角的settings(就是那个齿轮,设置的图标) Step6 Egit的使用 首先,登入你的github账号,点击加号,选择New repositror ...

  9. dubbo-monitor监控台的部署

    参考资料:dubbo的monitorhttps://github.com/handuyishe/dubbo-monitorhttp://blog.yangcvo.me/2017/01/26/Java- ...

  10. hdu 5289 Assignment(给一个数组,求有多少个区间,满足区间内的最大值和最小值之差小于k)

    1.区间是一段的,不是断开的哟 2.代码是看着标程写的 3.枚举左端点,二分右端点流程: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L ...