【Hive】Hive安装

打印 上一主题 下一主题

主题 989|帖子 989|积分 2967

Hive

第一章 Hive的底子知识
第二章 Hive安装
第三章 DDL(Data Definition Language)数据界说
第四章 DML(Data Manipulation Language)数据操作
第五章 Hive查询
第六章 Hive的底子知识
第七章 Hive函数
第八章 分区表和分桶表
第九章 文件格式和压缩
第十章 企业级调优
附录:常见错误及解决方案

  
Hive安装地址

1)Hive官网地址

Hive官网地址
2)文档检察地址

文档检察地址
3)下载地址

下载地址
4)github地址

github地址
Hive安装部署

安装Hive

1)把apache-hive-3.1.3-bin.tar.gz上传到Linux的/opt/software目录下
2)解压apache-hive-3.1.3-bin.tar.gz到/opt/module/目录下面
  1. tar -zxvf /opt/software/apache-hive-3.1.3-bin.tar.gz -C /opt/module
复制代码
3)修改apache-hive-3.1.3-bin.tar.gz的名称为hive
  1. mv /opt/module/apache-hive-3.1.3-bin/ /opt/module/hive
复制代码
4)修改/etc/profile.d/my_env.sh,添加环境变量
  1. sudo vim /etc/profile.d/my_env.sh
复制代码
(1)添加内容
  1. #HIVE_HOME
  2. export HIVE_HOME=/opt/module/hive
  3. export PATH=$PATH:$HIVE_HOME/bin
复制代码
(2)source一下
  1. source /etc/profile.d/my_env.sh
复制代码
5)初始化元数据库(默认是derby数据库)
  1. bin/schematool -dbType derby -initSchema
复制代码
启动并利用Hive

1)启动Hive
在Hive目录下
  1. bin/hive
复制代码
2)利用Hive
  1. hive> show databases;
  2. hive> show tables;
  3. hive> create table stu(id int, name string);
  4. hive> insert into stu values(1,"ss");
  5. hive> select * from stu;
复制代码
观察HDFS的路径/user/hive/warehouse/stu,领会Hive与Hadoop之间的关系
Hive中的表在Hadoop中是目录;Hive中的数据在Hadoop中是文件。


3)在Xshell窗口中开启另一个窗口开启Hive,在/tmp/atguigu目录下监控hive.log文件
  1. tail -f hive.log
复制代码
  1. Caused by: ERROR XSDB6: Another instance of Derby may have already booted the database /opt/module/hive/metastore_db.
  2.         at org.apache.derby.iapi.error.StandardException.newException(Unknown Source)
  3.         at org.apache.derby.iapi.error.StandardException.newException(Unknown Source)
  4.         at org.apache.derby.impl.store.raw.data.BaseDataFileFactory.privGetJBMSLockOnDB(Unknown Source)
  5.         at org.apache.derby.impl.store.raw.data.BaseDataFileFactory.run(Unknown Source)
  6. ...
复制代码
缘故原由在于Hive默认利用的元数据库为derby。derby数据库的特点是同一时间只答应一个客户端访问。假如多个Hive客户端同时访问,就会报错。由于在企业开辟中,都是多人协作开辟,需要多客户端同时访问Hive,怎么解决呢?我们可以将Hive的元数据改为用MySQL存储,MySQL支持多客户端同时访问。

4)起首退出hive客户端。然后在Hive的安装目录下将derby.log和metastore_db删除,顺便将HDFS上目录删除
  1. --退出hive客户端
  2. hive> quit;
  3. --将derby.log和metastore_db删除
  4. rm -rf derby.log metastore_db
  5. hadoop fs -rm -r /user
复制代码
5)删除HDFS中/user/hive/warehouse/stu中数据


MySQL安装

基于docker安装MySQL8.x
Linux安装MySQL5.x
配置Hive元数据存储到MySQL


配置元数据到MySQL

1)新建Hive元数据库
  1. create database metastore;
