简介
之前有写过hive on spark的一个文档,hive版本为2.0,spark版本为1.5。spark升级到2.0后,性能有所提升,程序文件的编排也和之前不一样,这里再更新一个最新的部署方式。
spark2.0引入了spark session的概念,创建一个spark任务和之前也不一样,之前版本的hive并不能兼容spark2.0,所以推荐使用hive2.3以后的版本。
安装步骤可参考官网https://cwiki.apache.org/confluence/display/Hive/Hive+on+Spark%3A+Getting+Started
1.集群环境
hive要安装hadoop的集群节点上,hadoop集群自行安装,yarn和hdfs都要启动。
节点 组件 启动程序
node1 hadoop hive spark resourcemanager,namenode,hive
node2 hadoop datanode,nodemanager
node3 hadoop datanode,nodemanager
根据下面的步骤将hive和spark放在同一个节点上就可以
2.安装环境
下载hive2.3 bin文件
下载spark2.1源代码并编译
下载scala2.10
3.spark编译
从github上下载spark2.1源代码https://github.com/apache/spark/releases
说一下为什么重新编译spark,spark里面是包含spark-sql的,spark-sql是使用修改过的hive和spark相结合的组件,因为spark-sql里面的hive和我们用的hive2.3版本冲突,所以这里用源代码重新编译,去掉里面的spark-sql里面的hive,编译过后的spark是不能使用spark-sql功能的。
编译需要spark需要maven3.3+,scala2.10+,jdk1.7+
进入spark源代码根目录执行下面程序进行编译
./dev/make-distribution.sh --name "hadoop2-without-hive" --tgz "-Pyarn,hadoop-provided,hadoop-2.7,parquet-provided"
1
编译完成后会在根目录生成spark-2.1.1-bin-hadoop2-without-hive.tgz。
cp ./spark-2.1.1-bin-hadoop2-without-hive.tgz /opt
tar xzvf spark-2.1.1-bin-hadoop2-without-hive.tgz
#创建软连接
ln -s spark-2.1.1-bin-hadoop2-without-hive spark
1
2
3
4
配置spark
cd /opt/spark/conf
cp spark-env.sh.template spark-env.sh
vi spark-env.sh
##在文件中计入下面的代码并保存
export SPARK_DIST_CLASSPATH=$(/opt/hadoop/bin/hadoop classpath)
1
2
3
4
5
配置上面参数的作用是hive启动spark任务的时候也会把hadoop的classpath加进来
4.hive安装
4.1 在官网下载好hive后,解压
mv apache-hive-2.3.0-bin.tar.gz /opt
tar xzvf apache-hive-2.3.0-bin.tar.gz
#创建软连接
ln -s apache-hive-2.3.0-bin hive
1
2
3
4
4.2 加入必要jar
cp /opt/spark/jars/scala-library-2.11.8.jar /opt/hive/lib
cp /opt/spark/jars/spark-network-common_2.11-2.1.1.jar /opt/hive/lib
cp /opt/spark/jars/spark-core_2.11-2.1.1.jar /opt/hive/lib
#下载并加入mysql的jdbc
cp xx/mysql-connector-java-5.1.38.jar /opt/hive/lib
1
2
3
4
5
4.3 配置hive
vi hive-site.xml
<!--jdbc -->
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://192.168.1.82:3306/hive2?createDatabaseIfNotExist=true&useUnicode=true&characterEncoding=UTF-8</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123456</value>
<description>password to use against metastore database</description>
</property>
<!--spark engine -->
<property>
<name>hive.execution.engine</name>
<value>spark</value>
</property>
<property>
<name>hive.enable.spark.execution.engine</name>
<value>true</value>
</property>
<!--sparkcontext -->
<property>
<name>spark.master</name>
<value>yarn-cluster</value>
</property>
<property>
<name>spark.serializer</name>
<value>org.apache.spark.serializer.KryoSerializer</value>
</property>
<!--下面的根据实际情况配置 -->
<property>
<name>spark.executor.instances</name>
<value>3</value>
</property>
<property>
<name>spark.executor.cores</name>
<value>4</value>
</property>
<property>
<name>spark.executor.memory</name>
<value>10240m</value>
</property>
<property>
<name>spark.driver.cores</name>
<value>2</value>
</property>
<property>
<name>spark.driver.memory</name>
<value>4096m</value>
</property>
<property>
<name>spark.yarn.queue</name>
<value>default</value>
</property>
<property>
<name>spark.app.name</name>
<value>myInceptor</value>
</property>
<!--事务相关 -->
<property>
<name>hive.support.concurrency</name>
<value>true</value>
</property>
<property>
<name>hive.enforce.bucketing</name>
<value>true</value>
</property>
<property>
<name>hive.exec.dynamic.partition.mode</name>
<value>nonstrict</value>
</property>
<property>
<name>hive.txn.manager</name>
<value>org.apache.hadoop.hive.ql.lockmgr.DbTxnManager</value>
</property>
<property>
<name>hive.compactor.initiator.on</name>
<value>true</value>
</property>
<property>
<name>hive.compactor.worker.threads</name>
<value>1</value>
</property>
<property>
<name>spark.executor.extraJavaOptions</name>
<value>-XX:+PrintGCDetails -Dkey=value -Dnumbers="one two three"
</value>
</property>
<!--其它 -->
<property>
<name>hive.server2.enable.doAs</name>
<value>false</value>
</property>
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
4.4 hive-env.sh
根据实际情况修改hive的jvm参数,防止内存溢出
export HADOOP_OPTS="$HADOOP_OPTS -XX:NewRatio=12 -Xms1024m -Xms10m -XX:MaxPermSize=256m -XX:MaxHeapFreeRatio=40 -XX:MinHeapFreeRatio=15 -XX:-UseGCOverheadLimit"
export HADOOP_HEAPSIZE=4096
1
2
4.5 初始化数据库
/opt/hive/bin/schematool -initSchema -dbType mysql
###当出现下面的信息表示初始化成功
Starting metastore schema initialization to 2.0.0
Initialization script hive-schema-2.0.0.mysql.sql
Initialization script completed
schemaTool completed
###这时候你就可以去你的mysql数据库中查看metastore的信息
1
2
3
4
5
6
7
5.配置环境变量
vi /etc/profile
##加入下面配置信息
export SCALA_HOME=/opt/scala/
export PATH=$SCALA_HOME/bin:$PATH
export HIVE_HOME=/opt/hive
export PATH=$PATH:$HIVE_HOME/bin:$PATH
export SPARK_HOME=/opt/spark
##保存退出
source /etc/profile
1
2
3
4
5
6
7
8
9
10
11
12
6.启动hive
/opt/hive/bin/hive --service hiveserver2
1
用beeline连接hive
beeline -u jdbc:hive2://localhost:10000
Connecting to jdbc:hive2://localhost:10000
Connected to: Apache Hive (version 2.3.0)
Driver: Hive JDBC (version 2.3.0)
Transaction isolation: TRANSACTION_REPEATABLE_READ
Beeline version 2.3.0 by Apache Hive
##连接成功后,创建表并插入数据
0: jdbc:hive2://localhost:10000> create table test (f1 string,f2 string) stored as orc;
No rows affected (2.018 seconds)
0: jdbc:hive2://localhost:10000> insert into test values(1,2);
No rows affected (9.908 seconds)
0: jdbc:hive2://localhost:10000>
1
2
3
4
5
6
7
8
9
10
11
12
13
执行上面的代码创建一个orc表,并插入数据,这时会启动spark来执行任务,可以在yarn页面看到启动的spark任务
yarn页面
这里写图片描述
spark执行的hivesql
这里写图片描述
spark的executor
这里写图片描述
---------------------
作者:敲码的汉子
来源:CSDN
原文:https://blog.csdn.net/Dante_003/article/details/72867493?utm_source=copy
版权声明:本文为博主原创文章,转载请附上博文链接!