Hive快速入门
一、前面课程的小结:
1、Linux:
(1)文件管理
(2)权限问题
(3)用户组管理
(4)压缩/解压
(5)软件的安装:JKS/Mysql/hadoop(*****)
2、MySQL:
(1)DDL/DML
(2)group by /join 是大数据处理中的超级杀手:shuffle。这两个是重点数据倾斜的案例:必然是 GROUP BY/JOIN导致的,到时候把这两个反复看熟解决shuffle对大数据来说已经掌握了60%
3、hadoop:
(1)什么是hadoop?
狭义:HDFS MapReduce YARN等分布式的存储和计算宽假
广义:hadoop生态圈
(2)访问方式:
shell CLI(*****)
Java API(*****):FileSystem
Web UI:HUE(HDFS/RDBMS/Hivfe/HBase/Solr...)
(3)HDFS/MR/YARN架构:
明白每一个进程是做什么的就行。
(4)面试前准备
架构
MarReduce执行流程
MR/Spark/...提交到YARN的执行流程
二、Hive部分
wordcount:MapReduce代码很复杂。
1、产生背景:“云化”过程
(1)MapReduce编程十分不方便
(2)传统的RDBMS人员的需求:SQL来处理大数据
<=======Hive诞生了
假设数据存放在HDFS: /ruozedata/hadoop/a.txt
1 zhangsan 30
2 ruoze 31
3 jepson 19
称为meta/schema
person
id:int
name:string
age:int
select id,name from person;
2、Hive
Hive 是一个使用SQL来操作分布式存储系统上面的大数据集的读写和管理操作的一个客户端,Hive它不是一个集群。用JDBC去连接Server的话,不应该是走查询统计分析,而是去拿到统计结果,只拿结果,不做计算。
SQL on Hadoop
官网:hive.apache.org
data warehouse(数据仓库):离线、实时
structure:结构化的(可以课外去了解半结构化)
Hive是构建在hadoop之上的数据仓库
HDFS:存储
MapReduce:执行引擎(MapReduce/Tez/Spark)
Hive QL/HQL:类SQL
SQL==>MapReduce/Spark/Tez 提交JOB
存储格式/压缩格式(*****)
3、Hive发展历程
08/2007:facebook
05/2013:0.11.0 Stringer 阶段1 ORC HiveServer2
10/2013:0.12.0 Stringer 阶段2 ORC improvement
04/2014:0.13.0 Stringer 阶段3 Vectorized query engine(矢量查询(Vectorized query) 每次处理数据时会将1024行数据组成一个batch进行处理,而不是一行一行进行处理,这样能够显著提高执行速度。可以通过设置(相关参考:
https://cwiki.apache.org/confluence/display/Hive/Vectorized+Query+Execution) Tez
11/2014:0.14.0 Stringer.next 阶段1 Cost-based optimizer:最优(CBO)通过设置,可以Hive将不断优化查询效率
01/2015:1.0.0
......
Stringer:Making Apache Hive 100 times Faster
(1)简单易用
(2)拓展性 构建在hadoop之上本身hadoop就有不错的拓展性
(3)统一的元数据管理(hive将元数据存放在MySQL/Derby){
database
table
column:name type
location
}
好处:/ruozedata/hadoop/a.txt 将hdfs上的数据用 Hive可以处理,Sprk也可以计算处理,不需要做任何的改进。
Spark/Impala/Presto:跟hive共享元数据。从而只要在Hive里面创建了一张表,就可以直接用Spark SQL进行访问
4、Hive的重点
Hive的重点
存储格式:
(1)textfile
textfile为默认格式
存储方式:行存储
磁盘开销大 数据解析开销大
压缩的text文件 hive无法进行合并和拆分
(2)sequencefile
二进制文件,以的形式序列化到文件中
存储方式:行存储
可分割 压缩
一般选择block压缩
优势是文件和Hadoop api中的mapfile是相互兼容的。
(3)rcfile存储方式:
数据按行分块 每块按照列存储
压缩快 快速列存取
读记录尽量涉及到的block最少
读取需要的列只需要读取每个row group 的头部定义。
读取全量数据的操作 性能可能比sequencefile没有明显的优势
(4)orc存储方式:
数据按行分块 每块按照列存储
压缩快 快速列存取
效率比rcfile高,是rcfile的改良版本
(5)自定义格式
用户可以通过实现inputformat和 outputformat来自定义输入输出格式。
总结:
相比传统的行式存储引擎,列式存储引擎具有更高的压缩比,更少的IO操作而备受青睐(注:列式存储不是万能高效的,很多场景下行式存储仍更加高效),尤其是在数据列(column)数很多,但每次操作仅针对若干列的情景,列式存储引擎的性价比更高。在互联网大数据应用场景下,大部分情况下,数据量很大且数据字段数目很多,但每次查询数据只针对其中的少数几行,这时候列式存储是极佳的选择
压缩格式:
可使用Gzip,Bzip2等压缩算法压缩,压缩后的文件不支持split
三、体系架构
参考文档:https://blog.csdn.net/eric_sunah/article/details/49717289
(1)用户接口主要有三个:CLI,Client 和 WUI。其中最常用的是CLI,Cli启动的时候,会同时启动一个Hive副本。Client是Hive的客户端,用户连接至Hive Server。在启动 Client模式的时候,需要指出Hive Server所在节点,并且在该节点启动Hive Server。 WUI是通过浏览器访问Hive。
(2)Hive将元数据存储在数据库中,如mysql、derby。Hive中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。
(3)解释器、编译器、优化器完成HQL查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在HDFS中,并在随后有MapReduce调用执行。
(4)Hive的数据存储在HDFS中,大部分的查询、计算由MapReduce完成(包含*的查询,比如select * from tbl不会生成MapRedcue任务)。 Hive将元数据存储在RDBMS中。
四、Hive部署
五、Hive vs RDBMS异同点
1、RDBMS实时、Hive执行时间较长,适用于离线的场景。
2、RDBMS存在事务/insert/update,Hive早期版本0.1.4还存在,但一般不使用Hive来处理事务,hive一般都是批次执行任务,都是离线导入一个批次的数据。
3、RDBMS,节点数量是有限的,而且服务器质量性能是有要求的,而hive是构建在hadoop之上的,可以支持成千上万的节点,而且是分布式计算的。
六、环境搭建
现在:hadoop—2.8.1 Apache Hadoop
生产环境建议使用:CDH HDP
统一软件安装包下载路径:http://archive.cloudera.com/cdh5/cdh/5/
选择统一的cdh5.7.0尾号
hadoop-2.6.0-cdh5.7.0.tar.gz
hive-1.1.0-cdh5.7.0.tar.gz
机器目录结构相关:hadoop/hadoop hadoop000
/home/hadoop
software 存放安装软件
data 存放测试数据
source 存放源代码
lib 存放相关开发的jar包
app 软件安装目录
tmp 存放HDFS/Kafka/ZK 数据目录
shell 存放上课相关的脚本
maven_repo maven本地仓库
下载hive:wget http://archive.cloudera.com/cdh5/cdh/5/hive-1.1.0-cdh5.7.0.tar.gz
解压:tar -zxvf .... -C ~/app/
配置环境变量:~/.bash_profile
拷贝驱动:cp mysqldriver $HIVE_HOME/lib