事无巨细 Hive1.2.1 Hiveserver搭建详解
上文介绍了Hadoop2.6.4集群搭建的详细步骤。现在我们在此基础上,搭建Hiveserver。同样,事无巨细,难免跑题。
环境需求列表
- Hive1.2版本开始,依赖Java1.7+,0.14-1.1版本依赖Java1.6+。推荐用Java1.8
- 推荐使用Hadoop2.x 系列。Hive2.0开始不再支持Hadoop1.x系列。0.13版之前的Hive也仍支持Hadoop0.20.x和0.23.x系列。
- 在生产环境下推荐使用Linux或Windows系统。Mac系统仅推荐在试验环境使用。
下载安装Hive
从镜像列表http://www.apache.org/mirrors 找个速度快的国内镜像。
下载Hive安装包
1
wget http://mirrors.cnnic.cn/apache/hive/hive-1.2.1/apache-hive-1.2.1-bin.tar.gz
解压到当前用户目录下(我的安装包都下载在用户的download的目录下。)
1
tar -xzvf apache-hive-1.2.1-bin.tar.gz -C ~/
强迫症,改个和Hadoop统一的名字。
1
mv apache-hive-1.2.1-bin/ hive-1.2.1
设置环境变量
需要配置HIVE_HOME和HIVE_BIN
1
vim ~/.bashrc
修改内容如下:
1
2
export HIVE_HOME=$HOME/hive-1.2.1
export PATH=$PATH:$HOME/bin:$HIVE_HOME/binsour
立即生效
1
source ~/.bashrc
Metadata Store MySQL安装
Hive有三种元数据存储的模式。
- Embedded mode
- Local mode
- Remote mode
很多文章里都有介绍,但是很少有人具体解释其区别和原理。OneCoder很不满意,这里找到一篇介绍,至少对我来说,算是能看懂他所介绍的。 Metastore Deployment Modes
这里采用Remote mode。因此我们先要部署MySQL。
安装MySQL5.7.12
下载
1
wget http://cdn.mysql.com//Downloads/MySQL-5.7/mysql-community-server-5.7.12-1.el6.x86_64.rpm
安装
1
sudo rpm -i mysql-community-server-5.7.12-1.el6.x86_64.rpm
发现缺少依赖
1
mysql-community-common-5.7.12、mysql-community-client-5.7.12和mysql-community-libs-5.7.12
下载依赖:
1
2
3
wget http://repo.mysql.com/yum/mysql-5.7-community/el/6/x86_64/mysql-community-common-5.7.12-1.el6.x86_64.rpm
wget http://repo.mysql.com/yum/mysql-5.7-community/el/6/x86_64/mysql-community-client-5.7.12-1.el6.x86_64.rpm
wget http://repo.mysql.com/yum/mysql-5.7-community/el/6/x86_64/mysql-community-libs-5.7.12-1.el6.x86_64.rpm
赋予可执行权限
1
chmod 700 mysql-community-*
安装依赖
1
2
3
sudo rpm -i mysql-community-libs-5.7.12-1.el6.x86_64.rpm
sudo rpm -i mysql-community-common-5.7.12-1.el6.x86_64.rpm
sudo rpm -i mysql-community-client-5.7.12-1.el6.x86_64.rpm
安装MySQL
1
sudo rpm -i mysql-community-server-5.7.12-1.el6.x86_64.rpm
创建自己的MySQL数据目录,在当前用户的主目录下执行
1
2
mkdir -p metastore-mysql/data
mkdir -p metastore-mysql/logs
赋予权限,由于mysql实际是使用mysql用户启动服务。而我们的数据目录改在了dps-hadoop用户的根目录下,所以得从根上,给mysql用户以RX权限
1
sudo chmod -R 755 /home/dps-hadoop
修改my.cnf配置文件
1
vim /etc/my.cnf
内容如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[mysqld]
datadir=/home/dps-hadoop/metastore-mysql/data
socket=/home/dps-hadoop/metastore-mysql/data/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
[mysqld_safe]
socket=/home/dps-hadoop/metastore-mysql/data/mysql.sock
log-error=/home/dps-hadoop/mysqllog/mysqld.log
pid-file=/home/dps-hadoop/metastore-mysql/data/mysqld.pid
[mysql]
socket=/home/dps-hadoop/metastore-mysql/data/mysql.sock
[mysqladmin]
socket=/home/dps-hadoop/metastore-mysql/data/mysql.sock
datadir=/home/dps-hadoop/metastore-mysql/data
socket=/home/dps-hadoop/metastore-mysql/data/mysql.sock
log-error=/home/dps-hadoop/mysqllog/mysqld.log
其中log-error对应的路径需要提前创建,而datadir路径会自动创建。
关闭Selinux,否则会因为无法创建数据目录而报错。
1
setenforce 0
启动mysql
1
sudo service mysqld start
在启动日志里会发现root用户的临时密码: qkkmgd.Np0?N 登录后修改密码即可。
1
mysql -u root -p
创建数据库hive
1
mysql> create database hive;
创建hive用户并授权
1
mysql> grant all on hive.* to hive@'%' identified by '密码';
配置Hive
Hive在conf目录下提供了一个配置文件模版hive-default.xml.template供我们修改。而Hive会默认加载hive-site.xml配置文件。因此,拷贝一份。
1
cp conf/hive-default.xml.template conf/hive-site.xml
同样,按照了解,我们需要配置metastore的相关信息,如数据库连接,驱动,用户名,密码等。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>hive</value>
<description>Username to use against metastore database</description>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>数据库密码</value>
<description>password to use against metastore database</description>
</property>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://master:3306/hive?createDatabaseIfNotExist=true&useSSL=false;</value>
<description>JDBC connect string for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
<description>Driver class name for a JDBC metastore</description>
</property>
<property>
<name>hive.metastore.uris</name>
<value>thrift://master:9083</value>
<description>Thrift URI for the remote metastore. Used by metastore client to connect to remote metastore.</description>
</property>
这里,metastore服务的默认端口为9083。
还需要配置本地数据仓库路径
1
2
3
4
5
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/home/dps-hadoop/warehouse</value>
<description>location of default database for the warehouse</description>
</property>
由于我们需要连接MySQL数据库,而Hive并没有提供相应的驱动,所以需要下载MySQL JDBC驱动,并放在Hive的lib目录下。直接进入lib目录执行
1
wget http://central.maven.org/maven2/mysql/mysql-connector-java/5.1.38/mysql-connector-java-5.1.38.jar
修改log日志文件位置
Hive默认将日志存放在/tmp/${user.name}下。为了方便维护和查看,修改日志文件位置。
1
cp conf/hive-log4j.properties.template conf/hive-log4j.properties
修改
1
hive.log.dir=/home/dps-hadoop/logs/hive
启动HiveServer服务
启动MetaStore Service
1
bin/hive --service metastore &
启动HiveServer
1
bin/hive --service hiveserver2 &
查看日志一切正常。
验证Hive客户端
1
bin/hive
发现报错
Exception in thread “main” java.lang.IncompatibleClassChangeError: Found class jline.Terminal, but interface was expected
这是由于jline的版本冲突,在hadoop的lib带的版本低。解决办法,修改hive-env.sh
1
vim conf/hive-env.sh
添加
1
export HADOOP_USER_CLASSPATH_FIRST=true
即用hive里的高版本覆盖Hadoop里的低版本。
再次启动客户端,一切OK。通过beeline客户端验证也ok。至此Hiveserver2部署完成。