复制代码
2)将MySQL的JDBC驱动拷贝到Hive的lib目录下。
  1. cp mysql-connector-java-5.1.37.jar $HIVE_HOME/lib
复制代码
3)在$HIVE_HOME/conf目录下新建hive-site.xml文件
  1. vim $HIVE_HOME/conf/hive-site.xml
复制代码
添加如下内容:
  1. <?xml version="1.0"?>
  2. <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
  3. <configuration>
  4.     <!-- jdbc连接的URL -->
  5.     <property>
  6.         <name>javax.jdo.option.ConnectionURL</name>
  7.         <value>jdbc:mysql://MySQL地址:3306/metastore?useSSL=false</value>
  8.     </property>
  9.    
  10.     <!-- jdbc连接的Driver-->
  11.     <property>
  12.         <name>javax.jdo.option.ConnectionDriverName</name>
  13.         <value>com.mysql.jdbc.Driver</value>
  14.     </property>
  15.    
  16.         <!-- jdbc连接的username-->
  17.     <property>
  18.         <name>javax.jdo.option.ConnectionUserName</name>
  19.         <value>MySQL账号</value>
  20.     </property>
  21.     <!-- jdbc连接的password -->
  22.     <property>
  23.         <name>javax.jdo.option.ConnectionPassword</name>
  24.         <value>MySQL密码</value>
  25.     </property>
  26.     <!-- Hive默认在HDFS的工作目录 -->
  27.     <property>
  28.         <name>hive.metastore.warehouse.dir</name>
  29.         <value>/user/hive/warehouse</value>
  30.     </property>
  31. </configuration>
复制代码
5)初始化Hive元数据库(修改为采用MySQL存储元数据)
  1. bin/schematool -dbType mysql -initSchema -verbose
复制代码
验证元数据是否配置乐成

1)再次启动Hive
  1. bin/hive
复制代码
2)利用Hive
  1. hive> show databases;
  2. hive> show tables;
  3. hive> create table stu(id int, name string);
  4. hive> insert into stu values(1,"ss");
  5. hive> select * from stu;
复制代码
3)在Xshell窗口中开启另一个窗口开启Hive(两个窗口都可以操作Hive,没有出现异常)
  1. hive> show databases;
  2. hive> show tables;
  3. hive> select * from stu;
复制代码
检察MySQL中的元数据

检察元数据库metastore
  1. mysql> show databases;
  2. mysql> use metastore;
  3. mysql> show tables;
复制代码
(1)检察元数据库中存储的库信息
  1. mysql> select * from DBS;
  2. +-------+-----------------------+-------------------------------------------+---------+------------+------------+-----------+
  3. | DB_ID | DESC                  | DB_LOCATION_URI                           | NAME    | OWNER_NAME | OWNER_TYPE | CTLG_NAME |
  4. +-------+-----------------------+-------------------------------------------+---------+------------+------------+-----------+
  5. |     1 | Default Hive database | hdfs://hadoop102:8020/user/hive/warehouse | default | public     | ROLE       | hive      |
  6. +-------+-----------------------+-------------------------------------------+---------+------------+------------+-----------+
复制代码
(2)检察元数据库中存储的表信息
  1. mysql> select * from TBLS;
  2. +--------+-------------+-------+------------------+---------+------------+-----------+-------+----------+---------------+
  3. | TBL_ID | CREATE_TIME | DB_ID | LAST_ACCESS_TIME | OWNER   | OWNER_TYPE | RETENTION | SD_ID | TBL_NAME | TBL_TYPE      |
  4. +--------+-------------+-------+------------------+---------+------------+-----------+-------+----------+---------------+
  5. |      1 |  1656318303 |     1 |                0 | atguigu | USER       |         0 |     1 | stu      | MANAGED_TABLE |
  6. +--------+-------------+-------+------------------+---------+------------+-----------+-------+----------+---------------+
