一、外部表和内部表的区别
(1)创建表时指定external关键字,就是外部表,不指定external就是内部表
(2)内部表删除后把元数据和数据都删除了,外部表删除后只是删除了元数据,不会删除hdfs上的数据文件
(3)外部表创建表时通过location指定存放表数据的hdfs上的路径,而内部表是默认存放在hive-site.xml中
设置的warehouse中,会在warehouse这个目录下以表名创建文件夹,数据就存放在这里。
 
二、.hive表分区
 
hive表分区其实就是分目录,表是大目录,分区是子目录,通过分区来实现分目录存放数据
分区由于是目录,不能带有特殊符号,分区列的值要转化为文件夹的存储路径,所以如果分区列的值中包含特殊值,如 '%', ':', '/', '#',它将会被使用%加上2字节的ASCII码进行转义,分区字段并不是表中真实存在的字段,而是一个或者多个伪列。表的数据文件中实际上并不保存分区列的信息与数据,而是用这个字段来划分数据的
存放目录,使用分区可以加快查询速度,查询时可以直接查询某一个分区下的数据,而不用管其他分区的数据
 
 
静态分区:
写入数据的时候就知道了(指定了)分区的名字
 
 
动态分区:
在写入数据的时候不知道分区的名字,当有符合分区条件的数据的时候会给它增加新的分区。
动态分区需要提前设置好连个参数,不然建分区的时候会抛异常
set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nostrict;
 
动态分区:当select的结果记录数大于零的时候才会创建分区
静态分区只要指定了就一定会创建。
 
动态分区会为每一个分区配上reduce数。比如设置了set mapreduce.job.reduces=100.设置了reduce的个数。
当有两个分区,如果每一个结果集中都有数据,会为每一个分区配上100个reduce数,也就是namenode同时处理200个文件写操作,
这种操作如果在分区值很多的时候容易把namenode搞挂掉,因此写动态分区的时候要清楚分区的值和合理设置reduce的数量
 
三、分桶
桶是更细粒度的划分, 相同的数据分到一个桶里面,减少数据访问的量,对每一个表或者分区,hive可以进行进一步的分桶
 
对列的值哈希然后除以桶的个数求与的方式决定这条数据放到哪个桶里面去。
 
(1)分桶可以获得更高查询效率
(2)桶为表加上了额外的结构,hive查询的时候可以利用这种结构
两个表连接时相同的列上划分了桶的表可以使用map端进行连接,join连接时两个表有相同的列,如果这两个表都进行了桶的操作,那么这个保存相同列值得桶进行join操作就可以减少join的数量
 
 
分桶需要设置两个参数:
set hive.enforce.bucketing=true;
set hive.enforce.sorting=true;
 
四、数据
数据遵循的规则是相同数据尽量聚集在一起
这样数据访问时可以直接访问计算节点的本地数据,数据本地性,降低网络数据的流量和负载
数据存储方式
三种常用的方式:
seqencefile 压缩效率低,查询速度一般
textfile(默认存储方式)不做压缩,磁盘开销大,解析开销大,加载速度最快
rcfile (0.6.0之后支持) 压缩率最高,查询效率最高,数据加载最慢
另外还有
orc(0.11.0之后)
parquet(0.13.0)
avro(0.14.0)
inputformat

