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
目录,可自定。
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
解决一些依赖(不是都必须成功,有的自身配置就是最新就不会安装)
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
按次序安装
common
—libs
—client
—server
—devel
(最后一个随意)
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
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
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';
(修改密码)`可自定但以防出现错误先用这个`
登陆方法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初始的密码策略
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';
即可
重新进一遍就会出现
< 3,与Navicat的连接
由于本主机安装的是8.0的版本,所以用户授予权限时:
GRANT ALL PRIVILEGES ON *.* 'root'@'%' identified by ‘123123’ WITH GRANT OPTION;
之类的写法会报错!
正确写法
(`创建用户`) create user 'root'@'%' identified by '123456';
(`赋予权限`) grant all privileges on *.* to 'root'@'%';
(`执行命令修改`) alter user 'root'@'%'identified with mysql_native_password by '123456';
(`生效`) flush privileges;
切记:注意写法,要不就会报错1064
打开Navicat新建连接
相对应输入并连接
之后便会出现数据库
5,配置hive
<1, vim /etc/profile
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, 到hive
的conf
目录下
新建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.xml
将hive-site.xml
文件中的${system:java.io.tmpdir}
替换为hive
的临时目录
我替换为/opt/hive/tmp
如果不存在要手工创建并赋予读写权限
将${system:user.name}
都替换为root
在未插入之前,使用 / 可以进行查询,n 为下一个可以 i,esc,n,i,esc,n 进行相应的删改
删改内容要全部找完为止
修改数据库相关设置
找到javax.jdo.option.ConnectionURL
,将该name对应的value修改为MySQL的地址
jdbc:mysql://192.168.1.111:3306/myhive?createDatabaseIfNotExist=true
myhive代表Navicat中所显示的数据库名字,自拟
ip地址与自身对应。
找到javax.jdo.option.ConnectionDriverName
,将该name对应的value修改为MySQL驱动类路径
com.mysql.jdbc.Driver
找到javax.jdo.option.ConnectionUserName
,将对应的value修改为MySQL数据库登录名
找到javax.jdo.option.ConnectionPassword
,将对应的value修改为MySQL数据库的登录密码
找到hive.metastore.schema.verification
,将对应的value修改为false
<4, 将MySQL的jar
包传输到Hive的lib目录下
不要将整个压缩包传进,只要其中的jar包
<5, vim hive-env.sh
export HADOOP_HOME=/opt/hadoop
export HIVE_CONF_DIR=/opt/hive/conf
export HIVE_AUX_JARS_PATH=/opt/hive/lib
6,在hive
的bin
目录下对数据库进行初始化
schematool -initSchema -dbType mysql
7,输入hive
登陆
8,简单测试show functions;
查看函数
9,简单操作
在mysql
中
create database abc;
use abc;
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
中
新建数据库
create database db_myhive_edu;
use db_myhive_edu;
create table student(id int,name string) row format delimited fields terminated by '\t';
在/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;
查看
select * from student;
Navicat中
新建查询
SELECT * FROM myhive.TBLS
在浏览器中
至此完成本地模式搭建