复制代码
(3)检察元数据库中存储的表中列相关信息
  1. mysql> select * from COLUMNS_V2;
  2. +-------+----------+---------+------------+-------------+-------------+--------+
  3. | CS_ID | CAT_NAME | DB_NAME | TABLE_NAME | COLUMN_NAME | COLUMN_TYPE | TBL_ID |
  4. +-------+----------+---------+------------+-------------+-------------+--------+
  5. |     1 | hive     | default | stu        | id          | int         |      1 |
  6. |     2 | hive     | default | stu        | name        | string      |      1 |
  7. +-------+----------+---------+------------+-------------+-------------+--------+
复制代码
Hive服务部署

hiveserver2服务

Hive的hiveserver2服务的作用是提供jdbc/odbc接口,为用户提供长途访问Hive数据的功能,例如用户期望在个人电脑中访问长途服务中的Hive数据,就需要用到Hiveserver2。

用户说明

在长途访问Hive数据时,客户端并未直接访问Hadoop集群,而是由Hivesever2署理访问。由于Hadoop集群中的数据具备访问权限控制,以是此时需思量一个问题:那就是访问Hadoop集群的用户身份是谁?是Hiveserver2的启动用户?还是客户端的登任命户?
答案是都有大概,具体是谁,由Hiveserver2的hive.server2.enable.doAs参数决定,该参数的寄义是是否启用Hiveserver2用户模拟的功能。若启用,则Hiveserver2会模拟成客户端的登任命户去访问Hadoop集群的数据,不启用,则Hivesever2会直接利用启动用户访问Hadoop集群数据。模拟用户的功能,默认是开启的。
具体逻辑如下:
未开启用户模拟功能:

开启用户模拟功能:

生产环境,推荐开启用户模拟功能,因为开启后才气保证各用户之间的权限隔离。
hiveserver2部署

Hadoop端配置

hivesever2的模拟用户功能,依赖于Hadoop提供的proxy user(署理用户功能),只有Hadoop中的署理用户才气模拟其他用户的身份访问Hadoop集群。因此,需要将hiveserver2的启动用户设置为Hadoop的署理用户,配置方式如下:
修改配置文件core-site.xml,然后记得分发三台机器
  1. cd $HADOOP_HOME/etc/hadoop
  2. vim core-site.xml
复制代码
增加如下配置:
  1. <!--配置所有节点的Hadoop的代理用户都可作为代理用户-->
  2. <property>
  3.     <name>hadoop.proxyuser.Hadoop的代理用户.hosts</name>
  4.     <value>*</value>
  5. </property>
  6. <!--配置Hadoop的代理用户能够代理的用户组为任意组-->
  7. <property>
  8.     <name>hadoop.proxyuser.Hadoop的代理用户.groups</name>
  9.     <value>*</value>
  10. </property>
  11. <!--配置atguigu用户能够代理的用户为任意用户-->
  12. <property>
  13.     <name>hadoop.proxyuser.Hadoop的代理用户.users</name>
  14.     <value>*</value>
  15. </property>
复制代码
Hive端配置

在hive-site.xml文件中添加如下配置信息
  1. <!-- 指定hiveserver2连接的host -->
  2. <property>
  3.         <name>hive.server2.thrift.bind.host</name>
  4.         <value>hiveserver2连接的hos</value>
  5. </property>
  6. <!-- 指定hiveserver2连接的端口号 -->
  7. <property>
  8.         <name>hive.server2.thrift.port</name>
  9.         <value>10000</value>
  10. </property>
复制代码
测试

(1)启动hiveserver2
  1. bin/hive
  2. --service hiveserver2
复制代码
(2)利用命令行客户端beeline进行长途访问
启动beeline客户端
  1. bin/beeline -u jdbc:hive2://hadoop102:10000 -n atguigu
