SS00011.spark——|Hadoop&Spark环境部署.v11|——|Hive.v01|部署安装|

本文详细介绍了Hive在大数据环境中的安装配置过程,包括部署规划、MySQL安装、Hive安装及属性配置。同时,提供了报错处理方案和Hive的相关参数配置方法。
摘要由CSDN通过智能技术生成
一、Hive安装配置
### --- 环境准备
~~~     Hive官网:http://hive.apache.org
~~~     下载网址:http://archive.apache.org/dist/hive/
~~~     文档网址:https://cwiki.apache.org/confluence/display/Hive/LanguageManual

~~~     # 安装前提:3台虚拟机,安装了Hadoop
~~~     安装软件:Hive(2.3.7) + MySQL (5.7.26)
~~~     备注:Hive的元数据默认存储在自带的 derby 数据库中,生产中多采用MySQL
~~~     derby:java语言开发占用资源少,单进程,单用户。仅仅适用于个人的测试。
二、部署规划
软件Hadoop01Hadoop02Hadoop03
Hadoop
mysql
hive√server√client√server
HiveServer2
### --- 资源规划

~~~     # hive安装包
~~~     apache-hive-2.3.7-bin.tar.gz
~~~     # MySQL安装包
~~~     mysql-5.7.26-1.el7.x86_64.rpm-bundle.tar
~~~     # MySQL的JDBC驱动程序
~~~     mysql-connector-java-5.1.46.jar
~~~     # 整体的安装步骤:

~~~     1、安装MySQL
~~~     2、安装配置Hive
~~~     3、Hive添加常用配置
三、mysql安装
### --- Hive中使用MySQL存储元数据,MySQL的版本 5.7.26。

~~~     # 安装步骤:
~~~     环境准备(删除有冲突的依赖包、安装必须的依赖包)
~~~     安装MySQL
~~~     修改root口令(找到系统给定的随机口令、修改口令)
~~~     在数据库中创建hive用户
### --- 删除MariaDB
~~~     centos7.6自带的 MariaDB(MariaDB是MySQL的一个分支),与要安装的MySQL有冲突,需要删除。

~~~     # 查询是否安装了mariadb
[root@hadoop03 ~]# rpm -aq | grep mariadb
mariadb-libs-5.5.60-1.el7_5.x86_64
~~~     # 删除mariadb -e 删除指定的套件;--nodeps 不验证套件的相互关联性
[root@hadoop03 ~]# rpm -e --nodeps mariadb-libs
### --- 安装依赖

[root@hadoop03 ~]# yum install perl -y
[root@hadoop03 ~]# yum install net-tools -y
### --- 安装MySQL

~~~     # 解压缩
[root@hadoop03 software]#  tar xvf mysql-5.7.26-1.el7.x86_64.rpm-bundle.tar
~~~     # 依次运行以下命令
rpm -ivh mysql-community-common-5.7.26-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.26-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.26-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.7.26-1.el7.x86_64.rpm --force --nodeps
### --- 报错现象:
[root@hadoop03 software]# rpm -ivh mysql-community-server-5.7.26-1.el7.x86_64.rpm
warning: mysql-community-server-5.7.26-1.el7.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY
error: Failed dependencies:
    libaio.so.1()(64bit) is needed by mysql-community-server-5.7.26-1.el7.x86_64
    libaio.so.1(LIBAIO_0.1)(64bit) is needed by mysql-community-server-5.7.26-1.el7.x86_64
    libaio.so.1(LIBAIO_0.4)(64bit) is needed by mysql-community-server-5.7.26-1.el7.x86_64

### --- 解决方案
[root@hadoop03 software]# rpm -ivh mysql-community-server-5.7.26-1.el7.x86_64.rpm --force --nodeps
### --- 启动数据库

[root@hadoop03 ~]# systemctl start mysqld
### --- 报错现象
[root@hadoop03 ~]#  systemctl start mysqld
Job for mysqld.service failed because the control process exited with error code. See "systemctl status mysqld.service" and "journalctl -xe" for details.
[root@hadoop03 ~]#  journalctl -xe
/usr/sbin/mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory
/usr/sbin/mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory

### --- 解决方案
[root@hadoop03 ~]#  libaio.so: /usr/lib64/libaio.so.1
[root@hadoop03 ~]#  whereis libaio.so.1
libaio.so:
[root@hadoop03 ~]#  yum install -y libaio
[root@hadoop03 ~]#  whereis libaio.so.1
libaio.so: /usr/lib64/libaio.so.1
### --- 查找root密码

[root@hadoop03 ~]# grep password /var/log/mysqld.log
[Note] A temporary password is generated for root@localhost: Di.%:Tyfu7cX
### --- 修改 root 口令

~~~     # 进入MySQL,使用前面查询到的口令
[root@hadoop03 ~]# mysql -uroot -p
Enter password:
~~~     # 设置口令强度;将root口令设置为12345678;刷新
~~~     validate_password_policy 密码策略(默认是1),可配置的值有以下:
~~~     0 or LOW 仅需需符合密码长度(由参数validate_password_length【默认为8】指定)
~~~     1 or MEDIUM 满足LOW策略,同时还需满足至少有1个数字,小写字母,大写字母和特殊字符
~~~     2 or STRONG 满足MEDIUM策略,同时密码不能存在字典文件(dictionaryfile)中
~~~     备注:个人开发环境,出于方便的目的设比较简单的密码;生产环境一定要设复杂密码!

mysql> set global validate_password_policy=0;
mysql> set password for 'root'@'localhost' =password('12345678');
mysql> flush privileges;
### --- 创建hive用户

~~~     # 创建用户设置口令、授权、刷新
mysql> CREATE USER 'hive'@'%' IDENTIFIED BY '12345678';
mysql> GRANT ALL ON *.* TO 'hive'@'%';
mysql> FLUSH PRIVILEGES;
三、Hive安装
~~~     # 安装步骤:

~~~     下载、上传、解压缩
~~~     修改环境变量
~~~     修改hive配置
~~~     拷贝JDBC的驱动程序
~~~     初始化元数据库
1、下载Hive软件,并解压缩

[root@hadoop02 software]# tar zxvf apache-hive-2.3.7-bin.tar.gz -C ../servers/

[root@hadoop02 software]# cd ../servers/
[root@hadoop02 servers]# mv apache-hive-2.3.7-bin hive-2.3.7
### --- 修改环境变量

~~~     # 在 /etc/profile 文件中增加环境变量
[root@hadoop02 ~]# vim /etc/profile
##HIVE_HOME
export HIVE_HOME=/opt/yanqi/servers/hive-2.3.7
export PATH=$PATH:$HIVE_HOME/bin
~~~     # 执行并生效

[root@hadoop02 ~]# source /etc/profile
### --- 修改 Hive 配置cd $HIVE_HOME/conf vi hive-site.xml 增加以下内容:

[root@hadoop02 ~]# vim /opt/yanqi/servers/hive-2.3.7/conf/hive-site.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
 
<!-- hive元数据的存储位置 -->
<property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mysql://hadoop03:3306/hivemetadata?createDatabaseIfNotExist=true&amp;useSSL=false</value>
        <description>JDBC connect string for a JDBC metastore</description>
</property>
<!-- 指定驱动程序 -->
<property>
        <name>javax.jdo.option.ConnectionDriverName</name>
        <value>com.mysql.jdbc.Driver</value>
        <description>Driver class name for a JDBC metastore</description>
</property>
<!-- 连接数据库的用户名 -->
<property>
        <name>javax.jdo.option.ConnectionUserName</name>
        <value>hive</value>
        <description>username to use against metastore database</description>
</property>
<!-- 连接数据库的口令 -->
<property>
        <name>javax.jdo.option.ConnectionPassword</name>
        <value>12345678</value>
        <description>password to use against metastore database</description>
</property>
 
</configuration>
~~~     # 备注:

~~~     注意jdbc的连接串,如果没有 useSSL=false 会有大量警告
~~~     在xml文件中 &amp; 表示 &
### --- 拷贝 MySQL JDBC 驱动程序
~~~     将 mysql-connector-java-5.1.46.jar 拷贝到 $HIVE_HOME/lib

[root@hadoop02 ~]# cp /opt/yanqi/software/mysql-connector-java-5.1.46.jar \
/opt/yanqi/servers/hive-2.3.7/lib/
### --- 初始化元数据库

