大数据开发——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.(注意,要留一些系统空间! ...
随机推荐
- 重磅解读:K8s Cluster Autoscaler模块及对应华为云插件Deep Dive
摘要:本文将解密K8s Cluster Autoscaler模块的架构和代码的Deep Dive,及K8s Cluster Autoscaler 华为云插件. 背景信息 基于业务团队(Cloud BU ...
- 面经手册 · 第17篇《码农会锁,ReentrantLock之AQS原理分析和实践使用》
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 如果你相信你做什么都能成,你会自信的多! 千万不要总自我否定,尤其是职场的打工人.如 ...
- layui下拉框后台动态赋值
前台页面: <select name="xm" id="xm" lay-verify="required" lay-filter=&q ...
- mdp文件-Chapter3-NPT.mdp
mdp系列的第三篇,对NPT模拟中的mdp文件做一简单介绍. 先上代码 1 title = OPLS Lysozyme NPT equilibration 2 define = -DPOSRES ; ...
- 微信告警如何配置?用Cloud Alert快速实现微信告警
在当下互联网蓬勃发展的时代里,微信已经成为了人们生活中不可分割的一部分.作为苦逼的运维人员,我们自然也得跟得上时代的步伐,将微信添加进告警的通知方式里.如果能够将告警消息第一时间发送到微信中,更清楚地 ...
- 测试cephfs写入海量文件
前言 测试cephfs的写入大量文件,通过mdtest写入1K大小的文件1亿个,每个目录里面文件为1万,目录总数为1万,总文件数目就为1亿了 写入的命令 mdtest -C -F -L -z 4 -b ...
- 前端JS下载文件总结
Data URLs Data URLs: 即前缀为data: 协议的URL,其允许内容创建者向文档中嵌入小文件. 例如:可以直接在HTML中的img元素直接使用Data URLs : data:[&l ...
- mysql数据库安装与卸载以及Navicat安装
关系型数据库Mysql 1.mysql官网网址:www.mysql.org 2.mysql数据库安装 傻瓜式安装下载地址 https://dev.mysql.com/downloads/install ...
- Docker 初始
1. Docker 是什么? 官网的介绍是"Docker is the world's leading software container platform." 官方给Docke ...
- 即时编译器 (JIT) 详解
最近听我的导师他们讨论Java的即时编译器(JIT),当时并不知道这是啥东西,所以就借着周末的时间,学习了一下! 一.概述 在部分的商用虚拟机(Sun HotSpot)中,Java程序最初是通过解释器 ...