搭建Hive On Spark 编译Hive源码错误解决方法(spark2.1.0,hadoop2.7.2)

15 篇文章 2 订阅

Hive On Spark 的搭建需要自行编译Spark 源码  without Hive 然后部署。

编译成功之后部署Spark集群,此处不描述如何部署集群了。

然后本人自行从Hive官网下载Hive2.1.1安装包进行安装,之后启动运行Hive发现出现Class不兼容异常,经过Google得知版本冲突,导致自行编译Hive源码。


本人第一次是在archive.apache.org官方下载hive源码进行编译得到如下错误:(由于Spark升级到2.x版本,移除了JavaSparkListener类)

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project spark-client: Compilation failure: Compilation failure:

[ERROR] /home/daxin/installData/source/apache-hive-2.1.1-src/spark-client/src/main/java/org/apache/hive/spark/client/RemoteDriver.java:[46,24] cannot find symbol
[ERROR] symbol:   class JavaSparkListener
[ERROR] location: package org.apache.spark
[ERROR] /home/daxin/installData/source/apache-hive-2.1.1-src/spark-client/src/main/java/org/apache/hive/spark/client/RemoteDriver.java:[444,40] cannot find symbol
[ERROR] symbol:   class JavaSparkListener
[ERROR] location: class org.apache.hive.spark.client.RemoteDriver
[ERROR] /home/daxin/installData/source/apache-hive-2.1.1-src/spark-client/src/main/java/org/apache/hive/spark/client/RemoteDriver.java:[46,24] cannot find symbol
[ERROR] symbol:   class JavaSparkListener
[ERROR] location: package org.apache.spark
[ERROR] /home/daxin/installData/source/apache-hive-2.1.1-src/spark-client/src/main/java/org/apache/hive/spark/client/RemoteDriver.java:[444,40] cannot find symbol
[ERROR] symbol:   class JavaSparkListener
[ERROR] location: class org.apache.hive.spark.client.RemoteDriver
[ERROR] /home/daxin/installData/source/apache-hive-2.1.1-src/spark-client/src/main/java/org/apache/hive/spark/client/metrics/ShuffleReadMetrics.java:[63,38] cannot find symbol
[ERROR] symbol:   method get()
[ERROR] location: class org.apache.spark.executor.ShuffleReadMetrics
[ERROR] /home/daxin/installData/source/apache-hive-2.1.1-src/spark-client/src/main/java/org/apache/hive/spark/client/metrics/ShuffleReadMetrics.java:[64,35] cannot find symbol
[ERROR] symbol:   method get()
[ERROR] location: class org.apache.spark.executor.ShuffleReadMetrics
[ERROR] /home/daxin/installData/source/apache-hive-2.1.1-src/spark-client/src/main/java/org/apache/hive/spark/client/metrics/ShuffleReadMetrics.java:[65,35] cannot find symbol
[ERROR] symbol:   method get()
[ERROR] location: class org.apache.spark.executor.ShuffleReadMetrics
[ERROR] /home/daxin/installData/source/apache-hive-2.1.1-src/spark-client/src/main/java/org/apache/hive/spark/client/metrics/ShuffleReadMetrics.java:[66,35] cannot find symbol
[ERROR] symbol:   method get()
[ERROR] location: class org.apache.spark.executor.ShuffleReadMetrics
[ERROR] /home/daxin/installData/source/apache-hive-2.1.1-src/spark-client/src/main/java/org/apache/hive/spark/client/metrics/ShuffleWriteMetrics.java:[50,39] cannot find symbol
[ERROR] symbol:   method get()
[ERROR] location: class org.apache.spark.executor.ShuffleWriteMetrics
[ERROR] /home/daxin/installData/source/apache-hive-2.1.1-src/spark-client/src/main/java/org/apache/hive/spark/client/metrics/ShuffleWriteMetrics.java:[51,36] cannot find symbol
[ERROR] symbol:   method get()
[ERROR] location: class org.apache.spark.executor.ShuffleWriteMetrics
[ERROR] /home/daxin/installData/source/apache-hive-2.1.1-src/spark-client/src/main/java/org/apache/hive/spark/client/metrics/Metrics.java:[102,34] cannot find symbol
[ERROR] symbol:   method isDefined()
[ERROR] location: class org.apache.spark.executor.InputMetrics
[ERROR] /home/daxin/installData/source/apache-hive-2.1.1-src/spark-client/src/main/java/org/apache/hive/spark/client/metrics/Metrics.java:[106,40] cannot find symbol
[ERROR] symbol:   method isDefined()
[ERROR] location: class org.apache.spark.executor.ShuffleReadMetrics
[ERROR] /home/daxin/installData/source/apache-hive-2.1.1-src/spark-client/src/main/java/org/apache/hive/spark/client/metrics/Metrics.java:[110,41] cannot find symbol
[ERROR] symbol:   method isDefined()
[ERROR] location: class org.apache.spark.executor.ShuffleWriteMetrics
[ERROR] /home/daxin/installData/source/apache-hive-2.1.1-src/spark-client/src/main/java/org/apache/hive/spark/client/metrics/InputMetrics.java:[48,55] cannot find symbol
[ERROR] symbol:   method get()
[ERROR] location: class org.apache.spark.executor.InputMetrics
[ERROR] /home/daxin/installData/source/apache-hive-2.1.1-src/spark-client/src/main/java/org/apache/hive/spark/client/metrics/InputMetrics.java:[49,29] cannot find symbol
[ERROR] symbol:   method get()
[ERROR] location: class org.apache.spark.executor.InputMetrics
[ERROR] /home/daxin/installData/source/apache-hive-2.1.1-src/spark-client/src/main/java/org/apache/hive/spark/client/RemoteDriver.java:[158,14] method addSparkListener in class org.apache.spark.SparkContext cannot be applied to given types;
[ERROR] required: org.apache.spark.scheduler.SparkListenerInterface
[ERROR] found: org.apache.hive.spark.client.RemoteDriver.ClientListener
[ERROR] reason: actual argument org.apache.hive.spark.client.RemoteDriver.ClientListener cannot be converted to org.apache.spark.scheduler.SparkListenerInterface by method invocation conversion
[ERROR] /home/daxin/installData/source/apache-hive-2.1.1-src/spark-client/src/main/java/org/apache/hive/spark/client/RemoteDriver.java:[448,5] method does not override or implement a method from a supertype
[ERROR] /home/daxin/installData/source/apache-hive-2.1.1-src/spark-client/src/main/java/org/apache/hive/spark/client/RemoteDriver.java:[457,5] method does not override or implement a method from a supertype
[ERROR] /home/daxin/installData/source/apache-hive-2.1.1-src/spark-client/src/main/java/org/apache/hive/spark/client/RemoteDriver.java:[475,5] method does not override or implement a method from a supertype
[ERROR] -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException
[ERROR] 
[ERROR] After correcting the problems, you can resume the build with the command