复制代码
看到如下界面
  1. Connecting to jdbc:hive2://hadoop102:10000
  2. Connected to: Apache Hive (version 3.1.3)
  3. Driver: Hive JDBC (version 3.1.3)
  4. Transaction isolation: TRANSACTION_REPEATABLE_READ
  5. Beeline version 3.1.3 by Apache Hive
  6. 0: jdbc:hive2://hadoop102:10000>
复制代码
(3)利用图形化客户端进行长途访问
4)配置DataGrip连接
(1)创建连接

(2)配置连接属性
全部属性配置,和Hive的beeline客户端配置一致即可。初次利用,配置过程会提示缺少JDBC驱动,按照提示下载即可。

(3)界面介绍

(4)测试sql实行

(5)修改数据库

metastore服务

Hive的metastore服务的作用是为Hive CLI大概Hiveserver2提供元数据访问接口。
metastore运行模式

metastore有两种运行模式,分别为嵌入式模式和独立服务模式。下面分别对两种模式进行说明:
(1)嵌入式模式

(2)独立服务模式

生产环境中,不推荐利用嵌入式模式。因为其存在以下两个问题:
(1)嵌入式模式下,每个Hive CLI都需要直接连接元数据库,当Hive CLI较多时,数据库压力会比较大。
(2)每个客户端都需要用户元数据库的读写权限,元数据库的安全得不到很好的保证。
metastore部署

(1)嵌入式模式
嵌入式模式下,只需保证Hiveserver2和每个Hive CLI的配置文件hive-site.xml中包含连接元数据库所需要的以下参数即可:
  1.     <!-- jdbc连接的URL -->
  2.     <property>
  3.         <name>javax.jdo.option.ConnectionURL</name>
  4.         <value>jdbc:mysql://URL:3306/metastore?useSSL=false</value>
  5.     </property>
  6.    
  7.     <!-- jdbc连接的Driver-->
  8.     <property>
  9.         <name>javax.jdo.option.ConnectionDriverName</name>
  10.         <value>com.mysql.jdbc.Driver</value>
  11.     </property>
  12.    
  13.         <!-- jdbc连接的username-->
  14.     <property>
  15.         <name>javax.jdo.option.ConnectionUserName</name>
  16.         <value>jdbc连接的username</value>
  17.     </property>
  18.     <!-- jdbc连接的password -->
  19.     <property>
  20.         <name>javax.jdo.option.ConnectionPassword</name>
  21.         <value>jdbc连接的password</value>
  22.     </property>
复制代码
(2)独立服务模式
独立服务模式需做以下配置:
起首,保证metastore服务的配置文件hive-site.xml中包含连接元数据库所需的以下参数:
  1.     <!-- jdbc连接的URL -->
  2.     <property>
  3.         <name>javax.jdo.option.ConnectionURL</name>
  4.         <value>jdbc:mysql://jdbc连接的URL:3306/metastore?useSSL=false</value>
  5.     </property>
  6.    
  7.     <!-- jdbc连接的Driver-->
  8.     <property>
  9.         <name>javax.jdo.option.ConnectionDriverName</name>
  10.         <value>com.mysql.jdbc.Driver</value>
  11.     </property>
  12.    
  13.         <!-- jdbc连接的username-->
  14.     <property>
  15.         <name>javax.jdo.option.ConnectionUserName</name>
  16.         <value>jdbc连接的username</value>
  17.     </property>
  18.     <!-- jdbc连接的password -->
  19.     <property>
  20.         <name>javax.jdo.option.ConnectionPassword</name>
  21.         <value>jdbc连接的password</value>
  22.     </property>
复制代码
其次,保证Hiveserver2和每个Hive CLI的配置文件hive-site.xml中包含访问metastore服务所需的以下参数:
  1. <!-- 指定metastore服务的地址 -->
  2. <property>
  3.         <name>hive.metastore.uris</name>
  4.         <value>thrift://metastore服务的地址:9083</value>
  5. </property>
复制代码
注意:主机名需要改为metastore服务地点节点,端口号无需修改,metastore服务的默认端口就是9083。
测试

