大数据开发——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:78create 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,90create 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,Hangzhoucreate 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.sqlselect * 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.(注意,要留一些系统空间! ...
随机推荐
- apache+php安装
https://codebriefly.com/how-to-setup-apache-php-mysql-on-windows-10/ 出问题的地方 1.apache rewrite 模块开启 (去 ...
- 转载:Pycharm的常用快捷键
一直想着找一下pycharm的快捷键,但是每次都忘记找了,这次刚好碰到一个很全的,就直接借用别人的来当作自己的笔记ba 转载来源:https://www.cnblogs.com/liangmingsh ...
- reids 入门
1.reids 服务的安装有两种 1.1 exe文件安装,安装完成后,就直接在 "服务"列表中可以查看,并可以停止或启动 1.2 命令行安装:将文件解压至指定文件夹,CMD命令进入 ...
- 6. Spark SQL和Beeline
*以下内容由<Spark快速大数据分析>整理所得. 读书笔记的第六部分是讲的是Spark SQL和Beeline. Spark SQL是Spark用来操作结构化和半结构化数据的接口. 一. ...
- full nat
在餐馆吃饭时,连接无线网络后访问某网页会自动弹出一个认证页面,我想大家都经历过..... 其网络拓扑如下: sta-------------网络设备--------------公网 比如sta 终端i ...
- redis重点ppt
- golang的bytes.buffer
参考原文:go语言的bytes.buffer 一.创建缓冲期 bytes.buffer是一个缓冲byte类型的缓冲器 1.使用bytes.NewBuffer创建:参数是[]byte的话,缓冲器里就是这 ...
- linux 源码下载和在线查看网站
下载: https://www.kernel.org/ 查看: https://elixir.bootlin.com/linux/
- 开发IDE的一些设置
一.修改和设置idea或eclipse的快捷键: 二.idea的settings的一些设置: settings 可以导出,也可以导入.也可以设置每次新建和新打开一个工程用同一个setting 三.全局 ...
- 掉电后osdmap丢失无法启动osd的解决方案
前言 本篇讲述的是一个比较极端的故障的恢复场景,在整个集群全部服务器突然掉电的时候,osd里面的osdmap可能会出现没刷到磁盘上的情况,这个时候osdmap的最新版本为空或者为没有这个文件 还有一种 ...