大数据开发——Hive笔记
写在前面
hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。Hive的运行原理--实际上是mapreduce的客户端,最终转换为mapreduce程序放到yarn上面执行。
常见问题
1.什么是metastore.
metadata即元数据。包含database、tabel、column names、partitions信息、bucketing信息等的元数据信息。
元数据默认是存储在Derby中,建议存储在关系型数据库中。
2.metastore安装方式有什么区别.
- 内嵌模式
- 内嵌模式使用的是内嵌的Derby数据库来存储元数据,也不需要额外起Metastore服务。这个是默认的,配置简单,但是一次只能一个客户端连接,适用于用来实验,不适用于生产环境。
- 本地元存储
- 本地安装mysql 替代derby存储元数据, - 这种安装方式和嵌入式的区别在于,不再使用内嵌的Derby作为元数据的存储介质,而是使用其他数据库比如MySQL来存储元数据。 hive服务和metastore服务运行在同一个进程中,mysql是单独的进程,可以同一台机器,也可以在远程机器上。
- 远程元存储(HiveServer2)
- Hive服务和metastore在不同的进程内,可能是不同的机器,该模式需要将hive.metastore.uris设置为metastore服务器URL,如果有多个metastore服务器,将URL之间用逗号分隔,metastore服务器URL的格式为thrift://127.0.0.1:9083。
3.什么是Managed Table跟External Table.
- Hive有两种类型的表Managed Table跟External Table
- Managed Table:也被称作Internal table,这种表是hive的默认类型. 如果你在创建表的时候没有指明Managed或者External,那么默认就会给你创建Managed Table.
- Managed Table的数据,会存放在HDFS中的特定的位置中,通常是
/user/username/hive/warehouse.
- 我们可以使用
describe formatted table_name
命令来查看表的信息. - 当你删除
drop table table_name
;删除表时,数据文件也会一并删除.
- Managed Table的数据,会存放在HDFS中的特定的位置中,通常是
4.什么时候使用Managed Table跟External Table.
- Managed Table:
- 适用于临时创建的中间表.
- External Table
- 适用于数据多部门共享.
5.hive有哪些复合数据类型.
- MAP
- Map复合数据类型提供了key-value对存储.你可以通过key获取value.
zhangsan Math:90,Chinese:92,English:78
create table score_map(name string,score map<string,int>) map keys terminated by ':';
select name,score['English'],size(score) from score_map;
- STRUCT
- Struct是不同数据类型元素的集合。
zhangsan Math,90
create table course_struct(name string,course struct<course:string,score:int>) collection items terminated by ',';
select name,course.score,course.course from course_struct;
- ARRAY
- Array是同类型元素的集合.
zhangsan beijing,shanghai,Hangzhou
create table person_array(name string,work_locations array<string>) collection items terminated by ',';
select name,work_locations[0],size(work_locations) from person_array;
- UNIONTYPE
- 它代表一个可以具有属于你所选择的任何数据类型的值的列。
- 官方支持不完整,在join查询中,group by或者where字句会失败.目前可以不用这个集合.
6.hive 分区有什么好处.
- 最大的好处就是可以更快的执行查询.
- 在分区的帮助下,将使用分区列的名称创建一个子目录,并且当使用WHERE子句执行查询时,将只扫描特定的子目录,而不是扫描整个表。 这使可以更快地执行查询。
7.hive 分区跟分桶的区别.
- 分区: 是以字段的形式在表结构中存在,通过describe table命令可以查看到字段存在, 但是该字段不存放实际的数据内容,仅仅是分区的表示(伪列)。
- 分桶:对于表(table)或者分区, Hive可以进一步组织成桶,也就是说桶是更为细粒度的数据范围划分。Hive也是 针对某一列进行桶的组织。Hive采用对列值哈希,然后除以桶的个数求余的方式决定该条记录存放在哪个桶当中。实际使用比较少。
8.hive如何动态分区.
- 与分区有关的有两种类型的分区静态和动态。 在静态分区中,您将在加载数据时(显式)指定分区列。
- 而在动态分区中,您将数据推送到Hive,然后Hive决定哪个值应进入哪个分区。 要启用动态分区,请设置下面的属性: 设置hive.exec.dynamic.parition.mode = nonstrict;
insert overwrite table emp_details_partitioned partition(location) select * from emp_details;
9.map join优化手段
- Hive可以进行多表Join。Join操作尤其是Join大表的时候代价是非常大的.
- 表Join的顺序(大表放在后面)
- 当Hive执行Join时,需要选择哪个表被流式传输(stream),哪个表被缓存(cache)。 Hive将JOIN语句中的最后一个表用于流式传输,因此我们需要确保这个流表在两者之间是最大的。
- 如果要在不同的key上join更多的表,那么对于每个join集,只需在ON条件右侧指定较大的表。
- Sort-Merge-Bucket (SMB) Map Join
- 它是另一种Hivejoin优化技术,使用这个技术的前提是所有的表都必须是桶分区(bucket)和排序了的(sort)。
- set hive.enforce.sortmergebucketmapjoin=false; -- 当用户执行bucketmapjoin的时候,发现不能执行时,禁止查询是被.
- set hive.auto.convert.sortmerge.join=true; -- 如果join的表通过sort-merge join的条件,join是否会自动转换为sort-merge join。
- set hive.optimize.bucketmapjoin = true; -- bucketmapjoin优化
- set hive.optimize.bucketmapjoin.sortedmerge = true; -- bucketmapjoin优化
- set hive.auto.convert.join=false; -- 禁止自动Map-Side Join发生
10.如何创建bucket表
- 默认情况下,在Hive中禁用分桶功能,可以通过设置下面的属性强制启用分桶功能: 设置hive.enforce.bucketing = true;
11.hive有哪些file formats
- Text File format:默认格式. 数据不做压缩,磁盘开销大,数据解析开销大。
- Sequence File format:
- SequenceFile是Hadoop API提供的一种二进制文件支持,其具有使用方便、可分割、可压缩的特点。
- SequenceFile支持三种压缩选择:NONE, RECORD, BLOCK。 Record压缩率低,一般建议使用BLOCK压缩。
- RC file format: RCFILE是一种行列存储相结合的存储方式。首先,其将数据按行分块,保证同一个record在一个块上,避免读一个记录需要读取多个block。其次,块数据列式存储,有利于数据压缩和快速的列存取。RCFile目前没有性能优势, 只有存储上能省10%的空间.
- Parquet:列式数据存储.
- AVRO:avro Schema数据序列化.
- ORC: 对RCFile做了一些优化, 支持各种复杂的数据类型.
12.hive最优的file formats是什么?
- ORC file formats:
- ORC将行的集合存储在一个文件中,并且集合内的行数据将以列式存储。 采用列式格式,压缩非常容易,从而降低了大量的存储成本。
- 当查询时,会查询特定列而不是查询整行,因为记录是以列式存储的
- ORC会基于列创建索引,当查询的时候会很快.
13.hive 传参
- 使用env获取当前shell环境的环境变量
- eg: export datatime=’2017-11-10’
select * from tabliname where datatime = ${env:datatime};
- 使用--hivevar方式传入
hive --hivevar datatime =’ datatime’ --hivevar limit=10 -f filename.sql
select * from tablename where datatime = ${hivevar:datatime} limit ${hivevar:limit}
14. Order by和Sort by的区别
- 使用order by会引发全局排序,有可能会导致任务失败.
- 使用distribute by + sort by替代方案,进行优化.
15. hive跟hbase的区别
- hive支持sql查询,hbase不支持
- hive不支持record级(一行记录)的更新,删除操作
- hive定义为数据仓库,hbase定义为nosql数据库.
16.Hive数据仓库与数据库的异同
(1)由于Hive采用了SQL的查询语言HQL,因此很容易将Hive理解为数据库。其实从结构上来看,Hive和数据库除了拥有类似的查询语言,
再无类似之处。
(2)数据存储位置。 hdfs raw local fs
(3)数据格式。 分隔符
(4)数据更新。hive读多写少。Hive中不支持对数据的改写和添加,所有的数据都是在加载的时候中确定好的。
INSERT INTO … VALUES添加数据,使用UPDATE … SET修改数据 不支持的
HDFS 一次写入多次读取
(5) 执行。hive通过MapReduce来实现的 而数据库通常有自己的执行引擎。
(6)执行延迟。由于没有索引,需要扫描整个表,因此延迟较高。另外一个导致Hive执行延迟高的因素是MapReduce框架
(7)可扩展性
(8)数据规模。
参考
大数据开发——Hive笔记的更多相关文章
- FusionInsight大数据开发---Hive应用开发
Hive应用开发 了解Hive的基本架构原理 掌握JDBC客户端开发流程 了解ODBC客户端的开发流程 了解python客户端的开发流程 了解Hcatalog/webHcat开发接口 掌握Hive开发 ...
- 大数据开发实战:Hive优化实战3-大表join大表优化
5.大表join大表优化 如果Hive优化实战2中mapjoin中小表dim_seller很大呢?比如超过了1GB大小?这种就是大表join大表的问题.首先引入一个具体的问题场景,然后基于此介绍各自优 ...
- 大数据开发实战:Hive优化实战2-大表join小表优化
4.大表join小表优化 和join相关的优化主要分为mapjoin可以解决的优化(即大表join小表)和mapjoin无法解决的优化(即大表join大表),前者相对容易解决,后者较难,比较麻烦. 首 ...
- 大数据开发实战:Hive优化实战1-数据倾斜及join无关的优化
Hive SQL的各种优化方法基本 都和数据倾斜密切相关. Hive的优化分为join相关的优化和join无关的优化,从项目的实际来说,join相关的优化占了Hive优化的大部分内容,而join相关的 ...
- 大数据开发实战:Hive表DDL和DML
1.Hive 表 DDL 1.1.创建表 Hive中创建表的完整语法如下: CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name [ (col_nam ...
- 大数据开发实战:离线大数据处理的主要技术--Hive,概念,SQL,Hive数据库
1.Hive出现背景 Hive是Facebook开发并贡献给Hadoop开源社区的.它是建立在Hadoop体系架构上的一层SQL抽象,使得数据相关人员使用他们最为熟悉的SQL语言就可以进行海量数据的处 ...
- 2019春招——Vivo大数据开发工程师面经
Vvio总共就一轮技术面+一轮HR面,技术面总体而言,比较宽泛,比较看中基础,面试的全程没有涉及简历上的东西(都准备好跟他扯项目了,感觉是抽取的题库...)具体内容如下: 1.熟悉Hadoop哪些组件 ...
- 大数据开发实战:Spark Streaming流计算开发
1.背景介绍 Storm以及离线数据平台的MapReduce和Hive构成了Hadoop生态对实时和离线数据处理的一套完整处理解决方案.除了此套解决方案之外,还有一种非常流行的而且完整的离线和 实时数 ...
- 大数据开发-Spark-拷问灵魂的5个问题
1.Spark计算依赖内存,如果目前只有10g内存,但是需要将500G的文件排序并输出,需要如何操作? ①.把磁盘上的500G数据分割为100块(chunks),每份5GB.(注意,要留一些系统空间! ...
随机推荐
- Docker(9)- docker pull 命令详解
如果你还想从头学起 Docker,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1870863.html 作用 从镜像仓库中拉取或更新镜像 ...
- 云计算之路-出海记:整一台 aws 免费云服务器
上次蹭到一张船票,登上了 aws 这艘巨轮,今天要在船上的免费餐厅吃一顿免费晚餐 -- 整一台 aws 免费套餐中的 EC2 服务器体验一下. 进入 EC2 控制台,点击"启动实例" ...
- 力扣 - 445. 两数相加 II
目录 题目 思路 代码实现 题目 给你两个 非空 链表来代表两个非负整数.数字最高位位于链表开始位置.它们的每个节点只存储一位数字.将这两数相加会返回一个新的链表. 你可以假设除了数字 0 之外,这两 ...
- Spring Security 实战干货:客户端OAuth2授权请求的入口
1. 前言 在Spring Security 实战干货:OAuth2第三方授权初体验一文中我先对OAuth2.0涉及的一些常用概念进行介绍,然后直接通过一个DEMO来让大家切身感受了OAuth2.0第 ...
- 9个JavaScript日常开发小技巧
1.生成指定范围的数字 在某些情况下,我们会创建一个处在两个数之间的数组.假设我们要判断某人的生日是否在某个范围的年份内,那么下面是实现它的一个很简单的方法 1 2 3 4 5 6 let start ...
- ado.net 连接数据库
一.用SqlConnection连接SQL Server 1..加入命名空间 using System.Data.SqlClient; 2.连接数据库 SqlConnection myConnecti ...
- Spider_基础总结7_爬虫基本模板(3个类)
# 第四章内容--处理不同的网站布局: # 我们想在功能类似的网站上抓取类似内容时,往往这些网站的内容可能布局不一样(相同内容的标签可能不同),由于通常我们爬取的网站数量有限, # 我们没有必要去开发 ...
- uboot分析——makefile
1.makefile分析 $(TOPDIR)/makefile | |-----> include $(obj)/include/config.mk 确定板子环境 | || | V |---- ...
- 面经手册 · 第18篇《AQS 共享锁,Semaphore、CountDownLatch,听说数据库连接池可以用到!》
作者:小傅哥 博客:https://bugstack.cn Github:https://github.com/fuzhengwei/CodeGuide/wiki 沉淀.分享.成长,让自己和他人都能有 ...
- rbd的删除回收站功能
前言 rbd 提供了一个回收站功能,这个是属于防呆设计,防止误操作删除rbd引起无法恢复的情况,rbd正常情况下的删除是马上会在后台回收空间的,这个也听说过有人做过误删除的操作,那么这个设计就是从操作 ...