前文

hive3.1.2 安装及其配置(本地模式和远程模式)

下载

1、下载hive包

Index of /dist/hive (apache.org)

  1. wget http://archive.apache.org/dist/hive/hive-3.1.2/apache-hive-3.1.2-bin.tar.gz
  2. #可选用清华镜像
  3. http://mirror.tuna.tsinghua.edu.cn/apache/hive/hive-3.1.2/apache-hive-3.1.2-bin.tar.gz

2、修改其环境变量

  1. vim /etc/profile
  2. #增加环境变量
  3. export HIVE_HOME=/export/servers/apache-hive-3.1.2-src
  4. export PATH=$PATH:$HIVE_HOME/bin
  5. source /etc/profile

3、MySQL配置

为什么配置MySQL?

metastore是hive元数据的集中存放地

metastore默认使用内嵌的derby数据库作为存储引擎

Derby引擎的缺点:一次只能打开一个会话

使用Mysql作为外置存储引擎,多用户同时访问

Hive安装

内嵌模式:元数据保持在内嵌的Derby模式,只允许一个会话连接

本地独立模式:在本地安装MySQL,把元数据放到MySQL内

远程模式:元数据放置在远程的Mysql数据库。

hive只是个工具,包括它的数据分析,依赖于mapreduce,它的数据管理,依赖于外部系统

这一步其实不是必须的,因为Hive默认的metadata(元数据)是存储在Derby里面的,但是有一个弊端就是同一时间只能有一个Hive实例访问,这适合做开发程序时做本地测试。

Hive提供了增强配置,可将数据库替换成MySQL等关系型数据库,将存储数据独立出来在多个服务示例之间共享。

由此可见,你在哪路径下,执行hive指令,就在哪路径下生成metastore_db。建一套数据库文件,这样是极其不合适的,公司里每个人若不一样,则会显得非常混杂。导致员工之间无法公用交流。

为此,需公用的MySQL。

这也是为什么,在安装Hive时,也需要配置MySQL了。

Centos7 MySQL安装步骤:

1、设置MySQL源

首先,您需要在MySQL提供的系统中启用MySQL yum存储库。 根据您的操作系统版本执行以下命令之一,这里我们选择CentOS 7 / RHEL 7的源

  1. ###在CentOS 7 / RHEL 7系统上###
  2. rpm -Uvh https://repo.mysql.com/mysql80-community-release-el7-3.noarch.rpm
  3. ###在CentOS 7 / RHEL 6系统上###
  4. rpm -Uvh https://repo.mysql.com/mysql80-community-release-el6-3.noarch.rpm

2、安装MySQL Community Server

MySQL yum存储库包含用于多个MySQL版本的多个存储库配置。 因此,首先禁用mysql repo文件中的所有存储库

  1. sed -i 's/enabled=1/enabled=0/' /etc/yum.repos.d/mysql-community.repo

启用centos mysql8版本

  1. ## CentOS & RedHat 版本
  2. yum --enablerepo=mysql80-community install mysql-community-server
  3. ## Fedora Systems 版本
  4. dnf --enablerepo=mysql80-community install mysql-community-server

3、启动MySQL服务

  1. service mysqld start

使用Systemd

  1. systemctl start mysqld.service

4、查找MySQL root密码

安装MySQL 8.0后,将为MySQL根用户创建一个临时密码。 您可以在日志文件中找到生成的临时密码。密码文件位置:/var/log/mysqld.log

  1. grep "A temporary password" /var/log/mysqld.log

5、重置root密码

首次安装MySQL后,执行mysql_secure_installation命令以保护MySQL服务器,包含重置密码步骤

密码需要特殊要求,八位,大小写,特殊符号

  1. mysql_secure_installation
  2. Enter password for user root:
  3. The existing password for the user account root has expired. Please set a new password.
  4. New password:
  5. Re-enter new password:
  6. Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
  7. Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y
  8. Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y
  9. Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y

6、MySQL 服务加入开机启动项,并启动mysql进程

  1. ### Using Systemd
  2. systemctl enable mysqld.service
  3. systemctl restart mysqld.service