[ERROR]   mvn <goals> -rf :spark-client



由于Spark升级导致接口和类的不兼容,后来去Hive的github上去查看Hive源码发现,Github上已经更新此错误,最后在Github上clone一份代码进行本地编译。

具体编译过程查看Hive官方文档即可,官方文档如下:

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

  $ git clone https://git-wip-us.apache.org/repos/asf/hive.git
  $ cd hive
  $ mvn clean package -Pdist
  $ cd packaging/target/apache-hive-{version}-SNAPSHOT-bin/apache-hive-{version}-SNAPSHOT-bin
  $ ls
  LICENSE
  NOTICE
  README.txt
  RELEASE_NOTES.txt
  bin/ (all the shell scripts)
  lib/ (required jar files)
  conf/ (configuration files)
  examples/ (sample input and query files)
  hcatalog / (hcatalog installation)
  scripts / (upgrade scripts for hive-metastore)
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


最后输出目录:

packaging/target/apache-hive-{version}-SNAPSHOT-bin/apache-hive-{version}-SNAPSHOT-bin

例如我的输出目录:
/home/daxin/installData/source/hive-2.1.1/packaging/target/apache-hive-2.2.0-SNAPSHOT-bin/apache-hive-2.2.0-SNAPSHOT-bin

备注:编译过程中测试遇到问题,可以直接跳过maven测试:

mvn clean package -Pdist -Dmaven.test.skip=true



如果想指定Spark、Hadoop版本的话,在父目录的pom.xml修改依赖版本即可。,修改JDK,Scala版本同理。



经验:以后下载源码还是去github上下载为好,那里代码更新快,少走弯路。



