Hive on Spark 就是把 Hive 默认的执行引擎从 MapReduce 换成 Apache Spark。
Hive on Spark 只在 Spark 的制定版本上进行了测试,其它版本则不是很有保证。对稳定性有要求可以去官方文档查看版本兼容性,再根据 Hive 和 Spark 源码中 pom 文件的配置,另行选择版本。这里几乎全部选择最新版进行演示。
环境及一些信息
- VMWare 15,参考之前的搭建博文
- Ubuntu 18.04 bionic
- 8G 内存
- Docker 18.09.0
- IP: 192.168.99.100,后面看到这个地址出现就自行翻译成你们运行环境的ip
- 全程 root 用户操作(手动滑稽)
准备
- 安装Docker,拉取 MySQL 8 镜像(不使用 Docker 的后面自行安装 MySQL)
- 下载安装包
Spark 二进制包可以在这里获取,但是我们要自己编译不内建 Hive 的版本,所以要下载源码编译
1
2git clone -b v2.3.3 https://github.com/apache/spark.git
rm -rf spark/.git创建 /home/tools 文件夹,将解压后的安装包和源码都放这里,解压后的
mysql-connector-java-8.0.16.jar
放到/home/tools/hive/lib
1
2
3
4
5
6
7
8
9
10home
| -- tools
| -- hadoop
| -- hive
| -- lib
| -- mysql-connector-java-8.0.16.jar
| -- java
| -- maven
| -- scala
| -- spark-source
安装
Java、Maven 和 Scala 安装
编辑
/etc/profile
,加入环境变量1
2
3
4export JAVA_HOME=/home/tools/java
export M2_HOME=/home/tools/maven
export SCALA_HOME=/home/tools/scala
export PATH=${M2_HOME}/bin:${SCALA_HOME}/bin:${JAVA_HOME}/bin:$PATH在终端运行以下指令,若显示出 jdk、Scala 和 Maven 版本,则安装已完成
1
2
3
4source /etc/profile
java -version
scala -version
mvn -v(可选)网络不好的孩纸可自行配置 Maven 的仓库为阿里云的镜像
Hadoop 安装
安装需要的软件
1
apt install -y ssh pdsh rsync
修改配置
etc/hadoop/core-site.xml
:1
2
3
4
5
6
7
8
9
10<configuration>
<property>
name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/tmp/data</value>
</property>
</configuration>etc/hadoop/hdfs-site.xml
:1
2
3
4
5
6<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>etc/hadoop/mapred-site.xml
:1
2
3
4
5
6<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>etc/hadoop/yarn-site.xml
:1
2
3
4
5
6<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>sbin/start-dfs.sh
、sbin/stop-dfs.sh
头部配置使用 root 账户:1
2
3
4
5#!/usr/bin/env bash
HDFS_DATANODE_USER=root
HDFS_DATANODE_SECURE_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=rootsbin/start-yarn.sh
、sbin/stop-yarn.sh
头部配置使用 root 账户:1
2
3
4#!/usr/bin/env bash
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=rootetc/hadoop/hadoop-env.sh
中添加:1
2export PDSH_RCMD_TYPE=ssh
export JAVA_HOME=/home/tools/java
配置 SSH 密钥登录
1
2
3ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 0600 ~/.ssh/authorized_keys修改 SSH 配置文件
/etc/ssh/sshd_config
,加入:1
2PermitRootLogin yes
PubkeyAuthentication yes重启 SSH 服务:
1
service ssh restart
运行
ssh localhost
测试,看是否直接登录到本机格式化文件系统
1
bin/hdfs namenode -format
运行 HDFS,运行成功后可访问 http://192.168.99.100:9870 查看 NameNode 的 Web 管理界面
1
sbin/start-dfs.sh
运行 yarn,运行成功后可访问 http://192.168.99.100:8088 查看 ResourceManager 的 Web 管理界面
1
sbin/start-yarn.sh
Spark 安装
编译不带 Hive 的版本
1
2
3
4
5cd /home/tools/spark-source
./dev/make-distribution.sh --name "hadoop3-without-hive" --tgz "-Pyarn,-Phadoop-3.1,-Dhadoop.version=3.1.2,parquet-provided,orc-provided"
cd ..
mkdir spark
tar -xf spark-source/spark-2.3.3-bin-hadoop3-without-hive.tgz --strip-components 1 -C spark新建配置文件
/home/tools/spark/conf/spark-env.sh
:1
2
3
4
export JAVA_HOME=/home/tools/java
export HADOOP_CONF_DIR=/home/tools/hadoop/etc/hadoop
export SPARK_DIST_CLASSPATH=$(/home/tools/hadoop/bin/hadoop classpath)
Hive 安装
复制 Jar 包到 Hive 的
lib
文件夹,其中某些包的小版本号可能会不一样1
2
3
4
5
6
7
8
9
10
11
12
13
14cd /home/tools/hive
cp ../scala/lib/scala-library.jar lib/
cp ../spark/jars/spark-core_2.11-2.3.3.jar lib/
cp ../spark/jars/spark-network-common_2.11-2.3.3.jar lib/
cp ../spark/jars/jersey-container-servlet-core-2.22.2.jar lib/
cp ../spark/jars/jersey-server-2.22.2.jar lib/
cp ../spark/jars/json4s-ast_2.11-3.2.11.jar lib/
cp ../spark/jars/kryo-shaded-3.0.3.jar lib/
cp ../spark/jars/minlog-1.3.0.jar lib/
cp ../spark/jars/scala-xml_2.11-1.0.5.jar lib/
cp ../spark/jars/spark-launcher_2.11-2.3.3.jar lib/
cp ../spark/jars/spark-network-shuffle_2.11-2.3.3.jar lib/
cp ../spark/jars/spark-unsafe_2.11-2.3.3.jar lib/
cp ../spark/jars/xbean-asm5-shaded-4.4.jar lib/修改配置
conf/hive-site.yml
: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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost:21109/metastore?createDatabaseIfNotExist=true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.cj.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123123</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<name>hive.execution.engine</name>
<value>spark</value>
</property>
<property>
<name>hive.enable.spark.execution.engine</name>
<value>true</value>
</property>
<property>
<name>spark.yarn.jars</name>
<value>hdfs://localhost:9000/spark-jars/*</value>
</property>
<property>
<name>spark.master</name>
<value>spark://localhost.localdomain:7077</value>
</property>
<property>
<name>spark.eventLog.enabled</name>
<value>true</value>
</property>
<property>
<name>spark.eventLog.dir</name>
<value>file:///home/tools/hive/logs</value> #
</property>
<property>
<name>spark.serializer</name>
<value>org.apache.spark.serializer.KryoSerializer</value>
</property>
</configuration>创建运行数据库实例的
docker-compose.yml
:1
2
3
4
5
6
7
8
9
10version: "2.4"
services:
mysql:
restart: always
image: mysql:8
container_name: mysql4hive
ports:
- 21109:3306
environment:
MYSQL_ROOT_PASSWORD: 123123在
docker-compose.yml
所在目录运行:1
docker-compose up -d
初始化数据库,提示 schemaTool completed 则为成功,连接数据库实例,能看到
metastore
数据库和相关的表1
/home/tools/hive/bin/schematool -initSchema -dbType mysql
修改
/etc/profile
配置环境变量1
2
3
4export HIVE_HOME=/home/tools/hive
export SPARK_HOME=/home/tools/spark
export HADOOP_HOME=/home/tools/hadoop
export PATH=$HIVE_HOME/bin:$PATH添加文件用来插入假数据
test_data.txt
:1
21 Bryant
2 Jordan
运行
Spark
1 | /home/tools/spark/sbin/start-all.sh |
Hive
1 | root@localhost: /home/tools/hive/bin/beeline -u jdbc:hive2:// |
打完收工 ヾ( ̄▽ ̄)Bye~Bye~