[root@hadoop02 ~]# cd /opt/yanqi/servers/hive-2.3.7/bin
[root@hadoop02 bin]# schematool -dbType  mysql -initSchema

~~~     # 生成数据库
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| hivemetadata       |
+--------------------+
### --- 启动Hive,执行命令

~~~     # 启动hive服务之前,请先启动hdfs、yarn的服务
[root@hadoop01 ~]# start-dfs.sh 
[root@hadoop01 ~]# start-yarn.sh
[root@hadoop01 ~]# hive
hive> show functions;
四、Hive 属性配置
### --- 可在 hive-site.xml 中增加以下常用配置,方便使用。
~~~     数据存储位置 

[root@hadoop02 ~]# vim /opt/yanqi/servers/hive-2.3.7/conf/hive-site.xml
<!-- 数据默认的存储位置(HDFS) -->
<property>
        <name>hive.metastore.warehouse.dir</name>
        <value>/user/hive/warehouse</value>
        <description>location of default database for the warehouse</description>
</property>
~~~     # 显示当前库

<!-- 在命令行中,显示当前操作的数据库 -->
<property>
        <name>hive.cli.print.current.db</name>
        <value>true</value>
        <description>Whether to include the current database in the Hive prompt.</description>
</property>
~~~     # 显示表头属性

<!-- 在命令行中,显示数据的表头 -->
<property>
        <name>hive.cli.print.header</name>
        <value>true</value>
</property>
~~~     # 本地模式
 
 <!-- 操作小规模数据时,使用本地模式,提高效率 -->
<property>
        <name>hive.exec.mode.local.auto</name>
        <value>true</value>
        <description>Let Hive determine whether to run in local mode automatically</description>
</property>
~~~     # 备注:当 Hive 的输入数据量非常小时,Hive 通过本地模式在单台机器上处理所有的任务。
~~~     # 对于小数据集,执行时间会明显被缩短。当一个job满足如下条件才能真正使用本地模式:

job的输入数据量必须小于参数:hive.exec.mode.local.auto.inputbytes.max(默认128MB)
job的map数必须小于参数:hive.exec.mode.local.auto.tasks.max (默认4)
job的reduce数必须为0或者1
### --- Hive的日志文件

~~~     # Hive的log默认存放在 /tmp/root 目录下(root为当前用户名);这个位置可以修改。
[root@hadoop02 ~]# cd $HIVE_HOME/conf/
[root@hadoop02 conf]# cp hive-log4j2.properties.template hive-log4j2.properties
~~~     可以不修改,但是要知道位置。
~~~     Hadoop 2.x 中 NameNode RPC缺省的端口号:8020
~~~     对端口号要敏感

[root@hadoop02 conf]# vim hive-log4j2.properties
# 修改如下配置参数:
property.hive.log.dir = /opt/yanqi/servers/hive-2.3.7/logs
~~~     # hive默认日志地址

[root@hadoop02 ~]# cat /tmp/root/hive.log
### --- 附录:添加第三方用户(Hadoop)

[root@hadoop02 ~]# groupadd hadoop
[root@hadoop02 ~]# useradd -m hadoop -g hadoop -s /bin/bash
[root@hadoop02 ~]# passwd hadoop
New password: 12345678
Retype new password: 12345678
~~~     # 在100行后添加。允许用户执行sudo,免密
~~~     # 建议:现阶段使用root用户

[root@hadoop02 ~]# visudo
hadoop ALL=(ALL) LL
### --- 小结:

~~~     1、添加了配置,使用Hive更方便;
~~~     2、删除了有冲突的软件包(hive)
~~~     3、Hive的日志在哪里(/tmp/root)
~~~     4、第三方用户使用Hive。建议使用root用户
~~~     5、NameNode 缺省的RPC(远程过程调用)端口号8020,经常使用的端口号9000
附录一:报错处理一:
### --- 报错分析:
~~~     hbase没有设置不用管
~~~     /opt/yanqi/servers/hive-2.3.7/lib/log4j-slf4j-impl-2.6.2.jar
~~~     /opt/yanqi/servers/hadoop-2.9.2/share/hadoop/common/lib/slf4j-log4j12-1.7.25.jar
~~~     这两个包冲突;删掉hive里面的包;它会调用hadoop中的包;但是删除了hadoop中的包,他不会调用hive中的包

