在Docker环境成功搭建了Apache Hadoop 2.8 分布式集群,并实现了NameNode HA、ResourceManager HA之后(详见我的另一篇博文:Apache Hadoop 2.8分布式集群详细搭建过程),接下来将搭建最新稳定版的Apache Hive 2.1.1,方便日常在自己电脑上测试hive配置和作业,同样的配置也可以应用于服务器上。以下是Apache Hive 2.1.1的安装配置详细过程
1、阅读Apache Hive官网说明文档,下载最新版本Hive
Hive是一个基于Hadoop的数据仓库工具,将HDFS中的结构化数据映射为数据表,并实现将类SQL脚本转换为MapReduce作业,从而实现用户只需像传统关系型数据库提供SQL语句,并能实现对Hadoop数据的分析和处理,门槛低,非常适合传统的基于关系型数据库的数据分析向基于Hadoop的分析进行转变。因此,Hive是Hadoop生态圈非常重要的一个工具。
安装配置Apache Hive,最直接的方式,便是阅读 Apache Hive官网的说明文档,能了解到很多有用的信息。Apache Hive 要求JDK 1.7及以上,Hadoop 2.x(从Hive 2.0.0开始便不再支持Hadoop 1.x),Hive 可部署于Linux、Mac、Windows环境。
从官网下载最新稳定版本的 Apache Hive 2.1.1
2、安装配置Apache Hive
(1)解压 hive 压缩包
tar -zxvf apache-hive-2.1.1-bin.tar.gz
(2)配置环境变量
vi ~/.bash_profile
# 配置hive环境
export HIVE_HOME=/home/ahadoop/apache-hive-2.1.1-bin
export HIVE_CONF_DIR=$HIVE_HOME/conf
export PATH=$PATH:$HIVE_HOME/bin
# 使配置文件生效
source ~/.bash_profile
(3)配置hive-site.xml
官网给出了Apache Hive的配置说明,Hive的配置支持多种方式,主要如下(以map-reduce临时目录配置项 hive.exec.scratchdir 为例):
- 第1种,环境变量
set hive.exec.scratchdir=/tmp/mydir;
- 第2种,hive 交互命令的参数(--hiveconf)
bin/hive --hiveconf hive.exec.scratchdir=/tmp/mydir
- 第3种,hive-site.xml配置文件
<property>
<name>hive.exec.scratchdir</name>
<value>/tmp/mydir</value>
<description>Scratch space for Hive jobs</description>
</property>
- 第4种,hivemetastore-site.xml, hiveserver2-site.xml 配置文件
<property>
<name>hive.exec.scratchdir</name>
<value>/tmp/mydir</value>
<description>Scratch space for Hive jobs</description>
</property>
当同时出现多种配置方式时,则按以下优先级生效(越往后,优先级越高):
hive-site.xml -> hivemetastore-site.xml -> hiveserver2-site.xml -> '--hiveconf' 命令行参数
在 $HIVE_HOME/conf 里面还有一个默认的配置文件 hive-default.xml.template ,这里存储了默认的参数,通过复制该默认配置模板,并命名为hive-site.xml,用于配置新的参数
cp $HIVE_HOME/conf/hive-default.xml.template $HIVE_HOME/conf/hive-site.xml
在配置hive-site.xml之前,要先做一些准备工作
首先,在HDFS上新建文件夹
a、临时文件夹,默认map-reduce临时的中转路径是hdfs上的/tmp/hive-<username>,因此,如果hdfs上没有/tmp临时文件夹,则新建并授权
hadoop fs -mkdir /tmp
hadoop fs -chmod g+w /tmp
b、创建hive数据仓库目录,默认是存放在hdfs上的/user/hive/warehouse目录,新建并授权
hadoop fs -mkdir /user/hive
hadoop fs -mkdir /user/hive/warehouse
hadoop fs -chmod g+w /user/hive
hadoop fs -chmod g+w /user/hive/warehouse
其次,安装mysql用于存储hive的元数据
hive 默认使用Derby作为Hive metastore的存储数据库,这个数据库更多用于单元测试,只支持一个用户访问,在生产环境,建议改成功能更强大的关系型数据库,根据官网的介绍,支持用于存储hive元数据的数据库如下:
hive元数据支持的数据库 | 最低版本要求 |
---|---|
MySQL | 5.6.17 |
Postgres | 9.1.13 |
Oracle | 11g |
MS SQL Server | 2008 R2 |
由于元数据的数据量都比较小,一般都以安装mysql来存储元数据。下面将介绍mysql的安装配置
a、到MySQL官网打开MySQL 社区版下载页面,然后下载以下的MySQL rpm安装包
- 下载 mysql-community-server-5.7.18-1.el6.x86_64.rpm
- 下载 mysql-community-client-5.7.18-1.el6.x86_64.rpm
- 下载 mysql-community-devel-5.7.18-1.el6.x86_64.rpm
- 下载 mysql-community-common-5.7.18-1.el6.x86_64.rpm
- 下载 mysql-community-libs-5.7.18-1.el6.x86_64.rpm
- 下载 mysql-community-libs-compat-5.7.18-1.el6.x86_64.rpm
b、MySQL官网有介绍MySQL rpm包的安装方法,一般需要安装 mysql-community-server, mysql-community-client, mysql-community-libs, mysql-community-common, and mysql-community-libs-compat 这些包。在MySQL服务端至少安装 mysql-community-{server,client,common,libs}-* 软件 包,在MySQL客户端至少安装 mysql-community-{client,common,libs}-* 软件包
在安装之前,先查看一下,系统之前是否有安装过mysql相关的包,如果有,则卸载掉,输入指令查询
rpm -qa|grep mysql
在本实验中,由于在docker里面的centos6安装,由于是centos6精简环境,还需要安装一些相应的依赖包,如下
yum install -y perl libaio numactl.x86_64
接下来,按顺序安装mysql 的 rpm包,由于这几个rpm包有依赖关系,因此,安装时按以下顺序逐个安装
rpm -ivh mysql-community-common-5.7.18-1.el6.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.18-1.el6.x86_64.rpm
rpm -ivh mysql-community-libs-compat-5.7.18-1.el6.x86_64.rpm
rpm -ivh mysql-community-client-5.7.18-1.el6.x86_64.rpm
rpm -ivh mysql-community-devel-5.7.18-1.el6.x86_64.rpm
rpm -ivh mysql-community-server-5.7.18-1.el6.x86_64.rpm
c、全部安装完成后,则使用 service mysqld start 启动mysql服务,首次启动时,mysql 数据库还会进行初始化,并生成root的初始密码
[root@31d48048cb1e ahadoop]# service mysqld start
Initializing MySQL database: [ OK ]
Installing validate password plugin: [ OK ]
Starting mysqld: [ OK ]
d、在日志里面获取root初始密码,使用以下命令
[root@31d48048cb1e ahadoop]# grep 'temporary password' /var/log/mysqld.log
2017-06-23T04:04:40.322567Z 1 [Note] A temporary password is generated for root@localhost: g1hK=pYBo(x9
其中,最后的 g1hK=pYBo(x9 就是初始密码(随机产生的,每次安装不一样的哦)
使用初始密码,登录mysql并修改root密码为 Test.123
mysql -u root -p
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'Test.123';
【注意】MySQL 默认会开启强密码验证(MySQL's validate_password plugin is installed by default),要求密码长度至少8个字符,包含至少1个大写、1个小写、1个数字、1个特殊字符。
e、修改数据库的字符集,查看默认的字符集
mysql> SHOW VARIABLES like 'character%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
可以看出,database、server的字符集为latin1,如果后面在建数据库、数据表时,没有指定utf8,输入中文会变成乱码。MySQL 官网有介绍了更改字符集的方法,修改 mysql 的配置文件
vi /etc/my.cnf
# 在 [mysqld] 下面加上这个配置
[mysqld]
character-set-server=utf8
# 如果 client 默认不是 utf8,要改成 utf8 则在 [client] 中加上这个配置
[client]
default-character-set=utf8
更改好配置文件后,保存退出,重启 mysql
service mysqld restart
再查看数据库的字符集,已变成utf8,如下
mysql> SHOW VARIABLES like '