hive 表优化的更多相关文章

  1. Hive SQL 优化面试题整理

    Hive优化目标 在有限的资源下,执行效率更高 常见问题: 数据倾斜 map数设置 reduce数设置 其他 Hive执行 HQL --> Job --> Map/Reduce 执行计划 ...

  2. Hive:表1inner join表2结果group by优化

    问题背景 最近遇到一个比较棘手的事情:hive sql优化: lib表(id,h,soj,noj,sp,np)         --一个字典表 mitem表(md,mt,soj,noj,sp,np)- ...

  3. 大数据开发实战:Hive优化实战3-大表join大表优化

    5.大表join大表优化 如果Hive优化实战2中mapjoin中小表dim_seller很大呢?比如超过了1GB大小?这种就是大表join大表的问题.首先引入一个具体的问题场景,然后基于此介绍各自优 ...

  4. 大数据开发实战:Hive优化实战2-大表join小表优化

    4.大表join小表优化 和join相关的优化主要分为mapjoin可以解决的优化(即大表join小表)和mapjoin无法解决的优化(即大表join大表),前者相对容易解决,后者较难,比较麻烦. 首 ...

  5. Hive优化-大表join大表优化

    Hive优化-大表join大表优化 5.大表join大表优化 如果Hive优化实战2中mapjoin中小表dim_seller很大呢?比如超过了1GB大小?这种就是大表join大表的问题.首先引入一个 ...

  6. Hive性能优化

    1.概述 继续<那些年使用Hive踩过的坑>一文中的剩余部分,本篇博客赘述了在工作中总结Hive的常用优化手段和在工作中使用Hive出现的问题.下面开始本篇文章的优化介绍. 2.介绍 首先 ...

  7. Hive篇---Hive使用优化

    一.前述 本节主要描述Hive的优化使用,Hive的优化着重强调一个 把Hive SQL 当做Mapreduce程序去优化 二.主要优化点 1.Hive运行方式:本地模式集群模式 本地模式开启本地模式 ...

  8. Hive性能优化上的一些总结

    https://blog.csdn.net/mrlevo520/article/details/76339075 1.介绍 首先,我们来看看Hadoop的计算框架特性,在此特性下会衍生哪些问题? 数据 ...

  9. 关于hive的优化

    首先hive本质就是mapreduce,那么优化就从mapreduce开始入手. 然而mapreduce的执行快慢又和map和reduce的个数有关,所以我们先从这里下手,调整并发度. 关于map的优 ...

随机推荐

  1. 实践 ArcGIS Web 3D

    ArcGIS 产品家族的 Web 3D 功能众多用户期待已久.从 ArcGIS 10.3.1 版本号開始,Esri 放了个大招,千呼万唤始出来的 Web 3D 功能,最终不再犹抱琵琶半遮面了. 那究竟 ...

  2. Memory Models And Namespaces

    分开编译 不要把变量和函数的定义放到头文件中. 可以分开编译源文件,然后将它们连接起来生成最终的可执行文件. 如果你只修改了一个文件,你可以只重新编译这个文件,之前编译过的其他文件就不需要再次编译了, ...

  3. FutureTask 源码分析

    FutureTask 源码分析,这个类的原理与我分析android当中的FutureTask类差不多[http://www.cnblogs.com/daxin/p/3802392.html] publ ...

  4. Android——Fragment 真正的完全解析(下)(转)

    原文地址:http://blog.csdn.net/lmj623565791/article/details/37992017 上篇博客中已经介绍了Fragment产生原因,以及一些基本的用法和各种A ...

  5. pppoe应用概述

    PPPOE简述 PPP主要是用来通过拨号或专线方式在两个网络节点之间建立连接.发送数据.PPP是一种分层协议,物理层用来进行实际的点到点连接.由链路控制层(LCP)发起对链路的建立.配置和测试.在LC ...

  6. WCF安全:通过 扩展实现用户名密码认证

    在webSservice时代,可以通过SOAPHEADER的方式很容易将用户名.密码附加到SOAP header消息头上,用户客户端对调用客户端身份的验证.在WCF 时代,也可以通过Operation ...

  7. RavenDb学习(二)简单的增删查改

    在上一节当中已经介绍了RavenDb的文档设计模式,这一节我们要具体讲一讲如何使用api去访问RavenDb .连接RavenDb var documentStore = new DocumentSt ...

  8. Sword websocket分析一

    什么是WebSocket WebSocket是一个允许Web应用程序(通常指浏览器)与服务器进行双向通信的协议. HTML5的WebSocket API主要是为浏览器端提供了一个基于TCP协议实现全双 ...

  9. install ubuntu on Android mobile phone

    Android 是基于Linux内核的开源操作系统,主要用在移动设备上.当然同样是基于Linux内核的操作系统,现在支持的Android的智能手机理论来说都能运行基于Linux的操作系统,比如现在流行 ...

  10. modelsim 出现此错误怎么办

    笔者的电脑装成了win8的系统,然后像平常一样打开modelsim,这时跳出如下图的界面: 笔者的modelsim之前是安装过的,所以这个界面已经说明,当前的许可证没有安装好.解决上述问题的办法是重新 ...