实验环境:
- 操作系统:CentOS7(64位)
- Hadoop版本:Hadoop3.1.3
- Hive版本:Apache-Hive-1.2
- Mysql jdbc:mysql-connector-java-5.1.40.tar.gz
实验步骤:
1.Hive的安装和配置
首先需要下载Hive安装包并解压,为了方便使用,我们配置一下环境变量,然后修改/hive/conf下的hive-site.xml配置文件,如下图。
图1 配置环境变量
图2 hive-site.xml配置信息
2.Mysql的安装和配置
该步骤需要安装Mysql和Mysql jdbc包,均可以在官网上下载。下载完成后,可以启动Mysql并查看其运行状态。
图3 启动Mysql并查看其运行状态
确认是否启动成功,Mysql节点处于LISTEN状态表示启动成功。
图4 Mysql启动成功
此时MySQL已经开始正常运行,不过要想进入MySQL还得先找出此时root用户的密码,通过如下命令可以在日志文件中找出密码,可见密码为Vfwwl=Cs>5xl。
图5 查看初始密码
接着可以用上一步找到的密码登录Mysql。
图6 登录Mysql
登录后必须先修改密码,才能对数据库进行操作,如下图重新设置密码。
图7 重置密码后查看状态
可以看到,characterset有两个不是utf8,这时我们需要在配置文件/etc/my.cnf中添加以下四行内容,更改Mysql语言。
图8 /etc/my.cnf配置文件添加内容
在Mysql中新建hive数据库,配置Mysql允许Hive接入。
图9 配置Mysql允许Hive接入
##这里将所有数据库的所有表的所有权限赋给hive用户,后面的hive是配置hive-site.xml中配置的连接密码。(认识这一点很关键!因为这里不能用hive作为密码所以接着hive-site.xml也需要修改。)##
接着可以启动hive了。(确保Hadoop集群已经启动)
图10 启动Hive
3.Hive编程实践
这里以词频统计算法为例,在Hive中进行简单的编程实践。
图11 写入input
写入input文件后,通过在Hive shell中执行HiveQL语句实现词频统计。
create table docs(line string);
load data inpath 'file:///opt/hadoop/input' overwrite into table docs;
create table word_count as
select word, count(1) as count from
(select explode(split(line,' '))as word from docs) w
group by word
order by word;
图12 执行HiveQL语句
通过执行过程可以看到,HiveQL语句能转化为MapReduce任务,这也是采用Hive实现最大的优势,可以不用学习编写Java MapReduce代码了。
图13 MapReduce执行过程
图14 词频统计执行结果
问题讨论:
1.注意CentOS和Ubuntu启动命令的不同。
CentOS启动Mysql:systemctl start mysqld.service;
Ubuntu启动Mysql:service mysql start
2.关于Mysql的安装与配置可参考:
CentOS7:CentOS7安装MySQL(完整版)_24只羊羊羊-CSDN博客_centos7安装mysql
Ubuntu:http://dblab.xmu.edu.cn/blog/install-mysql/
3.启动Hive过程中遇到的报错:
1)org.datanucleus.store.rdbms.exceptions.MissingTableException: Required table missing : “VERSION” in Catalog “” Schema “”. DataNucleus requires this table to perform its persistence operations.
解决:进入hive安装目录,执行命令“./bin/schematool -dbType mysql -initSchema”
2)随即又出现以下报错“Failed to get schema version”,如图。
关于“Access denied for user ‘hive’@‘localhost’”的报错,在网上查找了很多帖子,有说是权限问题的,有说是时区问题的,但是试过很多方法都没有解决。最后发现是hive-site.xml中的密码没有修改,所以才造成了无法连接的情况。
解决:在hive/conf/hive-site.xml中配置“useSSL=false”和“password”(修改成和之前登录Mysql时设置的password)。
图15 hive-site.xml文件配置内容
总之,虽然Hive的安装配置的过程并不复杂,但在实操中还是遇到了一些问题,尤其是在Hive连接Mysql时尤其需要注意密码设置的问题。HiveQL编程与MySQL语法类似,这也是Hive的最大优势所在,可以在不用编写MapReduce代码的情况下执行MapReduce任务。