Hive Tunning(二)优化存储
接着上一章我们讲的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(二)优化存储的更多相关文章
- Hive 的企业优化
优化 数据优化 一.从大表拆分成小表(更快地检索) 引用:Hive LanguageManual DDL eg2:常用于分表 create table if not exists default.ce ...
- 深入浅出Hive企业级架构优化、Hive Sql优化、压缩和分布式缓存(企业Hadoop应用核心产品)
一.本课程是怎么样的一门课程(全面介绍) 1.1.课程的背景 作为企业Hadoop应用的核心产品,Hive承载着FaceBook.淘宝等大佬 95%以上的离线统计,很多企业里的离线统 ...
- HDP Hive StorageHandler 下推优化的坑
关键词:hdp , hive , StorageHandler 了解Hive StorageHandler的同学都知道,StorageHandler作为Hive适配不同存储的拓展类,同时肩负着Hive ...
- {MySQL存储引擎介绍}一 存储引擎解释 二 MySQL存储引擎分类 三 不同存储引擎的使用
MySQL存储引擎介绍 MySQL之存储引擎 本节目录 一 存储引擎解释 二 MySQL存储引擎分类 三 不同存储引擎的使用 一 存储引擎解释 首先确定一点,存储引擎的概念是MySQL里面才有的,不是 ...
- Mongodb同步数据到hive(二)
Mongodb同步数据到hive(二) 1. 概述 上一篇文章主要介绍了mongodb-based,通过直连mongodb的方式进行数据映射来进行数据查询,但是那种方式会对线上的 ...
- Hive(二)CentOS7.5安装Hive2.3.3
一 Hive的下载 软件下载地址:https://mirrors.tuna.tsinghua.edu.cn/apache/hive/ 这里下载的版本是:apache-hive-2.3.3-bin.t ...
- 《C#图解教程》读书笔记之二:存储、类型和变量
本篇已收录至<C#图解教程>读书笔记目录贴,点击访问该目录可获取更多内容. 一.类型初窥:掀起你的盖头来 (1)C程序是一组函数和数据类型,C++程序是一组函数和类,而C#程序是一组类型声 ...
- 【原创】构建高性能ASP.NET站点之二 优化HTTP请求(前端)
原文:[原创]构建高性能ASP.NET站点之二 优化HTTP请求(前端) 构建高性能ASP.NET站点之二 优化HTTP请求(前端) 前言: 这段时间比较的忙,文章写不是很勤,希望大家谅解. 上一篇文 ...
- Apache Hive (二)Hive安装
转自:https://www.cnblogs.com/qingyunzong/p/8708057.html Hive的下载 下载地址http://mirrors.hust.edu.cn/apache/ ...
- MySQL优化-存储引擎
MySQL优化-存储引擎 标签(空格分隔): mysql 存储引擎 查看存储引擎 show engines Myisam: 表锁 全文索引 Innodb: 行锁 事物 外键 Memory: 内存存储引 ...
随机推荐
- leetcode679:24Game
题目链接 考虑1,5,5,5这种情况,有:5*(5-1/5)=24所以除法必须自定义运算才行. class Num: def __init__(self,up,down=1): self.up=up ...
- Python 的 pandas 实践
Python 的 pandas 实践: # !/usr/bin/env python # encoding: utf-8 __author__ = 'Administrator' import pan ...
- eclipse的tasks使用说明
http://blog.csdn.net/limb99/article/details/8881891tasks可以在代码里增加标识,通过tasks view可以快速的找到这些标识的地方,有助于提高开 ...
- 程序安装制作不用愁—Wise installation入门教程
http://blog.csdn.net/terryzero/article/details/6731925最近有个项目需要把别人的工具包装集成下,所以就随便找了个制作安装的工具,正好找到了Wise ...
- Google map API V3
本文主要总结Google map API V3使用中最简单也是最常见的一些操作以及相关概念,如果需要更加详细的信息,请直接阅读Google提供的关于map的文档. google map api v3文 ...
- java开发_eclipse导出为war文件,热部署到tomcat运行总结[转]
在Myeclipse中,我们很容易做到这一步:把一个web项目生成war文件 其实在eclipse中,实现这样的功能,也是很简单的. 下面就看一下是怎样操作的吧! 新建一个web项目: 取名为:ecl ...
- SQL 错误 823 I/O error (bad page ID) detected during read【修复方法】
今天一个数据库损坏了,不管对 该表 查询.修改.添加 都会出错, 错误信息如下: I/O error (bad page ID) detected during read at offset 0x00 ...
- 订阅mosquitto服务器状态各主题
mosquitto_sub -v -t \$SYS/broker/client MQTT客户端可以通过订阅位于$SYS层次下的主题来查看mosquitto服务器的状态信息.标记为Static的主题对于 ...
- vue开发环境搭建win10
需要安装nodejs, webpack@2.2.1, babel-cli, vue-cli 1 安装nodejs 现在版本默认会安装nodejs 和 npm包 和 配置环境 2 检查是否安装成功,在 ...
- 找到当前mysql group replication 环境的primary结点
一.起原: mysql group replication 有两种模式.第一种是single primary 也就是说单个primary .这个模式下只有这一个主可以写入: 第二种是multi pri ...