千家信息网

Hive On Spark

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,  自从公司使用大数据产品之后,就很少碰开源的东西了,集群出问题也是跟研发沟通,前些天有朋友问我,怎么能把hive底层的引擎换成spark,我想了想,是不是将hive的数据库共享给spark然后用sp
千家信息网最后更新 2026年11月01日Hive On Spark

  自从公司使用大数据产品之后,就很少碰开源的东西了,集群出问题也是跟研发沟通,前些天有朋友问我,怎么能把hive底层的引擎换成spark,我想了想,是不是将hive的数据库共享给spark然后用spark-shell不就好了,后来查了查资料,原来不是这样的,这里面的操作还挺多了。哎,真的是,用了别人产品,开发是方便了,原理懂的就少了,小编一直还沉浸在用一条SQL底层就能转换的spark程序并行执行任务的幸福生活中。乘着周末,一个人享受着公司的WiFi和空调,把这个开源的hive引擎换成spark搞一搞,顺便分享给大家,最重要的是死肥宅到技术宅的转变。
  由于资金有限,只能使用虚拟机给大家演示,这里小编把自己的搭建的hadoop的平台环境介绍一下,先带大家回顾一下hadoopHA模式下,有哪些进程需要启动:(hadoop是2.7.x版本的)
  →Namenode:(active-standby):HDFS的主节点,用于元数据管理和管理从节点
  → Datanode:HDFS的从节点,用于存储数据
  → ResourceMananger:yarn的主节点,用于资源调度
  → Nodemanager:yarn的从节点,用于具体的执行任务
  → Zookeeper:服务协调(进程名QuorumPeerMain)
  → JournalNode:用于主备namenode的元数据的共享
  → DFSZKFailoverController:监控着namenode的生死,时刻准备主备切换。
  大概就这么多吧,一个极为普通的hadoop平台,小编这里用了3台虚拟机:

每个节点上的服务:
hadoop01:

hadoop02:

hadoop03:

  抱怨服务分配不均匀的小伙伴,停下你们的键盘,小编只是演示,匆匆忙忙的搭建的。

1. 测试hive是否正常运行:

这里我在三台机器上都分发了hive的安装包:
执行命令启动hive:(怎么快怎么来,不用beeline了)

[hadoop@hadoop01 applications]$ hive


运行几个命令试试:

hive> use test;  #进入数据库hive> show tables;  #查看有哪些表hive> create external table `user`(id string,name string) row format delimited fields terminated by ',' location "/zy/test/user";  #建表#导入数据[hadoop@hadoop01 ~]$ for i in `seq 100` ;do echo "10$i,zy$i">> user.txt ;done  ;[hadoop@hadoop01 ~]$ hadoop fs -put user.txt /zy/test/userhive> select * from `user`; 

OK,hive是没有问题的!

2. hive引擎换成spark

(1) 版本确认

首先查看一下hive和spark版本的兼容:

这里小编的spark是2.0.0,hive是2.3.2。
Spark下载地址:https://archive.apache.org/dist/spark/spark-2.0.0/
Hive的下载地址:http://hive.apache.org/downloads.html
这里有spark需要去hive模块编译,这里小编将编译好的spark提供给大家:
链接:https://pan.baidu.com/s/1tPu2a34JZgcjKAtJcAh-pQ 提取码:kqvs
至于hive嘛,官网的就可以

(2) 修改配置文件
#hive配置(hive-site.xml:            javax.jdo.option.ConnectionURL        jdbc:mysql://hadoop03:3306/hivedb?createDatabaseIfNotExist=true        JDBC connect string for a JDBC metastore                        javax.jdo.option.ConnectionDriverName        com.mysql.jdbc.Driver        Driver class name for a JDBC metastore                javax.jdo.option.ConnectionUserName        root        username to use against metastore database                javax.jdo.option.ConnectionPassword        123456        password to use against metastore database                    hive.metastore.warehouse.dir        /user/hive/warehouse                    hive.execution.engine        spark                hive.enable.spark.execution.engine        true                    spark.home        /applications/spark-2.0.0-bin-hadoop2-without-hive                    spark.master        yarn                spark.eventLog.enabled        true                spark.eventLog.dir        hdfs://zy-hadoop:8020/spark-log        必须要有这个目录                spark.executor.memory        512m                spark.driver.memory        512m                spark.serializer        org.apache.spark.serializer.KryoSerializer                    spark.yarn.jars        hdfs://zy-hadoop:8020/spark-jars/*                hive.spark.client.server.connect.timeout        300000                    spark.yarn.queue        default                spark.app.name        zyInceptor    这里需要注意的一点是,hadoop是HA模式,所以hdfs的路径应该写为:hdfs://cluster_name:8020/path
#spark的配置(spark-env.sh)#!/usr/bin/env bashexport JAVA_HOME=/applications/jdk1.8.0_73export SCALA_HOME=/applications/scala-2.11.8export HADOOP_HOME=/applications/hadoop-2.8.4export HADOOP_CONF_DIR=/applications/hadoop-2.8.4/etc/hadoopexport HADOOP_YARN_CONF_DIR=/applications/hadoop-2.8.4/etc/hadoopexport SPARK_HOME=/applications/spark-2.0.0-bin-hadoop2-without-hiveexport SPARK_WORKER_MEMORY=512mexport SPARK_EXECUTOR_MEMORY=512mexport SPARK_DRIVER_MEMORY=512mexport SPARK_DIST_CLASSPATH=$(/applications/hadoop-2.8.4/bin/hadoop classpath)
(3) jar的配置

