Hive的本地安装配置(部分远程)及连接MySQL和Navicat



Hive

hive是基于Hadoop构建的一套数据仓库分析系统,它提供了丰富的SQL查询方式来分析存储在Hadoop分布式文件系统中的数据:可以将结构化的数据文件映射为一张数据库表,并提供完整的SQL查询功能;可以将SQL语句转换为MapReduce任务运行,通过自己的SQL查询分析需要的内容,这套SQL简称Hive SQL,使不熟悉mapreduce的用户可以很方便地利用SQL语言‘查询、汇总和分析数据。

三种安装模式

(metastore包括两部分,服务进程和数据的存储。)
内嵌模式,特点是:hive服务和metastore服务运行在同一个进程中,derby服务也运行在该进程中。
本地模式,特点是:hive服务和metastore服务运行在同一个进程中,mysql是单独的进程,可以在同一台机器上,也可以在远程机器上。该模式只需将hive-site.xml中的ConnectionURL指向mysql,并配置好驱动名、数据库连接账号即可。能够支持多会话和多用户连接。
远程模式,特点是:hive服务和metastore在不同的进程内,可能是不同的机器。该模式需要将hive.metastore.local设置为false,并将hive.metastore.uris设置为metastore服务器URI。举例来说就是,如果我们的hive客户端较多,在每个客户端都安装mysql服务,还是会造成一定的冗余和浪费,这种情况下就可以将mysql独立出来将元数据保存在远程独立的mysql服务中。仅连接远程的mysql并不能称之为“远程模式”,是否远程指的是metastore和hive服务是否在同一进程内

前提

Hadoop已安装配置且能正常启动,如果没有请参考:

所需文件

apache-hive-2.3.6-bin.tar.gz:下载地址 mysql-8.0.18-1.el7.x86_64.rpm-bundle.tar:下载地址

mysql-connector-java-8.0.18.zip 只需要其中的jar包:下载地址

由于官网下载忒慢,所以选用版本相较完整的华为开源镜像站

所需工具

Xshell,Xftp,Navicat等(皆可在官网下载)

另附网盘地址

提取码 a5dq

1,通过Xshell连接Xftp将所需文件传入到/opt目录,可自定。

hive 对应mysql中except_数据库


2,安装hive,为方便重命名以及删除包

tar -xzvf apache-hive-2.3.6-bin.tar.gz
mv apache-hive-2.3.6-bin hive
rm apache-hive-2.3.6-bin.tar.gz

3,安装mysql <1,卸载CentOS自带的Mariadb

rpm -qa|grep mariadb (查找)
rpm -e --nodeps 所查文件  (删除)
rm /etc/my.cnf  (删除配置文件)

<2,这里我通过rpm安装

tar -xvf mysql-8.0.18-1.el7.x86_64.rpm-bundle.tar

hive 对应mysql中except_mysql_02


解决一些依赖不是都必须成功,有的自身配置就是最新就不会安装

yum -y install numactl
yum -y install libaio.so.1 libgcc_s.so.1 libstdc++.so.6
yum update libstdc++-4.4.7-4.el6.x86_64
yum search libaio
yum install libaio
yum install net-tools
yum install openssl-devel
yum remove mysql-libs -y

按次序安装
commonlibsclientserverdevel最后一个随意

rpm -ivh mysql-community-common-8.0.18-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-8.0.18-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-8.0.18-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-8.0.18-1.el7.x86_64.rpm
rpm -ivh mysql-community-devel-8.0.18-1.el7.x86_64.rpm

hive 对应mysql中except_数据库_03


有的不成功就是上述依赖未更新

4,配置MySQL及连接Navicat
<1,初始化

mysqld --initialize --user=mysql --basedir=/usr --datadir=/var/lib/mysql

<2,启动

systemctl start mysqld

登陆方法1

vim /etc/my.cnf在 [mysqld] 下添加skip-grant-tables

hive 对应mysql中except_hive_04

systemctl restart mysqld (重启)
mysql -uroot -p  (密码直接回车即可)
use mysql;  (选择mysql数据库)
update user set authentication_string='' where user='root';
(将默认密码清空)
exit  (退出)
vim /etc/my.cnf
skip-grant-tables  (删除)
systemctl restart mysqld (重启)
mysql -uroot -p   (密码直接回车)
ALTER USER 'root'@'localhost' IDENTIFIED BY 'QWE123@qweasd';
(修改密码)`可自定但以防出现错误先用这个`

hive 对应mysql中except_hive_05


登陆方法2

