本篇博客主要介绍“mysql5.7.18安装、Hive2.1.1安装和配置(基于Hadoop2.7.3集群)”。
注: Hive的安装对我来说比较曲折的,因为在使用hive命令测试的时候,没有发现什么问题,但是后来使用beeline连接,问题越来越多,由于自身解决能力太差,每个问题都花了好久,其中一部分问题是数据库的初始化问题,还有一部分是数据库的权限问题。因为命令行给出的错误提示比较少,要学会借助log信息查找方案,log信息默认在/tmp/${user.name}/hive.log中。
Hadoop2.7.3集群安装及配置参见: Hadoop完全分布式集群安装及配置(基于虚拟机)
OS版本: Ubuntu-server-16.04
注:以下mysql5.7.18安装、Hive2.1.1安装和配置均在主节点上进行,slave节点不需要安装
Step1: 采用apt-get安装mysql
Step2: 启动mysql服务
Step3: 进入mysql命令行
Step4: 创建一个database name为hive的数据库用于hive数据文件的存储
Step5: 给当前用户授权
命令如下:
sudo apt-get install mysql-server //采用apt-get安装mysql,会提示你设置mysql的用户名和密码,我的设为用户名root,密码root
service mysql start //启动mysql服务
mysql -uroot -p //进入mysql命令行,输入之后会提示你输入密码,输入上述密码root
mysql> create user hive identified by 'hive'; //创建一个用户名为hive,密码为hive的数据库
mysql> create database hive; //创建一个叫做hive的数据库
mysql> grant all on hive.* to hive@'%' identified by 'hive'; //给hive用户授权
mysql> grant all on hive.* to hive@'localhost' identified by 'hive'; //给hive用户授权
mysql> flush privileges;
mysql> exit; //退出mysql
注意:如果有涉及到数据库字符的问题,可将整个数据库的字符设置为latin1,再把需要中文的字段使用alter改为utf8。参考:http://blog.csdn.net/u013368491/article/details/71105643
下载地址: http://mirror.bit.edu.cn/apache/hive/
下载版本: hive-2.1.1
压缩包名称: apache-hive-2.1.1-bin.tar.gz
压缩包存放目录: /home/lina/Software/Hadoop/apache-hive-2.1.1-bin.tar.gz
这里我们将解压目录(安装目录)设置为/opt/Hadoop/下,使用下面的命令进行解压,并创建软连接:
cd /home/lina/Software/Hadoop //将当前目录切换至压缩包所在目录
tar zxf apache-hive-2.1.1-bin.tar.gz -C /opt/Hadoop //解压到安装目录,解压之后的名字是apache-hive-2.1.1-bin
mv apache-hive-2.1.1-bin apache-hive-2.1.1 //将文件夹的名字由apache-hive-2.1.1-bin变为apache-hive-2.1.1
ln -s apache-hive-2.1.1 hive //创建软连接
因为之前在已经配置过jdk,hadoop,zookeeper,hbase和pig的环境变量,所以这里只需要将hive的环境变量添加即可,添加内容在下图使用红框圈起来了(没圈的地方是之前已经配置过的环境变量,这里不需要变动),使用命令sudo vi ~/.bashrc
打开配置文件,配置如下:
export HIVE_HOME=/opt/Hadoop/apache-hive-2.1.1
export PATH=.:$HIVE_HOME/bin:$HIVE_HOME/conf
如下图:
使用source ~/.bashrc
使更改的环境变量立即生效。
(1)复制初始文件作为配置文件
进入${HIVE_HOME}\conf即/opt/Hadoop/apache-hive-2.1.1/conf目录下,执行下面的命令:
cp hive-env.sh.template hive-env.sh
cp hive-default.xml.template hive-site.xml
cp hive-log4j2.properties.template hive-log4j2.properties
cp hive-exec-log4j2.properties.template hive-exec-log4j2.properties
(2)修改hive-env.sh
进入${HIVE_HOME}\conf\即/opt/Hadoop/apache-hive-2.1.1/conf目录下,使用vi hive-en.sh
打开文件,在hive-env.sh中添加以下路径:
export JAVA_HOME=/opt/Java/jdk1.8 //Java路径
export HADOOP_HOME=/opt/Hadoop/hadoop-2.7.3 //Hadoop安装路径
export HIVE_HOME=/opt/Hadoop/hive-2.1.1 //Hive安装路径
export HIVE_CONF_DIR=/opt/Hadoop/hive-2.1.1/conf //Hive配置文件路径
(3)创建hdfs目录,用于配置hive-site.xml
在根目下,执行以下命令:
hdfs dfs -mkdir -p /user/hive/warehouse
hdfs dfs -mkdir -p /user/hive/tmp
hdfs dfs -mkdir -p /user/hive/log
hdfs dfs -chmod -R 777 /user/hive/warehouse
hdfs dfs -chmod -R 777 /user/hive/tmp
hdfs dfs -chmod -R 777 /user/hive/log
(4)在apache-2.1.1安装目录下创建一个tmp文件夹,用于存储临时文件,命令如下:
cd /opt/Hadoop/apache-hive-2.1.1/
mkdir tmp
(5)修改hive-site.xml
将hive-site.xml文件中的以下几个配置项的值设置成上一步中创建的几个路径:
<property>
<name>hive.exec.scratchdirname>
<value>/user/hive/tmpvalue>
property>
<property>
<name>hive.exec.local.scratchdirname>
<value>/opt/Hadoop/apache-hive-2.1.1/tmpvalue>
property>
<property>
<name>hive.metastore.warehouse.dirname>
<value>/user/hive/warehousevalue>
property>
<property>
<name>hive.downloaded.resources.dirname>
<value>/opt/Hadoop/apache-hive-2.1.1/tmp/${hive.session.id}_resourcesvalue>
property>
<property>
<name>hive.querylog.locationname>
<value>/user/hive/logvalue>
property>
在 hive-site.xml 文件中配置 MySQL 数据库连接信息:
<property>
<name>javax.jdo.option.ConnectionURLname>
<value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true&characterEncoding=UTF-8&useSSL=falsevalue>
property>
<property>
<name>javax.jdo.option.ConnectionDriverNamename>
<value>com.mysql.jdbc.Drivervalue>
property>
<property>
<name>javax.jdo.option.ConnectionUserNamename>
<value>hivevalue>
property>
<property>
<name>javax.jdo.option.ConnectionPasswordname>
<value>hivevalue>
property>
<property>
<name>hive.hwi.listen.portname>
<value>9999value>
property>
注意:上述ConnectionUserName和ConnectionPassword需要更加mysql中自己设置的用户名和密码做相应的更改。
(5)更改{system:java.io.tmpdir} / {system:user.name}
在配置文件hive-site.xml中:
将{system:java.io.tmpdir} 改成 /opt/Hadoop/apache-hive-2.1.1/tmp/
将{system:user.name} 改成 {user.name}
所有的更改见下图(可作为如何更改的参考,但是截图不一定全)。其中使用括起来的是没修改之前的默认配置,下面没有括起来的是做出的相应更改:
(6)修改core-site.xml文件
修改hadoop安装目录下的core-site.xml文件。若不修改,在执行hive的时候,会提示“xx is not allowed to impersonate hive”的错误信息。进入/opt/Hadoop/hadoop-2.7.3/etc/hadoop/,打开core-site.xml,添加如下内容:
<property>
<name>hadoop.proxyuser.hive.groupsname>
<value>*value>
property>
<property>
<name>hadoop.proxyuser.hive.hostsname>
<value>*value>
property>
<property>
<name>hadoop.proxyuser.lina.groupsname>
<value>*value>
property>
<property>
<name>hadoop.proxyuser.lina.hostsname>
<value>*value>
property>
注意:因为这个没添加遇到很多问题,现在整理的时候也感觉比较混乱,我这里是将在mysql创建的用户名hive和我ubuntu的登录用户名都添加进去。。。应该是添加一个用户名就可以,但是我不确定是哪一个^_^。
mysql的jdbc驱动包下载地址:https://dev.mysql.com/downloads/connector/j/
下载之后将文件夹解压,得到mysql-connector-java-5.1.42-bin.jar,将此jar包放在${HIVE_HOME}/lib目录,即/opt/Hadoop/apache-hive-2.1.1/lib下。
(1)从 Hive 2.1 版本开始, 我们需要先运行 schematool 命令来执行初始化操作。
schematool -dbType mysql -initSchema
看到schemaTool completed 则初始化完成 。
(2)可以使用schematool -dbType mysql -initInfo
查看数据库初始化信息。
(3)进入mysql中,查看hive中的表格信息,可看到如图内容:
mysql -uroot -p //进入mysql命令行,输入之后会提示你输入密码,输入上述密码root
use hive;
show tables;
(4)检测hive 是否成功,直接在命令行输入hive即可:
hive
启动成功的提示如图:
注意:启动hive时可能出现的错误信息:
1、若提示jdbc.mysql.Connection was not found,可能是mysql-connector-java-5.1.42-bin.jar放错了位置。
2、若提示关于schema init的错误,可能是数据库初始化未成功,如下图,需要再次尝试初始化:
hive启动成功后,使用下面的语句验证是否hive可用:
create table testHive(
id int,
name string
);
show tables;
参考文章:
http://sishuok.com/forum/blogPost/list/6221.html
http://blog.csdn.net/u013310025/article/details/70306421
http://www.cnblogs.com/yongjian/archive/2017/03/23/6607984.html(hive-site.xml的配置主要参考这篇文章)
**附:**Hadoop入门基础及简单实例代码:https://github.com/Nana0606/Hadoop_Introduction