⼋、hive3.1.2安装及其配置(本地模式和远程模式)
⽬录
前⽂
hive3.1.2 安装及其配置(本地模式和远程模式)
下载
1、下载hive包
wget /dist/hive/hive-3.1.2/apache-hive-3.1.
#可选⽤清华镜像
mirror.tuna.tsinghua.edu/apache/hive/hive-3.1.2/apache-hive-3.1.
2、修改其环境变量
vim /etc/profile
#增加环境变量
export HIVE_HOME=/export/servers/apache-hive-3.1.2-src
export PATH=$PATH:$HIVE_HOME/bin
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的源
###在CentOS 7 / RHEL 7系统上###
rpm -Uvh arch.rpm
###在CentOS 7 / RHEL 6系统上###
rpm -Uvh arch.rpm
2、安装MySQL Community Server
MySQL yum存储库包含⽤于多个MySQL版本的多个存储库配置。 因此,⾸先禁⽤mysql repo⽂件中的所有存储库
sed -i 's/enabled=1/enabled=0/' /pos.po
启⽤centos mysql8版本
## CentOS & RedHat 版本
yum --enablerepo=mysql80-community install mysql-community-server
## Fedora Systems 版本
dnf --enablerepo=mysql80-community install mysql-community-server
3、启动MySQL服务
service mysqld start
使⽤Systemd
systemctl start mysqld.service
4、查MySQL root密码
安装MySQL 8.0后,将为MySQL根⽤户创建⼀个临时密码。 您可以在⽇志⽂件中到⽣成的临时密码。密码⽂件位置:/var/log/mysqld.log grep "A temporary password" /var/log/mysqld.log
5、重置root密码
⾸次安装MySQL后,执⾏mysql_secure_installation命令以保护MySQL服务器,包含重置密码步骤
密码需要特殊要求,⼋位,⼤⼩写,特殊符号
mysql_secure_installation
Enter password for user root:
The existing password for the user account root has expired. Please set a new password.
New password:
Re-enter new password:
Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y
Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y
Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
6、MySQL 服务加⼊开机启动项,并启动mysql进程
### Using Systemd
systemctl enable mysqld.service
systemctl restart mysqld.service
开放3306端⼝
如果服务器开启了防⽕墙,记得开启3306端⼝
systemctl enable iptables
systemctl start iptables
vim /etc/sysconfig/iptables
##规则中加⼊
-
A INPUT -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT
##重启防⽕墙
systemctl enable iptables.service
systemctl start iptables.service
7、登录MySQL
mysql -uroot -p
修改您的密码不满⾜当前的策略要求,可修改成简单密码
*# 查看密码策略*
> mysql> SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+--------+
| Variable_name | Value |
+--------------------------------------+--------+
| validate_password.check_user_name | ON |
| validate_password.dictionary_file | |
| validate_password.length | 8 |
| validate_password.mixed_case_count | 1 |
| validate_password.number_count | 1 |
| validate_password.policy | MEDIUM |
| validate_password.special_char_count | 1 |
+--------------------------------------+--------+
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 整个密码中⾄少要包含特殊字符的个数;
set global validate_password.policy=0;
set global validate_password.length=1;
8、配置mysql允许远程访问
#登录
mysql -u root -p
#查看⽤户表
select user,host,authentication_string from mysql.user;
#切换数据库
use mysql;
#更新⽤户表:
update user set host='%' where user='root';
#配置mysql允许远程访问
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
#强制刷新权限
flush privileges;
9、附mysql常⽤命令:
登录mysql
mysql -u username -p
启动mysql
systemctl start mysqld.service
结束mysql
systemctl stop mysqld.service
重启mysql
systemctl restart mysqld.service
开机⾃启
systemctl enable mysqld.service
4、将MySQL的JDBC驱动拷贝到Hive的lib⽬录下
我这⾥选⽤的8.0.27⾃⼰可以选择版本去下载
[MySQL官⽹下载驱动]()
#Platform Independent
wget sql//Downloads/Connector-J/mysql-connector-java-8.0. #解压⽂件到Hive的lib⽬录下
5、配置hive⽂件
cd /export/servers/apache-hive-3.1.2-src/conf
把初始化的配置⽂件 复制⼀份出来 并且改名
cp plate hive-env.sh
l.l
cp plate hive-log4j2.properties
cp plate hive-exec-log4j2.properties
6、配置hive-env.sh
vi hive-env.sh
⽂件末尾处
# Set HADOOP_HOME to point to a specific hadoop install directory
export HADOOP_HOME=/export/servers/hadoop-3.3.1 #hadoop安装路径
# Hive Configuration Directory can be controlled by:
export HIVE_CONF_DIR=/export/servers/apache-hive-3.1.2-src/conf #hive路径
# Folder containing extra libraries required for hive compilation/execution can be controlled by:
export HIVE_AUX_JARS_PATH=/export/servers/apache-hive-3.1.2-src/lib #hivejar包路径
配置l⽂件
⾸先使⽤hadoop创建3个⽂件夹
hdfs dfs -mkdir -p /user/hive/warehouse
hadoop fs -mkdir -p /user/hive/tmp
hadoop fs -mkdir -p /user/hive/log
修改⽂件夹权限
hadoop fs -chmod -R 777 /user/hive/warehouse
hadoop fs -chmod -R 777 /user/hive/tmp
hadoop fs -chmod -R 777 /user/hive/log
7、配置Metastore到MySQL
在标签加⼊下⾯配置:
l
在$HIVE_HOME/conf修改新建l⽂件,根据⾃⼰的情况更在主机名,mysql的⽤户名和密码
<configuration>
<!-- jdbc连接的URL -->
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://hadoop1:3306/metastore?createDatabaseIfNotExist=true&useSSL=false&serverTimezone=GMT</value> </property>
<!-- jdbc连接的Driver-->
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value&sql.cj.jdbc.Driver</value>
<!-- <value&sql.cj.jdbc.Driver</value> -->
</property>
<!-- jdbc连接的username-->
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<!-- jdbc连接的password -->
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>000000</value>
</property>
<property>
<name>system:pdir</name>
<value>/export/servers/data/hive/tmp</value>
<description/>
</property>
</configuration>
注意: &;代表&
<configuration>
<!--以下可选作,建议Hive3.x不要⽤-->
<!-- Hive默认在HDFS的⼯作⽬录 -->
<property>
<name&astore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>
<!-- Hive元数据存储的验证 -->
<property>
<name&astore.schema.verification</name>
<value>false</value>
</property>
<!-- 元数据存储授权 -->
<property>
<name&astore.ification.api.auth</name>
<value>false</value>
</property>
<!-- 指定存储元数据要连接的地址 -->
<property>
<name&astore.uris</name>
<value>thrift://hadoop2:9083</value>
</property>
<!-- 指定hiveserver2连接的host -->
<property>
<name>hive.server2.thrift.bind.host</name>
<value>hadoop2</value>
</property>
<!-- 指定hiveserver2连接的端⼝号 -->
<property>
<name>hive.server2.thrift.port</name>
<value>10000</value>
</property>
</configuration>
报错原因1:
1、Jar包冲突
因为跟hadoop的jar包存在冲突,主要有两个jar包冲突,⼀个log4j-slf4j-impl-2.10.0.jar跟hadoop冲突,可以删除,我这⾥就打个标记弃⽤。
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冲突,采⽤⾼版本替换低版本的⽅式。
cp $HADOOP_HOME/share/hadoop/common/lib/guava-27.0-jre.jar $HIVE_HOME/lib
rm $HIVE_HOME/lib/guava-19.0.jar
报错原因2:
Exception in thread "main" java.lang.RuntimeException: WstxParsingException: Illegal character entity: expansion character (code 0x8
at [row,col,system-id]: [3278,96,"file:/export/servers/apache-hive-3.1.2-bin/l"]
[root@hadoop1 apache-hive-3.1.2-bin]# schematool -dbType mysql -initSchema
Exception in thread "main" java.lang.RuntimeException: WstxParsingException: Illegal character entity: expansion character (cod
e 0x8
at [row,col,system-id]: [3278,96,"file:/export/servers/apache-hive-3.1.2-bin/l"]
at org.f.Configuration.loadResource(Configuration.java:3069)
at org.f.Configuration.loadResources(Configuration.java:3018)
at org.f.Configuration.loadProps(Configuration.java:2893)
at org.f.Configuration.addResourceObject(Configuration.java:1034)
at org.f.Configuration.addResource(Configuration.java:939)
at org.apache.f.HiveConf.initialize(HiveConf.java:5151)
at org.apache.f.HiveConf.<init>(HiveConf.java:5104)
at org.apache.hive.beeline.HiveSchemaTool.<init>(HiveSchemaTool.java:96)
at org.apache.hive.beeline.HiveSchemaTool.main(HiveSchemaTool.java:1473)
flect.NativeMethodAccessorImpl.invoke0(Native Method)
flect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
flect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at flect.Method.invoke(Method.java:498)
at org.apache.hadoop.util.RunJar.run(RunJar.java:323)
at org.apache.hadoop.util.RunJar.main(RunJar.java:236)
Caused by: WstxParsingException: Illegal character entity: expansion character (code 0x8
at [row,col,system-id]: [3278,96,"file:/export/servers/apache-hive-3.1.2-bin/l"]
wstx.structWfcException(StreamScanner.java:634)
wstx.sr.StreamScanner.throwParseError(StreamScanner.java:504)
wstx.portIllegalChar(StreamScanner.java:2469)
wstx.sr.StreamScanner.validateChar(StreamScanner.java:2416)
wstx.solveCharEnt(StreamScanner.java:2382)
wstx.sr.StreamScanner.fullyResolveEntity(StreamScanner.java:1528)
wstx.FromTree(BasicStreamReader.java:2818)
wstx.(BasicStreamReader.java:1121)
at org.f.Configuration$Parser.parseNext(Configuration.java:3373)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论