① 在hive lib找到以下jar包拷贝到spark jars目录下:
hive-beeline-2.3.3.jar
hive-cli-2.3.3.jar
hive-exec-2.3.3.jar
hive-jdbc-2.3.3.jar
hive-metastore-2.3.3.jar

[hadoop@hadoop01 lib]$ cp hive-beeline-2.3.2.jar hive-cli-2.3.2.jar hive-exec-2.3.2.jar hive-jdbc-2.3.2.jar hive-metastore-2.3.2.jar  /applications/spark-2.0.0-bin-hadoop2.7/jars/

② 在spark jars中找到以下jar包拷贝到hive lib目录下:
spark-network-common_2.11-2.0.0.jar
spark-core_2.11-2.0.0.jar
scala-library-2.11.8.jar
chill-java,
chill
jackson-module-paranamer,
jackson-module-scala,
jersey-container-servlet-core
jersey-server,
json4s-ast ,
kryo-shaded,
minlog,
scala-xml,
spark-launcher
spark-network-shuffle,
spark-unsafe ,
xbean-asm5-shaded

[hadoop@hadoop01 jars]$ cp spark-network-common_2.11-2.0.0.jar spark-core_2.11-2.0.0.jar scala-library-2.11.8.jar chill-java-0.8.0.jar chill_2.11-0.8.0.jar jackson-module-paranamer-2.6.5.jar jackson-module-scala_2.11-2.6.5.jar jersey-container-servlet-core-2.22.2.jar jersey-server-2.22.2.jar json4s-ast_2.11-3.2.11.jar kryo-shaded-3.0.3.jar minlog-1.3.0.jar scala-xml_2.11-1.0.2.jar spark-launcher_2.11-2.0.0.jar spark-network-shuffle_2.11-2.0.0.jar spark-unsafe_2.11-2.0.0.jar xbean-asm5-shaded-4.4.jar /applications/hive-2.3.2-bin/lib/

③ 配置文件的分发
将hadoop中的yarn-site.xml、hdfs-site.xml 放入spark的conf中
将hive-site.xml也放入spark的conf中

④ 分发jar包
在hive-site.xml配置了:spark.yarn.jars
这里我们先在hdfs中创建这个目录:

[hadoop@hadoop01 conf]$ hadoop fs -mkdir /spark-jars

将spark的jars中的所有jar包放入这个目录中:

[hadoop@hadoop01 jars]$ hadoop -put ./jars/*.jar /spark-jars

⑤ 启动spark

[hadoop@hadoop01 jars]$ /applications/spark-2.0.0-bin-hadoop2-without-hive/sbin/start-all.sh

此时这个节点中会出现这几个进程:

(4) 完成以上步骤之后:

测试,在hive中运行一个SQL:
测试,在hive中运行一个SQL:
这里一般使用select count(1) from table; 来检测!
Spark界面会出现:

Yarn的界面会有:

出现以上界面,表示hive on spark安装成功!!

4. 遇到的问题:(版本不兼容)


原因:spark中不能含有hive的依赖,去掉-Phive进行编译spark。
解决:编译spark
下面是hive官网给出的教程:

#Prior to Spark 2.0.0:(他说的是优先在spark2.0.0上,其实就是spark1.6版本的编译)./make-distribution.sh --name "hadoop2-without-hive" --tgz "-Pyarn,hadoop-provided,hadoop-2.4,parquet-provided"#Since Spark 2.0.0:./dev/make-distribution.sh --name "hadoop2-without-hive" --tgz "-Pyarn,hadoop-provided,hadoop-2.7,parquet-provided" #Since Spark 2.3.0: ./dev/make-distribution.sh --name "hadoop2-without-hive" --tgz "-Pyarn,hadoop-provided,hadoop-2.7,parquet-provided,orc-provided"

编译成功之后,在执行前面的内容即可。
这里小编也有编译好之后的spark:
链接:https://pan.baidu.com/s/1tPu2a34JZgcjKAtJcAh-pQ 提取码:kqvs

数据 节点 编译 配置 版本 目录 运行 引擎 界面 进程 问题 服务 测试 成功 产品 任务 公司 命令 地址 平台 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技公司起名 互联网扶贫科技 互联网与科技金融数据 互联网 科技创新 凡科互联网科技 远拓互联网科技 上海致骋互联网科技 科技互联网公司logo 联恩商钥互联网科技有限公司 互联网公司会议桌创意科技软装饰 中化能源互联网科技招聘 宜昌元轩互联网科技有限公司 河南住房之家互联网科技 互联网金融科技元年 美国互联网科技公司 珠海东科互联网科技有限公司 安徽零酒互联网科技有限公司 互联网的科技体现在哪里 10位科技互联网大佬 东风日产互联网科技公司叫什么 哈尔滨大商圈互联网科技有限公司 美国互联网保险保险科技 新华互联网科技校企合作 山东吉时兔互联网科技有限公司 湖南洣水互联网科技有限公司扣款 重庆互联网医院沙龙医盟信息科技 互联网金融科技元年 广州富喜互联网络科技 吉林省码上互联网科技电话 上海旺乐尼互联网科技有限公司
0