开放3306端口

如果服务器开启了防火墙,记得开启3306端口

  1. systemctl enable iptables
  2. systemctl start iptables
  3. vim /etc/sysconfig/iptables
  4. ##规则中加入
  5. -A INPUT -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT
  6. ##重启防火墙
  7. systemctl enable iptables.service
  8. systemctl start iptables.service

7、登录MySQL

  1. mysql -uroot -p

修改您的密码不满足当前的策略要求,可修改成简单密码

  1. *# 查看密码策略*
  2. > mysql> SHOW VARIABLES LIKE 'validate_password%';
  3. +--------------------------------------+--------+
  4. | Variable_name | Value |
  5. +--------------------------------------+--------+
  6. | validate_password.check_user_name | ON |
  7. | validate_password.dictionary_file | |
  8. | validate_password.length | 8 |
  9. | validate_password.mixed_case_count | 1 |
  10. | validate_password.number_count | 1 |
  11. | validate_password.policy | MEDIUM |
  12. | validate_password.special_char_count | 1 |
  13. +--------------------------------------+--------+

MySQL8密码策略

1)、validate_password_length 固定密码的总长度;

2)、validate_password_dictionary_file 指定密码验证的文件路径;

3)、validate_password_mixed_case_count 整个密码中至少要包含大/小写字母的总个数;

4)、validate_password_number_count 整个密码中至少要包含阿拉伯数字的个数;

5)、validate_password_policy 指定密码的强度验证等级,默认为 MEDIUM;

取值:

0/LOW:只验证长度;

1/MEDIUM:验证长度、数字、大小写、特殊字符;

2/STRONG:验证长度、数字、大小写、特殊字符、字典文件;

6)、validate_password_special_char_count 整个密码中至少要包含特殊字符的个数;

  1. set global validate_password.policy=0;
  2. set global validate_password.length=1;

8、配置mysql允许远程访问

  1. #登录
  2. mysql -u root -p
  3. #查看用户表
  4. select user,host,authentication_string from mysql.user;
  5. #切换数据库
  6. use mysql;
  7. #更新用户表 :
  8. update user set host='%' where user='root';
  9. #配置mysql允许远程访问
  10. GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
  11. #强制刷新权限
  12. flush privileges;

9、附mysql常用命令:

登录mysql

  1. mysql -u username -p

启动mysql

  1. systemctl start mysqld.service

结束mysql

  1. systemctl stop mysqld.service

重启mysql

  1. systemctl restart mysqld.service

开机自启

  1. systemctl enable mysqld.service

4、将MySQL的JDBC驱动拷贝到Hive的lib目录下

我这里选用的8.0.27自己可以选择版本去下载

[MySQL官网下载驱动](MySQL :: Download Connector/J)

  1. #Platform Independent
  2. wget https://cdn.mysql.com//Downloads/Connector-J/mysql-connector-java-8.0.27.tar.gz
  3. #解压文件到Hive的lib目录下

5、配置hive文件

  1. cd /export/servers/apache-hive-3.1.2-src/conf

把初始化的配置文件 复制一份出来 并且改名

  1. cp hive-env.sh.template hive-env.sh
  2. cp hive-default.xml.template hive-site.xml
  3. cp hive-log4j2.properties.template hive-log4j2.properties
  4. cp hive-exec-log4j2.properties.template hive-exec-log4j2.properties

6、配置hive-env.sh

  1. vi hive-env.sh

文件末尾处

  1. # Set HADOOP_HOME to point to a specific hadoop install directory
  2. export HADOOP_HOME=/export/servers/hadoop-3.3.1 #hadoop安装路径
  3. # Hive Configuration Directory can be controlled by:
  4. export HIVE_CONF_DIR=/export/servers/apache-hive-3.1.2-src/conf #hive路径
  5. # Folder containing extra libraries required for hive compilation/execution can be controlled by:
  6. export HIVE_AUX_JARS_PATH=/export/servers/apache-hive-3.1.2-src/lib #hivejar包路径

配置hive-site.xml文件

