一、什么是Hive?
Hive是基于Hadoop的一个数据仓库管理工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL(HQL)查询功能。本质是将SQL转换为MapReduce程序(默认)。
直接使用Hadoop MapReduce处理数据所面临的问题: 学习成本高,MapReduce实现复杂查询功能开发难度大,使用Hive接口采用类SQL语法,提供快速开发的能力避免了去写MapReduce,减少开发人员的学习成本功能。
二、Hive架构及组件
用户接口:包括 CLI、JDBC/ODBC、WebGUI。其中,CLI(command line interface)为Shell命令行;JDBC/ODBC是Hive的JAVA实现,与传统数据库JDBC类似;WebGUI是通过浏览器访问Hive。
元数据存储:通常是存储在关系数据库如 mysql/derby中。Hive 将元数据存储在数据库中。Hive 中的元数据包括表的名字,表的列和分区及其属性,表的属性,表的数据所在目录等。
解释器、编译器、优化器、执行器:完成 HQL 查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在 HDFS 中,并在随后有 MapReduce 调用执行。
三、Hive三种部署模式:
内嵌模式
1、元数据存储在内置的derby数据库中;
2、不需要单独配置metastore 也不需要单独启动metastore服务;
适合测试体验,适合单机单人使用。不同路径启动hive,每一个hive拥有一套自己的元数据,无法共享。
本地模式
1、元数据使用外置的RDBMS,常见的是MySQL数据库;
2、不需要单独配置metastore 也不需要单独启动metastore服务
每启动一次hive服务,都内置启动了一个metastore。如果使用多个客户端进行访问,就需要有多个Hiveserver服务,此时会启动多个Metastore可能出现资源竞争现象。
远程模式
1、元数据使用外置的RDBMS,常见的是MySQL数据库;
2、metastore服务单独配置,单独启动,全局唯一。
这样各个客户端只能通过这一个metastore服务访问Hive.
四、Hive客户端
Hive的第一代客户端
- bin/hive
- 直接访问metastore服务
- 第一代客户端属于shell脚本客户端,性能友好安全,方面存在不足,Hive已经不推荐使用,官方建议使用第二代客户端beeline
Hive的第二代客户端
- bin/beeline
- 此时还无法访问metastore服务,只能够访问Hiveserver2服务
- beeline客户端,需要先连接metastore服务,再使用
# 在安装hive的服务器上(主机1),首先启动metastore服务,再启动hiveserver2服务nohup /export/server/apache-hive-3.1.2-bin/bin/hive --service metastore &nohup /export/server/apache-hive-3.1.2-bin/bin/hive --service hiveserver2 &# 在任意机器(如机器2)上使用beeline客户端访问/export/server/apache-hive-3.1.2-bin/bin/beeline # 启动beeline后进入如下界面beeline>! connect jdbc:hive2://node1:10000 #jdbc访问HS2服务Connecting to jdbc:hive2://node1:10000Enter username for jdbc:hive2://node1:10000: root #用户名 要求具备HDFS读写权限Enter password for jdbc:hive2://node1:10000:
hiveserver2服务启动后无法立即使用, 类似于HDFS的安全模式,大概要半分钟到一分钟才能开始使用
版权归原作者 思屿` 所有, 如有侵权,请联系我们删除。