[root@hadoop02 ~]# hive
which: no hbase in (:/opt/yanqi/servers/jdk1.8.0_231/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/opt/yanqi/servers/hadoop-2.9.2/bin:/opt/yanqi/servers/hadoop-2.9.2/sbin:/opt/yanqi/servers/hive-2.3.7/bin:/root/bin)
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/opt/yanqi/servers/hive-2.3.7/lib/log4j-slf4j-impl-2.6.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/opt/yanqi/servers/hadoop-2.9.2/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]

Logging initialized using configuration in file:/opt/yanqi/servers/hive-2.3.7/conf/hive-log4j2.properties Async: true
Hive-on-MR is deprecated in Hive 2 and may not be available in the future versions. Consider using a different execution engine (i.e. spark, tez) or using Hive 1.X releases.
### --- 解决方案:

[root@hadoop02 ~]# rm -rf /opt/yanqi/servers/hive-2.3.7/lib/log4j-slf4j-impl-2.6.2.jar
五、参数配置方式
### --- 查看参数配置信息:

~~~     # 查看全部参数
hive (default)> set;
~~~     # 查看某个参数
hive (default)> set hive.exec.mode.local.auto;
hive.exec.mode.local.auto=true
### --- 参数配置的三种方式:
~~~     用户自定义配置文件(hive-site.xml)
~~~     启动hive时指定参数(-hiveconf)
~~~     hive命令行指定参数(set)

~~~     # 配置信息的优先级:
set > -hiveconf > hive-site.xml > hive-default.xml
~~~     # 配置文件方式

~~~     默认配置文件:hive-default.xml
~~~     用户自定义配置文件:hive-site.xml
~~~     配置优先级:hive-site.xml > hive-default.xml
~~~     配置文件的设定对本机启动的所有Hive进程有效;
~~~     配置文件的设定对本机所有启动的Hive进程有效;
~~~     # 启动时指定参数值
~~~     启动Hive时,可以在命令行添加 -hiveconf param=value 来设定参数,这些设定仅对本次启动有效。

~~~     # 启动时指定参数
[root@hadoop02 ~]#  hive -hiveconf hive.exec.mode.local.auto=true
~~~     # 在命令行检查参数是否生效
hive (default)> set hive.exec.mode.local.auto;
hive.exec.mode.local.auto=true
~~~     # 命令行修改参数
~~~     可在 Hive 命令行中使用SET关键字设定参数,同样仅对本次启动有效

hive (default)> set hive.exec.mode.local.auto=false;
hive (default)> set hive.exec.mode.local.auto;
hive.exec.mode.local.auto=false
六、Hive命令
### --- Hive

[root@hadoop02 ~]# hive -help
~~~     # -e:不进入hive交互窗口,执行sql语句    
[root@hadoop02 ~]# hive -e "select * from user"
~~~     # -f:执行脚本中sql语句
~~~     # 创建文件hqlfile1.sql,内容:select * from users
[root@hadoop02 ~]# vim hqlfile1.sql
select * from users
 
~~~     # 执行文件中的SQL语句
[root@hadoop02 ~]# hive -f hqlfile1.sql

~~~     # 执行文件中的SQL语句,将结果写入文件
hive -f hqlfile1.sql >> result1.log
### --- 退出Hive命令行

exit; quit;
### --- 在命令行执行 shell 命令 / dfs 命令

hive (default)> !ls;
hqlfile1.sql
hive (default)> !clear;
hive (default)> dfs -ls /;
drwxr-xr-x   - Administrator supergroup          0 2021-08-12 23:53 /api_test3
drwxr-xr-x   - Administrator supergroup          0 2021-08-14 00:09 /collect_log
drwxrwxrwx   - root          supergroup          0 2021-08-12 21:28 /test
drwxrwxrwx   - root          supergroup          0 2021-08-20 22:08 /tmp
drwxrwxrwx   - root          supergroup          0 2021-08-15 21:26 /user
drwxrwxrwx   - root          supergroup          0 2021-08-12 21:30 /wcinput
drwxrwxrwx   - root          supergroup          0 2021-08-12 21:50 /yanqi
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yanqi_vip

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值