首先使用hadoop创建3个文件夹

  1. hdfs dfs -mkdir -p /user/hive/warehouse
  2. hadoop fs -mkdir -p /user/hive/tmp
  3. hadoop fs -mkdir -p /user/hive/log

修改文件夹权限

  1. hadoop fs -chmod -R 777 /user/hive/warehouse
  2. hadoop fs -chmod -R 777 /user/hive/tmp
  3. hadoop fs -chmod -R 777 /user/hive/log

7、配置Metastore到MySQL

在标签加入下面配置:

  1. vim hive-site.xml

在$HIVE_HOME/conf修改新建hive-site.xml文件,根据自己的情况更在主机名,mysql的用户名和密码

  1. <configuration>
  2. <!-- jdbc连接的URL -->
  3. <property>
  4. <name>javax.jdo.option.ConnectionURL</name>
  5. <value>jdbc:mysql://hadoop1:3306/metastore?createDatabaseIfNotExist=true&amp;useSSL=false&amp;serverTimezone=GMT</value>
  6. </property>
  7. <!-- jdbc连接的Driver-->
  8. <property>
  9. <name>javax.jdo.option.ConnectionDriverName</name>
  10. <value>com.mysql.cj.jdbc.Driver</value>
  11. <!-- <value>com.mysql.cj.jdbc.Driver</value> -->
  12. </property>
  13. <!-- jdbc连接的username-->
  14. <property>
  15. <name>javax.jdo.option.ConnectionUserName</name>
  16. <value>root</value>
  17. </property>
  18. <!-- jdbc连接的password -->
  19. <property>
  20. <name>javax.jdo.option.ConnectionPassword</name>
  21. <value>000000</value>
  22. </property>
  23. <property>
  24. <name>system:java.io.tmpdir</name>
  25. <value>/export/servers/data/hive/tmp</value>
  26. <description/>
  27. </property>
  28. </configuration>

注意: &amp;代表&

  1. <configuration>
  2. <!--以下可选作,建议Hive3.x不要用-->
  3. <!-- Hive默认在HDFS的工作目录 -->
  4. <property>
  5. <name>hive.metastore.warehouse.dir</name>
  6. <value>/user/hive/warehouse</value>
  7. </property>
  8. <!-- Hive元数据存储的验证 -->
  9. <property>
  10. <name>hive.metastore.schema.verification</name>
  11. <value>false</value>
  12. </property>
  13. <!-- 元数据存储授权 -->
  14. <property>
  15. <name>hive.metastore.event.db.notification.api.auth</name>
  16. <value>false</value>
  17. </property>
  18. <!-- 指定存储元数据要连接的地址 -->
  19. <property>
  20. <name>hive.metastore.uris</name>
  21. <value>thrift://hadoop2:9083</value>
  22. </property>
  23. <!-- 指定hiveserver2连接的host -->
  24. <property>
  25. <name>hive.server2.thrift.bind.host</name>
  26. <value>hadoop2</value>
  27. </property>
  28. <!-- 指定hiveserver2连接的端口号 -->
  29. <property>
  30. <name>hive.server2.thrift.port</name>
  31. <value>10000</value>
  32. </property>
  33. </configuration>

报错原因1:

1、Jar包冲突

因为跟hadoop的jar包存在冲突,主要有两个jar包冲突,一个log4j-slf4j-impl-2.10.0.jar跟hadoop冲突,可以删除,我这里就打个标记弃用。

  1. mv $HIVE_HOME/lib/log4j-slf4j-impl-2.10.0.jar $HIVE_HOME/lib/log4j-slf4j-impl-2.10.0.bak

另一个时guava-19.0.jar,跟hadoop里面的guava-27.0-jre.jar冲突,采用高版本替换低版本的方式。

  1. cp $HADOOP_HOME/share/hadoop/common/lib/guava-27.0-jre.jar $HIVE_HOME/lib
  2. rm $HIVE_HOME/lib/guava-19.0.jar

报错原因2:

hive-site.xml配置文件中,3278行(见报错记录第二行)有特殊字符