此时启动Hive CLI,实行shou databases语句,会出现一下错误提示信息:
  1. hive (default)> show databases;
  2. FAILED: HiveException java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient
复制代码
这是因为我们在Hive CLI的配置文件中配置了hive.metastore.uris参数,此时Hive CLI会去哀求我们实行的metastore服务地址,以是必须启动metastore服务才气正常利用。
metastore服务的启动命令如下:
  1. --前端启动
  2. hive --service metastore
复制代码
注意:启动后该窗口不能再操作,需打开一个新的Xshell窗口来对Hive操作。
重新启动 Hive CLI,并实行shou databases语句,就能正常访问了
  1. bin/hive
复制代码
Hive利用技巧

Hive参数配置方式

1)检察当前全部的配置信息
  1. hive>set;
复制代码
2)参数的配置三种方式
(1)配置文件方式
默认配置文件:hive-default.xml
用户自界说配置文件:hive-site.xml
注意:用户自界说配置会覆盖默认配置。另外,Hive也会读入Hadoop的配置,因为Hive是作为Hadoop的客户端启动的,Hive的配置会覆盖Hadoop的配置。配置文件的设定对本机启动的全部Hive进程都有效。
(2)命令行参数方式
①启动Hive时,可以在命令行添加-hiveconf param=value来设定参数。例如:
  1. bin/hive
  2. -hiveconf mapreduce.job.reduces=10;
复制代码
注意:仅对本次Hive启动有效。
②检察参数设置
  1. set mapreduce.job.reduces;
  2. set mapreduce.job.reduces;
复制代码
(3)参数声明方式
可以在HQL中利用SET关键字设定参数,例如:
  1. hive(default)> set mapreduce.job.reduces=10;
复制代码
注意:仅对本次Hive启动有效。
检察参数设置:
  1. set mapreduce.job.reduces;
复制代码
上述三种设定方式的优先级依次递增。即配置文件 < 命令行参数 < 参数声明。注意某些体系级的参数,例如log4j相关的设定,必须用前两种方式设定,因为那些参数的读取在会话建立从前已经完成了。
Hive常见属性配置

Hive客户端表现当前库和表头

(1)在hive-site.xml中加入如下两个配置:
  1. <property>
  2.     <name>hive.cli.print.header</name>
  3.     <value>true</value>
  4.     <description>Whether to print the names of the columns in query output.</description>
  5. </property>
  6. <property>
  7.     <name>hive.cli.print.current.db</name>
  8.     <value>true</value>
  9.     <description>Whether to include the current database in the Hive prompt.</description>
  10. </property>
复制代码
(2)hive客户端在运行时可以表现当前利用的库和表头信息
  1. [yj@hadoop102 conf]$ hive
  2. hive (default)> select * from stu;
  3. OK
  4. stu.id        stu.name
  5. 1        ss
  6. Time taken: 1.874 seconds, Fetched: 1 row(s)
  7. hive (default)>
复制代码
Hive运行日记路径配置

修改Hive的log存放日记到/opt/module/hive/logs
(1)修改$HIVE_HOME/conf/hive-log4j2.properties.template文件名称为
hive-log4j2.properties
  1. mv hive-log4j2.properties.template hive-log4j2.properties
复制代码
(2)在hive-log4j2.properties文件中修改log存放位置
修改配置如下
  1. property.hive.log.dir=/opt/module/hive/logs
复制代码
关闭Hadoop虚拟内存查抄

在yarn-site.xml中关闭虚拟内存查抄(虚拟内存校验,假如已经关闭了,就不需要配了)。
(1)修改前记得先停Hadoop
(2)在yarn-site.xml添加如下配置
  1. <property>
  2.     <name>yarn.nodemanager.vmem-check-enabled</name>
  3.     <value>false</value>
  4. </property>
复制代码
(3)修改完后记得分发yarn-site.xml,并重启yarn。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

知者何南

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表