Apache Hive是一个开源的数据仓库查询和分析工具,最初由Facebook开发,并后来捐赠给Apache软件基金会。Hive允许用户使用SQL语言来查询和分析存储在Hadoop分布式文件系统(HDFS)中的大规模数据集。它的设计目标是使非技术用户能够轻松地在Hadoop集群上执行数据查询和分析任务,而无需编写复杂的MapReduce代码。
以下是Hive的主要特点和概述:
Hive通常用于数据仓库、数据分析、报告生成和数据ETL(抽取、转换、加载)等用例,特别是对于那些需要在Hadoop集群上处理大规模数据的组织。它提供了一种方便的方式来查询和分析分布式存储的数据,使更多的人能够从大数据中获得有价值的见解。
Apache Hive是一个开源的数据仓库查询和分析工具,最初由Facebook开发,并后来捐赠给Apache软件基金会。Hive允许用户使用SQL语言来查询和分析存储在Hadoop分布式文件系统(HDFS)中的大规模数据集。它的设计目标是使非技术用户能够轻松地在Hadoop集群上执行数据查询和分析任务,而无需编写复杂的MapReduce代码。
以下是Hive的主要特点和概述:
核心的功能:
Hive 是单机工具,只需要部署在一台服务器即可。
Hive 虽然是单机的,但是它可以提交分布式运行的
MapReduce 程序运行。
规划
我们知道 Hive 是单机工具后,就需要准备一台服务器供 Hive 使用即可。
同时 Hive 需要使用元数据服务,即需要提供一个关系型数据库,我们也选择一台服务器安装关系型数据库即可
机器 | 服务 |
---|---|
node1 | Hive |
node1 | Mysql |
步骤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"
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集群
hadoop.proxyuser.hadoop.hosts
*
hadoop.proxyuser.hadoop.groups
*
步骤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
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 文件,填入以下内容
javax.jdo.option.ConnectionURL
jdbc:mysql://node1:3306/hive?createDatabaseIfNotExist=true&useSSL=false&useUnicode=true&characterEncoding=UTF-8
javax.jdo.option.ConnectionDriverName
com.mysql.jdbc.Driver
javax.jdo.option.ConnectionUserName
root
javax.jdo.option.ConnectionPassword
123456
hive.server2.thrift.bind.host
node1
hive.metastore.uris
thrift://node1:9083
hive.metastore.event.db.notification.api.auth
false
步骤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
首先确保启动了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
,如下图所示
http://node1:8088
,如下图所示在启动 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 &
我们这里以DataGrip为例,其他客户端自行测试。
步骤1:创建工程文件夹
E:\gaogzhen\projects\bigdata\DataGripProjects\hive-demo
步骤2:DataGrip创建新工程并关联本地文件夹
步骤3:DataGrip连接Hive
1693897609904)
步骤4:配置Hive JDBC驱动
连接成功,如下图所示:
报错内容
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].