-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要在Linux上搭建Hive on Spark环境,需要以下步骤: 1. 安装Hadoop和Spark 首先需要安装Hadoop和Spark,可以选择Hadoop 2.8.0和Spark 1.6.3版本。安装过程可以参考官方文档。 2. 安装Hive 安装Hive需要下载Hive 2.1.1版本,并解压到指定目录。然后需要配置Hive的环境变量,将Hive的bin目录添加到PATH中。 3. 配置Hive on SparkHive的conf目录下,需要创建hive-site.xml文件,并添加以下配置: ``` <property> <name>hive.execution.engine</name> <value>spark</value> </property> <property> <name>spark.master</name> <value>local[*]</value> </property> <property> <name>spark.submit.deployMode</name> <value>client</value> </property> <property> <name>spark.executor.memory</name> <value>1g</value> </property> ``` 其中,hive.execution.engine配置为sparkspark.master配置为local[*],表示使用本地模式运行Sparkspark.submit.deployMode配置为client,表示以客户端模式提交Spark任务。spark.executor.memory配置为1g,表示每个executor的内存为1GB。 4. 启动SparkHive 启动SparkHive需要分别执行以下命令: ``` $SPARK_HOME/sbin/start-all.sh $HIVE_HOME/bin/hive ``` 其中,$SPARK_HOME和$HIVE_HOME分别为SparkHive的安装目录。 5. 测试Hive on SparkHive命令行中,可以执行以下命令测试Hive on Spark: ``` hive> set hive.execution.engine=spark; hive> select count(*) from table_name; ``` 其中,table_name为需要查询的表名。如果查询结果正确,则说明Hive on Spark环境搭建成功。 ### 回答2: Hadoop是一个开源的分布式文件系统和计算框架,在大数据领域中应用广泛,而Hive则是基于Hadoop的数据仓库系统,通过将数据存储在Hadoop中,并使用类SQL的语言查询和分析数据。但是,Hive的执行速度很慢,而Spark是速度很快的内存计算框架,能够比Hadoop更快地处理大数据。因此,用户可以使用Hive on Spark来加速Hive查询。 要在Linux上搭建Hive on Spark环境, 需要按照以下步骤进行操作: 1. 下载并安装Hadoop:在官方网站上下载Hadoop的最新版本,然后解压和配置。 2. 下载并安装Spark:在官方网站上下载Spark的最新版本,然后解压和配置。 3. 下载并安装Hive:在官方网站上下载Hive的最新版本,然后解压和配置。 4. 配置环境变量:在.bashrc或.bash_profile中添加Hadoop和Spark的路径,并运行source命令使其生效。 5. 启动Hadoop集群:运行start-all.sh脚本启动Hadoop集群,可以通过jps命令检查集群是否正常运行。 6. 启动Spark:运行spark-shell来启动Spark,可以通过测试程序检查Spark是否正常运行。 7. 启动Hive:运行hive命令来启动Hive,可以通过测试程序测试Hive是否正常运行。 8. 配置Hive on Spark:在hive-site.xml文件中添加以下变量来配置Hive on Sparkhive.execution.engine=spark hive.spark.client.server.connect.timeout=600 hive.spark.client.connect.timeout=600 9. 验证Hive on Spark:运行一些查询来验证Hive on Spark是否正常运行,并通过Spark网页界面查看运行情况。 总之,搭建Hive on Spark环境需要仔细地完成操作,按照步骤进行操作,将会帮助你更快更有效地处理大数据。 ### 回答3: 首先,在准备搭建 Hive on Spark 环境之前,我们需要确保已经安装了 Java JDK 、Hadoop 和 Spark 环境。在此基础上,按照以下步骤完成 Hive on Spark搭建: 1. 下载HiveApache Hive 的官网上可以下载到需要的版本,我们这里选择 hive-2.1.1 版本,下载后解压。 2. 配置Hadoop环境变量 在 ~/.bashrc 中添加如下内容: export HADOOP_HOME=/your/path/to/hadoop export PATH=$PATH:$HADOOP_HOME/bin 保存文件,并使用 source ~/.bashrc 命令来使环境变量立即生效。 3. 配置Hive环境变量 在 ~/.bashrc 中添加如下内容: export HIVE_HOME=/your/path/to/hive export PATH=$PATH:$HIVE_HOME/bin 保存文件,并使用 source ~/.bashrc 命令来使环境变量立即生效。 4. 配置Spark环境变量 在 ~/.bashrc 中添加如下内容: export SPARK_HOME=/your/path/to/spark export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin 保存文件,并使用 source ~/.bashrc 命令来使环境变量立即生效。 5. 配置Hivehive-site.xml文件 将 $HIVE_HOME/conf 目录下的 hive-default.xml.template 文件复制一份并命名为 hive-site.xml,然后根据需要进行修改。在 hive-site.xml 中添加以下内容: ``` <property> <name>spark.master</name> <value>spark://<SPARK_MASTER_HOST>:<SPARK_MASTER_PORT></value> <description>URL of the Spark Master</description> </property> <property> <name>spark.submit.deployMode</name> <value>client</value> <description>Whether to run Spark in client or cluster mode</description> </property> <property> <name>hive.execution.engine</name> <value>spark</value> <description>Execution engine</description> </property> <property> <name>hive.spark.client.connect.timeout</name> <value>300s</value> </property> ``` 注意,其中的 <SPARK_MASTER_HOST> 和 <SPARK_MASTER_PORT> 分别应该替换为实际使用的 Spark Master 的地址和端口。 6. 配置Sparkspark-defaults.conf文件 将 $SPARK_HOME/conf 目录下的 spark-defaults.conf.template 文件复制一份并命名为 spark-defaults.conf,然后根据需要进行修改。在 spark-defaults.conf 中添加以下内容: ``` spark.executor.memory 4g spark.driver.memory 2g spark.sql.shuffle.partitions 200 ``` 根据需要调整默认的内存大小(如果已经分配过多可能会导致OOM),设置适当的partition数(避免执行时的数据倾斜问题)。 7. 启动Hive服务 执行启动Hive的命令: ``` hive --service metastore & hive ``` 需要注意的是,需要先启动 metastore 服务,然后才能启动 Hive 客户端。 8. 准备测试数据 接下来,为了测试 Hive on Spark 的功能,可以使用 Hive 提供的测试数据集来进行测试。 将 https://github.com/facebookarchive/facebook-360-spatial-workstation.git 克隆到本地,进入 samples 文件夹,执行以下命令来生成哈希表: ``` beeline -n hadoop -d org.apache.hive.jdbc.HiveDriver \ -jdbc:hive2://localhost:10000 \ -e "CREATE TABLE h3 (id int, lat double, lon double, geog string) \ ROW FORMAT DELIMITED \ FIELDS TERMINATED BY ',' \ LINES TERMINATED BY '\n' \ STORED AS TEXTFILE;" cd h3/ /data/gdal/gdal-2.2.0/bin/ogr2ogr -f CSV GEOM{FID}H3v11.csv geohash-cells.geojson -lco COMPRESS=DEFLATE beeline -n hadoop -d org.apache.hive.jdbc.HiveDriver \ -jdbc:hive2://localhost:10000 \ -e "LOAD DATA LOCAL INPATH '/h3/GEOMFIDH3v11.csv' INTO TABLE h3;" ``` 在以上命令中,我们使用了 beeline 来连接到 Hive 服务器,并使用 ogr2ogr 工具读取 geojson 文件并转存为 CSV 文件后导入到 Hive 中。 9. 执行Spark SQL查询 接下来可以使用 Spark SQL 来查询 Hive 中的数据。 运行 Spark Shell: ``` $SPARK_HOME/bin/spark-shell --master spark://<SPARK_MASTER_HOST>:<SPARK_MASTER_PORT> \ --jars $HIVE_HOME/lib/hive-exec-<HIVE_VERSION>.jar,$HIVE_HOME/lib/hive-metastore-<HIVE_VERSION>.jar ``` 如果以上命令运行正常,将会进入 Spark Shell 中。 在 Shell 中运行如下代码: ``` import org.apache.spark.sql._ val hiveContext = new org.apache.spark.sql.hive.HiveContext(sc) hiveContext.setConf("hive.metastore.uris","thrift://<IP_ADDRESS>:9083") hiveContext.sql("use default") hiveContext.sql("show databases").foreach(println) hiveContext.sql("select count(*) from h3").foreach(println) ``` 其中,<IP_ADDRESS> 应该替换为实际使用的 Thrift 服务器的 IP 地址。 10. 结束Spark SQL查询 完成测试后,可以使用以下命令退出 Spark Shell: ``` scala> :q ``` 至此,Hive on Spark 环境已经搭建完成。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值