Exception in thread "main" java.lang.RuntimeException: com.ctc.wstx.exc.WstxParsingException: Illegal character entity: expansion character (code 0x8

at [row,col,system-id]: [3278,96,"file:/export/servers/apache-hive-3.1.2-bin/conf/hive-site.xml"]

  1. [root@hadoop1 apache-hive-3.1.2-bin]# schematool -dbType mysql -initSchema
  2. Exception in thread "main" java.lang.RuntimeException: com.ctc.wstx.exc.WstxParsingException: Illegal character entity: expansion character (code 0x8
  3. at [row,col,system-id]: [3278,96,"file:/export/servers/apache-hive-3.1.2-bin/conf/hive-site.xml"]
  4. at org.apache.hadoop.conf.Configuration.loadResource(Configuration.java:3069)
  5. at org.apache.hadoop.conf.Configuration.loadResources(Configuration.java:3018)
  6. at org.apache.hadoop.conf.Configuration.loadProps(Configuration.java:2893)
  7. at org.apache.hadoop.conf.Configuration.addResourceObject(Configuration.java:1034)
  8. at org.apache.hadoop.conf.Configuration.addResource(Configuration.java:939)
  9. at org.apache.hadoop.hive.conf.HiveConf.initialize(HiveConf.java:5151)
  10. at org.apache.hadoop.hive.conf.HiveConf.<init>(HiveConf.java:5104)
  11. at org.apache.hive.beeline.HiveSchemaTool.<init>(HiveSchemaTool.java:96)
  12. at org.apache.hive.beeline.HiveSchemaTool.main(HiveSchemaTool.java:1473)
  13. at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  14. at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
  15. at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  16. at java.lang.reflect.Method.invoke(Method.java:498)
  17. at org.apache.hadoop.util.RunJar.run(RunJar.java:323)
  18. at org.apache.hadoop.util.RunJar.main(RunJar.java:236)
  19. Caused by: com.ctc.wstx.exc.WstxParsingException: Illegal character entity: expansion character (code 0x8
  20. at [row,col,system-id]: [3278,96,"file:/export/servers/apache-hive-3.1.2-bin/conf/hive-site.xml"]
  21. at com.ctc.wstx.sr.StreamScanner.constructWfcException(StreamScanner.java:634)
  22. at com.ctc.wstx.sr.StreamScanner.throwParseError(StreamScanner.java:504)
  23. at com.ctc.wstx.sr.StreamScanner.reportIllegalChar(StreamScanner.java:2469)
  24. at com.ctc.wstx.sr.StreamScanner.validateChar(StreamScanner.java:2416)
  25. at com.ctc.wstx.sr.StreamScanner.resolveCharEnt(StreamScanner.java:2382)
  26. at com.ctc.wstx.sr.StreamScanner.fullyResolveEntity(StreamScanner.java:1528)
  27. at com.ctc.wstx.sr.BasicStreamReader.nextFromTree(BasicStreamReader.java:2818)
  28. at com.ctc.wstx.sr.BasicStreamReader.next(BasicStreamReader.java:1121)
  29. at org.apache.hadoop.conf.Configuration$Parser.parseNext(Configuration.java:3373)
  30. at org.apache.hadoop.conf.Configuration$Parser.parse(Configuration.java:3159)
  31. at org.apache.hadoop.conf.Configuration.loadResource(Configuration.java:3052)
  32. ... 14 more

进入hive-site.xml文件,跳转到对应行,删除里面的&#8特殊字符即可

报错原因3:

问题 Exception in thread "main" java.lang.IllegalArgumentException: java.net.URISyntaxException: Relative

一、问题

  1. Exception in thread "main" java.lang.IllegalArgumentException: java.net.URISyntaxException: Relative path in absolute URI: ${system:java.io.tmpdir%7D/$%7Bsystem:user.name%7D
  2. at org.apache.hadoop.fs.Path.initialize(Path.java:254)
  3. at org.apache.hadoop.fs.Path.<init>(Path.java:212)
  4. at org.apache.hadoop.hive.ql.session.SessionState.createSessionDirs(SessionState.java:663)
  5. at org.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:586)
  6. at org.apache.hadoop.hive.ql.session.SessionState.beginStart(SessionState.java:553)
  7. at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:750)
  8. at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:686)
  9. at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  10. at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
  11. at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  12. at java.lang.reflect.Method.invoke(Method.java:497)
  13. at org.apache.hadoop.util.RunJar.run(RunJar.java:234)
  14. at org.apache.hadoop.util.RunJar.main(RunJar.java:148)
  15. Caused by: java.net.URISyntaxException: Relative path in absolute URI: ${system:java.io.tmpdir%7D/$%7Bsystem:user.name%7D
  16. at java.net.URI.checkPath(URI.java:1823)
  17. at java.net.URI.<init>(URI.java:745)
  18. at org.apache.hadoop.fs.Path.initialize(Path.java:251)

二、解决

  1. hive下新建tmp文件:
  2. mkdir iotmp
  3. 查看hive-site.xml
  4. 查找xml"system:java.io.tmpdir"的配置项,如果存在直接修改地址路径到自己新建的路径下。
  5. 不存在则加入配置:
  6. <property>
  7. <name>system:java.io.tmpdir</name>
  8. <value>xxxxxx</value> 自己新建的路径
  9. <description/>
  10. </property>
  11. 保存退出,重新启动hive成功。

8、下载connecor/J驱动

下载MySQL的java版本的驱动解压,放到hive/lib文件内

  1. wget https://downloads.mysql.com/archives/get/p/3/file/mysql-connector-java-8.0.11.tar.gz
  2. tar -zxvf mysql-connector-java-8.0.11.tar.gz
  3. cd mysql-connector-java-8.0.11
  4. chmod 777 mysql-connector-java-8.0.11.jar
  5. cp mysql-connector-java-8.0.11.jar /usr/share/hive/lib/

9、远程服务

hadoop1服务安装好的Hive给hadoop2和hadoop3

  1. scp -r apache-hive-3.1.2-bin/ hadoop2:/export/servers/
  2. scp -r apache-hive-3.1.2-bin/ hadoop3:/export/servers/

hadoop1节点:

启动Hive中的hiveserver2节点

  1. bin/hiveserver2

hadoop2节点/hive2节点

  1. beeline> !connect jdbc:hive2://hadoop1:10000
  2. #默认端口号是10000
  3. Connecting to jdbc:hive2://hadoop1:10000
  4. #输入账号密码
  5. Enter username for jdbc:hive2://hadoop1:10000: root
  6. Enter password for jdbc:hive2://hadoop1:10000: ******

八、hive3.1.2 安装及其配置(本地模式和远程模式)的更多相关文章

  1. maven的下载安装,配置本地仓库

    maven的下载安装 下载地址:http://maven.apache.org/download.cgi 下载完成后解压到某一个目录 配置环境变量 第一个环境变量 MAVEN_HOME A:\mave ...

  2. maven配置本地仓库和远程仓库

    配置本地仓库 修改maven安装目录下conf/settings.xml,也可以在idea配置中覆盖 <localRepository>E:\maven\MavenRepository&l ...

  3. 【三十一】thinkphp之安装、配置、模块化及URL模式

    一:安装与配置 1.获取ThinkPHP 下载地址:http://www.thinkphp.cn/down.html 2.入口文件 ThinkPHP采用单一入口模式对项目进行部署和访问,所以我们需要通 ...

  4. (一)初探Maven之本地安装与配置本地仓库

    引言:          大多数IDE都会自带maven,如果你打开c盘用户目录,你会看到一个.m2文件这就是编译器自带maven的仓库父目录,但由于其在C盘和其他原因,一般我们会自己重新安装mave ...

  5. 安装RHEL7配置本地yum源 -- yum不能安装时,在本地安装,亲测成功

    RHEL7 本地yum源配置我们在安装Redhat的时候一般都不会填写注册信息,因为该产品是要购买的,所以我们在使用安装好的Redhat时有的功能是受限的,使用yum源install就是其中之一.那么 ...

  6. CentOS6.4下Mysql数据库的安装与配置,导入数据库,授权远程ip

    卸载掉原有mysql 由于mysql数据库在Linux上实在是太流行了,所以眼下下载的主流Linux系统版本号基本上都集成了mysql数据库在里面,我们能够通过例如以下命令来查看我们的操作系统上是否已 ...

  7. P6 EPPM 安装与配置指南 16 R1 2016.4

       关于安装和 配置P6 EPPM 本指南告诉你如何自动 安装和配置您的应用程序. 在您开始之前,阅读 先决条件 P6 EPPM配置 (7页). 安装P6 EPPM 您将使用 安装程序 (窗口) . ...

  8. Maven安装、配置及基础

    简介: Maven是Apache公司的开源项目,是项目构建工具,用来管理依赖. Maven的优点: 同样的代码实现相同的功能,Maven项目没有Jar包,项目大小更小. maven的优点如何实现: 没 ...

  9. CentOS7 64位下 MySQL5.7的安装与配置(YUM)

    趁着11.11的时候在阿里云上弄了一云服务ECS(作为自己的节日礼物 > _ <) ,系统为CentOS的,打算弄一个人博客之类的,这些天正在备案当中(不知得多久). 忙里偷闲,在中午休息 ...

随机推荐

  1. 如何利用Prometheus监控你的应用(此列子是对于golang sdk进行运用)

    Prometheus作为一套完整的开源监控接近方案,因为其诸多强大的特性以及生态的开放性,俨然已经成为了监控领域的事实标准并在全球范围内得到了广泛的部署应用.那么应该如何利用Prometheus对我们 ...

  2. 2020.12.20-Codeforces Round #105补题

    B - Escape The princess is going to escape the dragon's cave, and she needs to plan it carefully. Th ...

  3. 2020.3.28-ICPC训练联盟周赛,选用试题:UCF Local Programming Contest 2016

    A.Majestic 10 签到题. #include<iostream> #include<cstdio> #include<cstring> #include& ...

  4. Visual Studio CMake 项目和 WSL

    Visual Studio CMake 项目和 WSL https://devblogs.microsoft.com/cppblog/c-with-visual-studio-2019-and-win ...

  5. Spring中属性注入的几种方式以及复杂属性的注入详解

    在spring框架中,属性的注入我们有多种方式,我们可以通过set方法注入,可以通过构造方法注入,也可以通过p名称空间注入,方式多种多样,对于复杂的数据类型比如对象.数组.List.Map.Prope ...

  6. 【UE4 设计模式】策略模式 Strategy Pattern

    概述 描述 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换.策略模式让算法的变化不会影响到使用算法的客户. 套路 Context(环境类) 负责使用算法策略,其中维持了一 ...

  7. 表单编辑时el-form的validate方法执行无效,阻塞代码运行 - Element UI踩坑记录

    今天在用element-ui写管理后台需求时,遇到一个奇怪的问题 一个正常带校验的表单,在新增列表数据时表单校验功能正常: 但是在新增之后再去编辑数据时,表单校验却失效了,甚至阻塞了后续的代码执行,控 ...

  8. 单片机stm32的5个时钟源的详细分析

    众所周知STM32有5个时钟源HSI.HSE.LSI.LSE.PLL,其实他只有四个,因为从上图中可以看到PLL都是由HSI或HSE提供的. 其中,高速时钟(HSE和HSI)提供给芯片主体的主时钟.低 ...

  9. (转载)关于Linux C函数strtok的使用要点

    今天遇到了处理字符串的问题,比如分割问题,但是一时间想不起来什么方法,也不想手写一个类似java String中的split函数,于是百度了一下,发现了strtok这个好用的方法,以此作为总结. st ...

  10. hdu 1166 敌兵布阵(单点更新,区间查询)

    题意: N个工兵营地.工兵营地里的人数分别为:a1,a2,....aN Add i,j:第i个工兵营地里增加j人 Sub i,j:第i个工兵营地里减少j人 Query i,j:查询第i个第j个工兵营地 ...