Hive产生背景
Apache Hive数据仓库软件可以使用SQL方便地阅读、编写和管理分布在分布式存储中的大型数据集。结构可以投射到已经存储的数据上。提供了一个命令行工具和JDBC驱动程序来将用户连接到Hive。
由Facebook开源,最初用于解决海量结构化的日志数据统计问题
MapReduce编程的不便性
HDFS上的文件缺少Schema(字段名,字段类型等)
Hive是什么
1、构建在Hadoop之上的数据仓库
2、Hive定义了一种类SQL查询语言:HQL(类似SQL但不完全相同)
3、通常用于进行离线数据处理(采用MapReduce)
4、底层支持多种不同的执行引擎(Hive on MapReduce、Hive on Tez、Hive on Spark)
5、支持多种不同的压缩格式、存储格式以及自定义函数(压缩:GZIP、LZO、Snappy、BZIP2.. ; 存储:TextFile、SequenceFile、RCFile、ORC、Parquet ; UDF:自定义函数)
Apache HiveApache Hive数据仓库软件为分布式存储的大数据集上的读、写、管理提供很大方便,同时还可以用SQL语法在大数据集上查询。
1、是一种易于对数据实现提取、转换、加载的工具(ETL)的工具。可以理解为数据清洗分析展现。2、它有一种将大量格式化数据强加上结构的机制。3、它可以分析处理直接存储在hdfs中的数据或者是别的数据存储系统中的数据,如hbase。4、查询的执行经由mapreduce完成。5、hive可以使用存储过程6、通过Apache YARN和Apache Slider实现亚秒级的查询检索。
Hive架构
基本组成
1、 用户接口
CLI,Shell 终端命令行(Command Line Interface),采用交互形式使用 Hive 命令行与 Hive进行交互,最常用(学习,调试,生产)JDBC/ODBC,是 Hive 的基于 JDBC 操作提供的客户端,用户(开发员,运维人员)通过这连接至 Hive server 服务Web UI,通过浏览器访问 Hive
2、Thrift Serve
Thrift 是 Facebook 开发的一个软件框架,可以用来进行可扩展且跨语言的服务的开发,Hive 集成了该服务,能让不同的编程语言调用 Hive 的接口
3 、 元数据存储
元数据,通俗的讲,就是存储在 Hive 中的数据的描述信息。Hive 中的元数据通常包括:表的名字,表的列和分区及其属性,表的属性(内部表和外部表),表的数据所在目录Metastore 默认存在自带的 Derby 数据库中。缺点就是不适合多用户操作,并且数据存储目录不固定。数据库跟着 Hive 走,极度不方便管理。
解决方案:通常存我们自己创建的 MySQL 库( 本地 或 远程)Hive 和 MySQL 之间通过 MetaStore 服务交互。
4 、Driver : 编译器 (Compiler) ) ,优化器 (Optimizer) ) ,执行器 (Executor )
Driver 组件完成 HQL 查询语句从词法分析,语法分析,编译,优化,以及生成逻辑执行
计划的生成。生成的逻辑执行计划存储在 HDFS 中,并随后由 MapReduce 调用执行
Hive 的核心是驱动引擎, 驱动引擎由四部分组成:
(1) 解释器:解释器的作用是将 HiveSQL 语句转换为抽象语法树(AST)
(2) 编译器:编译器是将语法树编译为逻辑执行计划
(3) 优化器:优化器是对逻辑执行计划进行优化
(4) 执行器:执行器是调用底层的运行框架执行逻辑执行计划
Hive工作原理
接收到一个sql,后面做的事情包括:
1.词法分析/语法分析:使用antlr将SQL语句解析成抽象语法树-AST
2.语义分析:从Megastore获取模式信息,验证SQL语句中队表名,列名,以及数据类型的检查和隐式转换,以及Hive提供的函数和用户自定义的函数(UDF/UAF)
3.逻辑计划生产:生成逻辑计划-算子树
4.逻辑计划优化:对算子树进行优化,包括列剪枝,分区剪枝,谓词下推等
5.物理计划生成:将逻辑计划生产包含由MapReduce任务组成的DAG的物理计划
6.物理计划执行:将DAG发送到Hadoop集群进行执行
7.将查询结果返回
Hive常见故障
1、所有Hive无法登陆,显示404
排查步骤:看各个节点组件是否异常;很多集群出现404,发现报错都是指向访问其中一个数据库;该数据库为元数据库,被退回了,恢复找回后恢复正常。
2、Hive任务运行时报异常解决思路
解决方法:首先确认是否使用Hadoop用户提交任务,确认该任务已经提交到yarn集群。
3、hdfs界面已授权,但是hive无权限
解决方法:主节点创建对应用户和用户组
4、hive目录/data/emr/hive/tmp里面的文件有的创建不了
原因分析:通过hive命令启动hive cli,而因为所在节点/data/emr/hive/tmp(或/tmp目录)目录一直未清理,创建目录数量(Inode数量)到上限,所以创建目录失败了。
解决方法:建议客户定期的删除/data/emr/hive/tmp(或/tmp目录)目录下的文件,比如修改时间为1天以前的目录。
5、Hive日志被删除。两台机器的配置一样,一台机器日志可以保留一天,另外一台机器日志只能保留一个小时。
解决思路:log4j2日志配置一致,怀疑有定期删除的脚本,需要确认。