把 apache-hive-3.1.2-bin.tar.gz 上传到 linux 的 /opt/software 目录下
将 /opt/software/ 目录下的 apache-hive-3.1.2-bin.tar.gz 到 /opt/module/ 目录下面
tar -zxvf apache-hive-3.1.2-bin.tar.gz -C /opt/module/
修改解压后的目录名称为hive
mv apache-hive-3.1.2-bin/ /opt/module/hive1.2 添加环境变量
修改/etc/profile.d/my_env.sh文件,将hive的/bin目录添加到环境变量
[atguigu@hadoop102 hive]$ sudo vim /etc/profile.d/my_env.sh …… #HIVE_HOME export HIVE_HOME=/opt/module/hive export PATH=$PATH:$HIVE_HOME/bin [atguigu@hadoop102 hive]$ source /etc/profile1.3 初始化Derby元数据库
在hive根目录下,使用/bin目录中的schematool命令初始化hive自带的Derby元数据库
schematool -dbType derby -initSchema1.4 如何解决jar包冲突
执行上述初始化元数据库时,会发现存在jar包冲突问题,现象如下:
SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/opt/module/hive/lib/log4j-slf4j-impl-2.10.0.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Found binding in [jar:file:/opt/module/hadoop-3.1.3/share/hadoop/common/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory] metastore connection URL: jdbc:derby:;databaseName=metastore_db;create=true metastore Connection Driver : org.apache.derby.jdbc.EmbeddedDriver metastore connection User: APP Starting metastore schema initialization to 3.1.0 Initialization script hive-schema-3.1.0.derby.sql
解决jar冲突问题,只需要将hive的 /lib 目录下的 log4j-slf4j-impl-2.10.0.jar 重命名即可
mv lib/log4j-slf4j-impl-2.10.0.jar lib/log4j-slf4j-impl-2.10.0.bak二、启动Hive 2.1 执行/bin目录下的hive命令
执行/bin目录下的hive命令,就可以启动hive,并通过cli方式连接到hive
bin/hive2.2 Hive简单使用
hive> show databases; // 查看当前所有的数据库 OK default Time taken: 0.472 seconds, Fetched: 1 row(s) hive> show tables; // 查看当前所有的表 OK Time taken: 0.044 seconds hive> create table test1(id int); // 创建表test1,表中只有一个字段,字段类型是int OK Time taken: 0.474 seconds hive> insert into test1 values(1001); // 向test1表中插入数据 Query ID = atguigu_20211018153727_586935da-100d-4d7e-8a94-063d373cc5dd Total jobs = 3 …… Hadoop job information for Stage-1: number of mappers: 1; number of reducers: 1 …… Stage-Stage-1: Map: 1 Reduce: 1 Cumulative CPU: 6.19 sec HDFS Read: 12769 HDFS Write: 208 SUCCESS Total MapReduce CPU Time Spent: 6 seconds 190 msec OK Time taken: 31.901 second hive> select * from test1; // 查看test1表中所有数据 OK 1001 Time taken: 0.085 seconds, Fetched: 1 row(s)
Hive 默认使用的元数据库为 derby 并且部署方式是内嵌式,在开启Hive之后就会独占元数据库,且不与其他客户端共享数据,如果想多窗口操作就会报错,操作比较局限。因此我们可以直接采用MySQL作为元数据库或者使用元数据服务的方式部署 metaStore元数据库,就可以支持多窗口操作。
三、元数据的三种访问方式 3.1 元数据库内嵌模式在此模式中会连接到一个in-memory的数据库Derby中,一般用于单元测试。
在内嵌模式下,命令行执行 jps –ml 命令,只能看到一个CliDriver进程。
jps –ml
7170 sun.tools.jps.Jps -ml 2467 org.apache.hadoop.hdfs.server.namenode.NameNode 2676 org.apache.hadoop.hdfs.server.datanode.DataNode 3364 org.apache.hadoop.yarn.server.nodemanager.NodeManager 3656 org.apache.hadoop.mapreduce.v2.hs.JobHistoryServer 6127 org.apache.hadoop.util.RunJar /opt/module/hive/lib/hive-cli-3.1.2.jar org.apache.hadoop.hive.cli.CliDriver3.2 元数据库直连模式(本地模式)
通过网络连接到一个关系型数据库中,上面我们配置元数据库位MySQL时,就是这种模式
本地模式采用外部数据库来存储元数据,目前支持的数据库有:MySQL、Postgres、Oracle、MS SQL Server.在这里我们使用 MySQL。
本地模式不需要单独起 metaStore 服务,用的是跟 hive 在同一个进程里的 metaStore 服务。也就是说当你启动一个hive 服务,里面默认会帮我们启动一个 metaStore 服务。
hive 会根据conf/目录下hive-site.xml的 hive.metastore.uris 参数值来判断,如果为空,则为本地模式。
本地模式下hive的配置主需要指定mysql的相关信息即可。
3.2.1 配置mysql 3.2.1.1 MySQL安装部署 1、安装检查检查当前系统是否安装过Mysql,如果存在就是用下列命令移除,如果不存在则忽略。
rpm -qa|grep mariadb
如果有安装过,会显示有信息,使用下列命令移除安装。如果没有直接下一步就好
sudo rpm -e --nodeps mariadb-libs2、执行rpm安装
执行rpm安装,需要将以下安装包导入到要安装的服务器中,并放在某一个文件夹下,
mysql-community-client-5.7.28-1.el7.x86_64.rpm mysql-community-common-5.7.28-1.el7.x86_64.rpm mysql-community-devel-5.7.28-1.el7.x86_64.rpm mysql-community-embedded-5.7.28-1.el7.x86_64.rpm mysql-community-embedded-compat-5.7.28-1.el7.x86_64.rpm mysql-community-embedded-devel-5.7.28-1.el7.x86_64.rpm mysql-community-libs-5.7.28-1.el7.x86_64.rpm mysql-community-libs-compat-5.7.28-1.el7.x86_64.rpm mysql-community-server-5.7.28-1.el7.x86_64.rpm mysql-community-test-5.7.28-1.el7.x86_64.rpm
在该文件夹中严格按照如下顺序执行
sudo rpm -ivh mysql-community-common-5.7.28-1.el7.x86_64.rpm sudo rpm -ivh mysql-community-libs-5.7.28-1.el7.x86_64.rpm sudo rpm -ivh mysql-community-libs-compat-5.7.28-1.el7.x86_64.rpm sudo rpm -ivh mysql-community-client-5.7.28-1.el7.x86_64.rpm sudo rpm -ivh mysql-community-server-5.7.28-1.el7.x86_64.rpm3、删除mysql的数据存储目录下的所有数据
删除mysql的数据存储目录下的所有数据,目录地址在 /etc/my.cnf 文件中 datadir 指向的目录下的所有内容
查看datadir的值:
vim /etc/my.cnf
[mysqld] datadir=/var/lib/mysql //删除这个文件夹下的内容
删除/var/lib/mysql目录下的所有内容:
cd /var/lib/mysql sudo rm -rf ./* //千万注意执行命令的位置,否则库就没了4、初始化数据库
这个是mysql数据库安装后的初始化
sudo mysqld --initialize --user=mysql5、查看临时密码并复制
初始化完成后,查看临时生成的root用户的密码,也是首次登录msql的密码
sudo cat /var/log/mysqld.log
2021-10-18T08:50:32.172049Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details). 2021-10-18T08:50:32.364322Z 0 [Warning] InnoDB: New log files created, LSN=45790 2021-10-18T08:50:32.397350Z 0 [Warning] InnoDB: Creating foreign key constraint system tables. 2021-10-18T08:50:32.453522Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 73e2af3c-2ff0-11ec-af41-000c29830057. 2021-10-18T08:50:32.454765Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened. 2021-10-18T08:50:32.978960Z 0 [Warning] CA certificate ca.pem is self signed. 2021-10-18T08:50:33.314317Z 1 [Note] A temporary password is generated for root@localhost: OU+*c.C9FZy;
其中**OU+*c.C9FZy;**是你的初始密码,将其复制下来。
6、启动MySQL服务sudo systemctl start mysqld7、登录MySQL数据库
mysql -uroot -p Enter password: (你的暂时密码) //输入临时生成的密码,刚才复制的密码8、修改root用户的密码
mysql> set password = password("新密码"); //输入新密码,记得加分号
9、修改mysql库下的user表中的root用户允许任意ip连接
mysql> update mysql.user set host='%' w here user='root';10、刷新,使得修改生效
mysql> flush privileges;3.2.1.2 拷贝驱动
将MySQL的JDBC驱动拷贝到Hive的lib目录下
cp mysql-connector-java-5.1.37.jar /opt/module/hive/lib3.2.1.3 配置metastore到MySql
在$HIVE_HOME/conf 目录下新建 hive-site.xml 文件
vim conf/hive-site.xml
添加如下内容
3.2.1.4 Hive初始化元数据库javax.jdo.option.ConnectionURL jdbc:mysql://hadoop102:3306/metastore?useSSL=false javax.jdo.option.ConnectionDriverName com.mysql.jdbc.Driver javax.jdo.option.ConnectionUserName root javax.jdo.option.ConnectionPassword 你的密码 hive.metastore.warehouse.dir /user/hive/warehouse hive.metastore.schema.verification false hive.metastore.event.db.notification.api.auth false
1)登陆MySQL
mysql -uroot -p 你的密码
2)新建Hive元数据库
mysql> create database metastore; mysql> quit;
3)初始化Hive元数据库
bin/schematool -initSchema -dbType mysql -verbose
4)先启动hadoop集群,在启动Hive,查看是否安装成功。
3.3 使用 metaStore 服务访问元数据库模式在服务器端启动metaStore服务,客户端利用Thrift协议通过metaStore服务访问元数据库。元数据服务的访问方式更适合在生产环境中部署使用,相比内嵌式,该方式更加的灵活。
将Mysql做为元数据库,部署元数据服务
在 $HIVE_HOME/conf中 的 hive-site.xml 文件中添加如下配置信息
hive.metastore.uris
thrift://hadoop102:9083
注意:在配置了此参数后,启动hive之前必须先启动元数据服务,否则,hive启动后无法连接到元数据服务
启动元数据服务:
hive --service metastore //启动成功显示如下信息 2021-10-18 18:22:24: Starting Hive metastore Server
注意: 启动服务后,该窗口会被阻塞,不能再操作,需打开一个新的shell窗口做别的操作。
四、hive的两种访问方式 4.1 cil命令行方式在前面的操作中,我们都是通过cli的方式访问hive的。
我们可以切身的体会到,通过cli的方式访问hive的不足,如:cli太过笨重,需要hive的jar支持。
4.2 JDBC方式JDBC方式,本质上是将hive包装为服务发布出去,开发者使用JDBC的方式连接到服务,从而操作hive。
1、在 hive-site.xml 文件中添加如下配置信息
hive.server2.thrift.bind.host
hadoop102
hive.server2.thrift.port
10000
2、启动hive服务
这里需要考虑元数据的访问方式,如何使用元数据服务的模式,需要提前开启元数据服务
开启元数据服务:
hive --service metastore
开启hive服务
hive --service hiveserver2
3、启动beeline客户端,需要等到hiveserver2完全启动。(它会先去尝试启动tez、spark等引擎,都没有时最后才会使用MR)
beeline -u jdbc:hive2://hadoop102:10000 -n atguigu
4、看到如下界面后,证明连接成功,可以进行查询了。
Connecting to jdbc:hive2://hadoop102:10000 Connected to: Apache Hive (version 3.1.2) Driver: Hive JDBC (version 3.1.2) Transaction isolation: TRANSACTION_REPEATABLE_READ Beeline version 3.1.2 by Apache Hive 0: jdbc:hive2://hadoop102:10000>
eeline客户端,需要等到hiveserver2完全启动。(它会先去尝试启动tez、spark等引擎,都没有时最后才会使用MR)
beeline -u jdbc:hive2://hadoop102:10000 -n atguigu
4、看到如下界面后,证明连接成功,可以进行查询了。
Connecting to jdbc:hive2://hadoop102:10000 Connected to: Apache Hive (version 3.1.2) Driver: Hive JDBC (version 3.1.2) Transaction isolation: TRANSACTION_REPEATABLE_READ Beeline version 3.1.2 by Apache Hive 0: jdbc:hive2://hadoop102:10000>