查看初始密码,然后直接登陆,改密码(有时不成功

grep 'temporary password' /var/log/mysqld.log

小插曲

修改的密码想简单点如’123456’之类,但修改时会出现

ERROR 1819 (HY000): Your password does not satisfy the current policy requirements提示密码策略问题异常信息

解决方法

SHOW VARIABLES LIKE 'validate_password%'; 查看mysql初始的密码策略

hive 对应mysql中except_数据库_06


set global validate_password_policy=LOW; 设置密码的验证强度等级

set global validate_password_length=6; 设置密码长度

` 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;`

如果查看密码策略没有出现上图表格

INSTALL PLUGIN validate_password SONAME 'validate_password.so';即可

hive 对应mysql中except_数据库_07


重新进一遍就会出现

< 3,与Navicat的连接

由于本主机安装的是8.0的版本,所以用户授予权限时:

GRANT ALL PRIVILEGES ON *.* 'root'@'%' identified by ‘123123’ WITH GRANT OPTION;之类的写法会报错!

hive 对应mysql中except_hive 对应mysql中except_08


正确写法

(`创建用户`)  create user  'root'@'%' identified by '123456';
(`赋予权限`)  grant all privileges on  *.* to 'root'@'%';
(`执行命令修改`)  alter user 'root'@'%'identified with mysql_native_password by '123456';
(`生效`)  flush privileges;

hive 对应mysql中except_数据库_09


切记:注意写法,要不就会报错1064

打开Navicat新建连接

hive 对应mysql中except_数据库_10


相对应输入并连接

hive 对应mysql中except_hive 对应mysql中except_11


之后便会出现数据库

5,配置hive <1, vim /etc/profile

hive 对应mysql中except_mysql_12


hadoop与java的配置在开头请参考

添加对应的目录文件

export HIVE_HOME=/opt/hive
export HIVE_CONF_DIR=${HIVE_HOME}/conf
export CLASS_PATH=${HIVE_HOME}/lib
export PATH=$PATH:${HIVE_HOME}/bin

source /etc/profile <2, hiveconf目录下
新建hive-site.xml文件

cp hive-default.xml.template hive-site.xml

新建hive-env.sh文件

cp hive-env.sh.template  hive-env.sh

使用hadoop命令新建目录文件并赋予读写权限

hadoop fs -mkdir -p  /user/hive/warehouse
hadoop fs -chmod 777 /user/hive/warehouse 
hadoop fs -mkdir -p  /tmp/hive/
hadoop fs -chmod 777 /tmp/hive

查看是否创建成功

hadoop fs -ls /user/hive/
hadoop fs -ls /tmp/

< 3, vim hive-site.xmlhive-site.xml文件中的${system:java.io.tmpdir}替换为hive临时目录

我替换为/opt/hive/tmp如果不存在要手工创建并赋予读写权限

${system:user.name}都替换为root

hive 对应mysql中except_hive 对应mysql中except_13

在未插入之前,使用 / 可以进行查询,n 为下一个可以 i,esc,n,i,esc,n 进行相应的删改

hive 对应mysql中except_数据库_14


hive 对应mysql中except_hive_15


删改内容要全部找完为止修改数据库相关设置

找到javax.jdo.option.ConnectionURL,将该name对应的value修改为MySQL的地址

hive 对应mysql中except_hive 对应mysql中except_16

jdbc:mysql://192.168.1.111:3306/myhive?createDatabaseIfNotExist=true

myhive代表Navicat中所显示的数据库名字,自拟ip地址与自身对应。

找到javax.jdo.option.ConnectionDriverName,将该name对应的value修改为MySQL驱动类路径

hive 对应mysql中except_数据库_17

com.mysql.jdbc.Driver

找到javax.jdo.option.ConnectionUserName,将对应的value修改为MySQL数据库登录名

hive 对应mysql中except_mysql_18


找到javax.jdo.option.ConnectionPassword,将对应的value修改为MySQL数据库的登录密码

hive 对应mysql中except_数据库_19

找到hive.metastore.schema.verification,将对应的value修改为false

hive 对应mysql中except_大数据_20


<4, 将MySQL的jar包传输到Hive的lib目录下

hive 对应mysql中except_大数据_21

不要将整个压缩包传进,只要其中的jar包

<5, vim hive-env.sh

hive 对应mysql中except_大数据_22

export HADOOP_HOME=/opt/hadoop
export HIVE_CONF_DIR=/opt/hive/conf
export HIVE_AUX_JARS_PATH=/opt/hive/lib

6,在hivebin目录下对数据库进行初始化

schematool -initSchema -dbType mysql

hive 对应mysql中except_hive 对应mysql中except_23


成功之后便会,在Navicat中出现myhive

hive 对应mysql中except_数据库_24


也可以在mysql中 show databases;

hive 对应mysql中except_大数据_25

7,输入hive登陆

hive 对应mysql中except_数据库_26


8,简单测试show functions;查看函数

hive 对应mysql中except_hive 对应mysql中except_27


9,简单操作

mysql

create database abc;
use abc;

创建表

hive 对应mysql中except_大数据_28

CREATE TABLE IF NOT EXISTS `runoob_tbl`(
   `runoob_id` INT UNSIGNED AUTO_INCREMENT,
   `runoob_title` VARCHAR(100) NOT NULL,
   `runoob_author` VARCHAR(40) NOT NULL,
   `submission_date` DATE,
   PRIMARY KEY ( `runoob_id` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

如果你不想字段为 NULL 可以设置字段的属性为 NOT NULL, 在操作数据库时如果输入该字段的数据为NULL ,就会报错。
AUTO_INCREMENT定义列为自增属性,一般用于主键,数值会自动加1。
PRIMARY KEY关键字用于定义列为主键。 您可以使用多列来定义主键,列间以逗号分隔。
ENGINE 设置存储引擎,CHARSET 设置编码。

查看表

hive 对应mysql中except_hive_29


hive

新建数据库

create database db_myhive_edu;

hive 对应mysql中except_数据库_30


在刚创建的数据库中创建数据表

use db_myhive_edu;
create table student(id int,name string) row format delimited fields terminated by '\t';

hive 对应mysql中except_数据库_31


/opt/hive目录内新建一个文件(打开另一个终端)

touch /opt/hive/student.txt 在文件中编写

01      zhao
02      qian
03      sun
04      li
05      zhou
06      wu

id和name直接是TAB键,不是空格,因为在上面创建表的语句中用了terminated by '\t’所以这个文本里id和name的分割必须是用TAB键
转到hive

load data local inpath '/opt/hive/student.txt' into table db_myhive_edu.student;

hive 对应mysql中except_大数据_32


查看

select * from student;

hive 对应mysql中except_大数据_33


Navicat中

新建查询

SELECT * FROM myhive.TBLS

hive 对应mysql中except_数据库_34


在浏览器中

hive 对应mysql中except_数据库_35


至此完成本地模式搭建