文章目录
- 1 Hive概述
- 2 Hive部署
- 2.1 规划
- 2.2 安装软件
- 3 Hive体验
- 4 Hive客户端
- 4.1 HiveServer2 服务
- 4.2 DataGrip
- 5 问题集
- 5.1 Could not open client transport with JDBC Uri
- 结语
1 Hive概述
Apache Hive是一个开源的数据仓库查询和分析工具,最初由Facebook开发,并后来捐赠给Apache软件基金会。Hive允许用户使用SQL语言来查询和分析存储在Hadoop分布式文件系统(HDFS)中的大规模数据集。它的设计目标是使非技术用户能够轻松地在Hadoop集群上执行数据查询和分析任务,而无需编写复杂的MapReduce代码。
以下是Hive的主要特点和概述:
- SQL-Like查询语言: Hive提供了一种类似于SQL的查询语言,称为HiveQL(Hive Query Language),它允许用户使用熟悉的SQL语法来查询和操作数据。这使得数据库管理员和分析师能够更容易地利用Hadoop集群进行数据分析。
- 元数据存储: Hive维护了一个元数据存储,其中包含有关数据表、分区、列、数据类型和表之间关系的信息。这使得用户可以在不了解底层数据存储结构的情况下查询数据。
- 扩展性: Hive是高度可扩展的,可以处理大规模数据集。它允许用户将数据表分成分区,并支持分区级别的操作,从而提高了查询性能。
- UDF(用户定义函数): Hive允许用户编写自定义函数,以满足特定的数据处理需求。这些自定义函数可以使用Java或Python编写,并与HiveQL一起使用。
- 集成: Hive可以与其他Hadoop生态系统工具集成,如Hadoop MapReduce、Apache HBase、Apache Spark等。这意味着用户可以在不同的工具之间共享数据并执行复杂的数据处理任务。
- 可视化工具: 虽然Hive本身是一个命令行工具,但也有许多可视化工具和商业智能平台(如Tableau、QlikView)支持Hive,使用户能够使用图形界面进行数据分析和报告生成。
- 安全性: Hive提供了基于SQL标准的权限管理机制,以确保只有授权的用户可以访问和修改数据。
- 数据格式支持: Hive支持多种数据格式,包括文本、Parquet、ORC(Optimized Row Columnar)等,可以根据需求选择最适合的格式。
Hive通常用于数据仓库、数据分析、报告生成和数据ETL(抽取、转换、加载)等用例,特别是对于那些需要在Hadoop集群上处理大规模数据的组织。它提供了一种方便的方式来查询和分析分布式存储的数据,使更多的人能够从大数据中获得有价值的见解。
Apache Hive是一个开源的数据仓库查询和分析工具,最初由Facebook开发,并后来捐赠给Apache软件基金会。Hive允许用户使用SQL语言来查询和分析存储在Hadoop分布式文件系统(HDFS)中的大规模数据集。它的设计目标是使非技术用户能够轻松地在Hadoop集群上执行数据查询和分析任务,而无需编写复杂的MapReduce代码。
以下是Hive的主要特点和概述:
- SQL-Like查询语言: Hive提供了一种类似于SQL的查询语言,称为HiveQL(Hive Query Language),它允许用户使用熟悉的SQL语法来查询和操作数据。这使得数据库管理员和分析师能够更容易地利用Hadoop集群进行数据分析。
- 元数据存储: Hive维护了一个元数据存储,其中包含有关数据表、分区、列、数据类型和表之间关系的信息。这使得用户可以在不了解底层数据存储结构的情况下查询数据。
- 扩展性: Hive是高度可扩展的,可以处理大规模数据集。它允许用户将数据表分成分区,并支持分区级别的操作,从而提高了查询性能。
- UDF(用户定义函数): Hive允许用户编写自定义函数,以满足特定的数据处理需求。这些自定义函数可以使用Java或Python编写,并与HiveQL一起使用。
- 集成: Hive可以与其他Hadoop生态系统工具集成,如Hadoop MapReduce、Apache HBase、Apache Spark等。这意味着用户可以在不同的工具之间共享数据并执行复杂的数据处理任务。
- 可视化工具: 虽然Hive本身是一个命令行工具,但也有许多可视化工具和商业智能平台(如Tableau、QlikView)支持Hive,使用户能够使用图形界面进行数据分析和报告生成。
- 安全性: Hive提供了基于SQL标准的权限管理机制,以确保只有授权的用户可以访问和修改数据。
- 数据格式支持: Hive支持多种数据格式,包括文本、Parquet、ORC(Optimized Row Columnar)等,可以根据需求选择最适合的格式。
核心的功能:
- 元数据管理
- SQL解析
2 Hive部署
2.1 规划
Hive 是单机工具,只需要部署在一台服务器即可。
Hive 虽然是单机的,但是它可以提交分布式运行的
MapReduce 程序运行。
规划
我们知道 Hive 是单机工具后,就需要准备一台服务器供 Hive 使用即可。
同时 Hive 需要使用元数据服务,即需要提供一个关系型数据库,我们也选择一台服务器安装关系型数据库即可
机器 | 服务 |
---|---|
node1 | Hive |
node1 | Mysql |
2.2 安装软件
步骤1:安装Mysql5.7
# 更新秘钥
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
# 安装mysql yum库
rpm -Uvh http://repo.mysql.com//mysql57-community-release-el7-7.noarch.rpm
# yum安装mysql
yum -y install mysql-community-server
# 启动mysql
systemctl start mysqld
# 设置msyql开机自启
systemctl enable mysqld
# 检查Mysql服务状态
systemctl status mysqld
# 第一次启动mysql会在日志文件中生成root用户的一个随机密码
cat /var/log/mysqld.log | grep "password"
- 连接mysql 我们是做实验用,设置简单密码(生成中不要这样子搞)
set global validate_password_policy=LOW;
set global validate_password_length=4;
alter user 'root'@'localhost' identified by '123456';
grant all privileges on *.* to root@"%" identified by '123456' with grant option;
flush privileges;
步骤2:配置Hadoop
Hive的运行依赖Hadoop(HDFS、MapReduce、YARN都依赖),同时涉及到HDFS文件系统的访问,所有要配置Hadoop的代理用户,即设置Hadoop用户允许代理(模拟)其他用户。
配置如下内容在Hadoop的core-site.xml中,并分发到其他节点,且重启HDFS集群
<property>
<name>hadoop.proxyuser.hadoop.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.hadoop.groups</name>
<value>*</value>
</property>
步骤3:下载解压Hive
-
node1切换到hadoop用户
su - hadoop
-
下载Hive安装包或者本地上传
http://archive.apache.org/dist/hive/hive-3.1.3/apache-hive-3.1.3-bin.tar.gz
-
解压
tar -zxvf apache-hive-3.1.3-bin.tar.gz -C /export/server/
-
设置软连接
ln -s /export/server/apache-hive-3.1.3-bin.tar.gz /export/server/hive
步骤4:提供Mysql 驱动包
-
下载或者上传Mysql驱动包
https:// repo1.maven.org/maven2/mysql/mysql-connector-java/5.1.34/mysql-connector-java-5.1.34.jar
-
将下载好的Mysql驱动包移入Hive安装目录下lib目录内
mv mysql-connector-java-5.1.34.jar /export/server/hive/lib/
步骤5:配置Hive
- 在 Hive 的 conf 目录内,新建 hive-env.sh 文件,填入以下环境变量内容:
export HADOOP_HOME=/export/server/hadoop
export HIVE_CONF_DIR=/export/server/hive/conf
export HIVE_AUX_JARS_PATH=/export/server/hive/lib
-
在 Hive 的 conf 目录内,新建 hive-site.xml 文件,填入以下内容
<configuration> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://node1:3306/hive?createDatabaseIfNotExist=true&useSSL=false&useUnicode=true&characterEncoding=UTF-8</value> </property> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.jdbc.Driver</value> </property> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>root</value> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>123456</value> </property> <property> <name>hive.server2.thrift.bind.host</name> <value>node1</value> </property> <property> <name>hive.metastore.uris</name> <value>thrift://node1:9083</value> </property> <property> <name>hive.metastore.event.db.notification.api.auth</name> <value>false</value> </property> </configuration>
- 现在使用的是5.1.34 Mysq驱动包,配置的连接驱动也是旧版废弃的
步骤6:初始化元数据库
-
在Mysql数据库中新建数据库:hive
create database hive charset utf8;
-
执行元数据库初始化命令
cd /export/server/hive bin/schematool -initSchema -dbType mysql -verbos
打印
Initialization script completed schemaTool completed
初始化完成
步骤7:启动Hive
-
当前用户为hadoop
-
确保Hive文件夹所属为hadoop用户
-
创建hive日志文件夹
mkdir /export/server/hive/logs
-
启动元数据管理服务
# 前台启动 bin/hive --service metastore # 后台启动 nohup bin/hive --service metastore >> logs/metastore.log 2>&1 &
-
启动客户端,二选一(当前简单测试选择 Hive Shell)
-
Hive Shell方式:可以直接写SQL
/bin/hive
-
Hive ThriftServer:不可以直接写SQL,需要外部客户端链接使用
bin/hive --service hiveserver2
-
3 Hive体验
首先确保启动了metastore服务,可以执行
bin/hive
进入hive shell环境中,可以执行SQL语句,如下图所示:
-
创建表
create table test(id int,name string,gender string);
-
插入数据
insert into test values(1, '爱因斯坦', '男'),(2, '麦克斯韦', '男'),(3, '居里夫人', '女');
-
查询数据
select gender, count(*) cnt from test group by gender;
-
验证Hive的数据存储:Hive的数据存储在HDFS的:
/user/hive/warehouse
,如下图所示
- 验证SQL语句启动的MapReduce程序:打开YARN的WEB UI页面查看任务情况-
http://node1:8088
,如下图所示
4 Hive客户端
4.1 HiveServer2 服务
在启动 Hive 的时候,除了必备的 Metastore 服务外,我们前面提过有 2 种方式使用 Hive :
• 方式 1 : bin/hive 即 Hive 的 Shell 客户端,可以直接写 SQL
• 方式 2 : bin/hive --service hiveserver2
后台执行脚本:
nohup bin/hive --service hiveserver2 >> logs/hiveserver2.log 2>&1 &
bin/hive --service metastore ,启动的是元数据管理服务
bin/hive --service hiveserver2 ,启动的是 HiveServer2 服务
HiveServer2 是 Hive 内置的一个 ThriftServer 服务,提供 Thrift 端口供其它客户端链接
可以连接 ThriftServer 的客户端有:
• Hive 内置的 beeline 客户端工具(命令行工具)
• 第三方的图形化 SQL 工具,如 DataGrip 、 DBeaver 、 Navicat 等
# 先启动 metastore 服务 然后启动 hiveserver2 服务
nohup bin/hive --service metastore >> logs/metastore.log 2>&1 &
nohup bin/hive --service hiveserver2 >> logs/hiveserver2.log 2>&1 &
4.2 DataGrip
我们这里以DataGrip为例,其他客户端自行测试。
步骤1:创建工程文件夹
E:\gaogzhen\projects\bigdata\DataGripProjects\hive-demo
步骤2:DataGrip创建新工程并关联本地文件夹
步骤3:DataGrip连接Hive
1693897609904)
步骤4:配置Hive JDBC驱动
连接成功,如下图所示:
5 问题集
5.1 Could not open client transport with JDBC Uri
-
报错内容
Error: Could not open client transport with JDBC Uri: jdbc:hive2://localhost:10000: Failed to open new session: java.lang.RuntimeException: org.apache.hadoop.security.AccessControlException: Permission denied: user=root, access=EXECUTE , inode="/tmp":hadoop:supergroup:drwx------
-
解决方案参考下面连接4,修改hdfs /tmp访问权限,前面我们配置了hadoop用户代理,不知道为啥没生效
结语
如果小伙伴什么问题或者指教,欢迎交流。
❓QQ:806797785
参考链接:
[1]大数据视频[CP/OL].2020-04-16.
[2]0102阿里云配置3台ECS服务器-大数据学习[CP/OL].
[3]0201hdfs集群部署-hadoop-大数据学习[CP/OL].
[4]beeline连接hive2报错Permission denied[CP/OL].