基于docker快速搭建hive环境
一.docker简介
1.1 docker架构
Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。 Docker 容器通过 Docker 镜像来创建。 容器与镜像的关系类似于面向对象编程中的对象与类。
1.2 常用命令
介绍两个重要命令
Docker run :创建一个新的容器并运行一个命令
语法:docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
Docker exec : 在已经启动的容器中执行命令
语法:docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
二.基于docker搭建hadoop环境
网上有很多hadoop的docker镜像,通过镜像快速搭建hadoop集群,这样可以很方便新手测试和学习。可以参考这个网站,基于Docker搭建Hadoop集群之升级版 来搭建hadoop集群环境,非常方便简单。
2.1 下载Docker镜像
sudo docker pull kiwenlau/hadoop:1.0
2.2 下载GitHub仓库
git clone https://github.com/kiwenlau/hadoop-cluster-docker
修改start-container.sh的脚本,增加hive的web端口(9999)和服务端口(10000),同时通过-v命令将本地目录挂载到对应的容器上,部分需要修改的内容如下:
sudo docker run -itd \
--net=hadoop \
-p 50070:50070 \
-p 8088:8088 \
-p 10000:10000 \
-p 9999:9999 \
--name hadoop-master \
--hostname hadoop-master \
-v /Users/pan/code/hadoop-cluster-docker/share:/opt \
kiwenlau/hadoop:1.0 &> /dev/null
2.3 创建Hadoop网络
sudo docker network create --driver=bridge hadoop
2.4 运行Docker容器
cd hadoop-cluster-docker
./start-container.sh
运行结果:
start hadoop-master container...
start hadoop-slave1 container...
start hadoop-slave2 container...
root@hadoop-master:~#
2.5 启动hadoop
./start-hadoop.sh
Hadoop网页管理地址:
- NameNode: http://127.0.0.1:50070/
- ResourceManager: http://127.0.0.1:8088/
至此hadoop集群环境就搭建好了,并且容器也启动了,接下来就安装hive环境了。
三.hive环境安装
我们采用远程模式安装hive,也就是将Mysql数据库独立出来,将元数据保存在远端独立的Mysql服务器中。
3.1 安装Mysql
下载Mysql安装包,在本地安装mysql,并启动远程连接模式。
3.2 进入hadoop-maste服务器
docker exec -it hadoop-master /bin/bash
3.3 下载hive和mysql驱动器jar包
wget http://mirror.bit.edu.cn/apache/hive/hive-2.1.1/apache-hive-2.1.1-bin.tar.gz
tar -zxvf apache-hive-2.1.1-bin.tar.gz
wget http://central.maven.org/maven2/mysql/mysql-connector-java/5.1.38/mysql-connector-java-5.1.38.jar
将mysql-connector-java-5.1.38.jar拷贝到hive的lib目录中。
3.4 配置hive-site.xml文件
从conf目录中复制一份模板出来,并命名为hive-site.xml
root@hadoop-master:~/apache-hive-2.1.1-bin# cp conf/hive-default.xml.template conf/hive-site.xml
修改其中的一些配置项:
- mysql连接信息
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://192.168.100.105:3306/hive?createDatabaseIfNotExist=true&useSSL=true</value>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123456</value>
- 将conf/hive-site.xml中所有的system:java.io.tmpdir 和system:user.name都换成绝对路径。
3.5 hive元数据库初始化
schematool -dbtype mysql -initSchema
3.6 进入hive-cli模式中
在保证hadoop启动、mysql数据库能够正常连接,可以执行一下命令
root@hadoop-master:~/apache-hive-2.1.1-bin# ./bin/hive
执行结果如下:
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/root/apache-hive-2.1.1-bin/lib/log4j-slf4j-impl-2.4.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/usr/local/hadoop/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]
Logging initialized using configuration in jar:file:/root/apache-hive-2.1.1-bin/lib/hive-common-2.1.1.jar!/hive-log4j2.properties Async: true
Hive-on-MR is deprecated in Hive 2 and may not be available in the future versions. Consider using a different execution engine (i.e. tez, spark) or using Hive 1.X releases.
hive>