我是靠谱客的博主 幽默唇彩,最近开发中收集的这篇文章主要介绍spark mysql hive_sparkSql和hive的整合(spark on hive),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、在Spark的安装包下的conf下创建一个文件 hive-site.xml,不需要更新到其他的节点,只需要在客户端有一份hive-site.xml就可以

javax.jdo.option.ConnectionURL

jdbc:mysql://node1:3306/hive?createDatabaseIfNotExist=true

javax.jdo.option.ConnectionDriverName

com.mysql.jdbc.Driver

javax.jdo.option.ConnectionUserName

root

javax.jdo.option.ConnectionPassword

123456

二、开启Hive的metaStore服务

hive --service metastore & #后台启动

三、启动spark-shell时指定mysql连接驱动位置

/usr/local/spark/bin/spark-shell

--master spark://node1:7077

--executor-memory 512m

--total-executor-cores 1

--driver-class-path /usr/local/hive/lib/mysql-connector-java-5.1.32-bin.jar

四、

import org.apache.spark.sql.hive.HiveContext

val hc = new HiveContext(sc)

hc.sql("show databases").show

五、整合可能遇到的问题

1、问题一:

Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient

解决方法:

需要格式化mysql元数据库:

schematool -dbType mysql -initSchema

2、问题二:

java.sql.SQLException: Column name pattern can not be NULL or empty

解决方法:

将 $HIVE_HOME/lib 下 的 mysql-connector-java-6.0.3.jar 替换成 mysql-connector-java-5.1.39.jar。

原因分析:mysql-connector-java 6.x 版本 和 5.1.x 版本不兼容 , nullNamePatternMatchesAll 连接属性的默认值在 mysql-connector-java 5.1 和 6.0 之间发生了改变. 在 5.1 版本中默认值是 true, 而 6.0 版本中默认值是 false。

3、问题三:

2019-07-06T10:01:53,737 ERROR [370c0a81-c922-4c61-8315-264c39b372c3 main] metastore.RetryingHMSHandler: MetaException(message:Hive Schema version 3.1.0 does not match metastore's schema version 1.2.0 Metastore is not upgraded or corrupt)

at org.apache.hadoop.hive.metastore.ObjectStore.checkSchema(ObjectStore.java:9063)

at org.apache.hadoop.hive.metastore.ObjectStore.verifySchema(ObjectStore.java:9027)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

这是因为在创建SQLContext实例的时候,要求spark编译的Hive版本和HiveMetaStore里面记录的Hive版本一致

3.1、解决方法一

我们可以通过$HIVE_CONF/confi/hive-site.xml 配置hive.metastore.schema.verification参数来取消这种验证,这个参数的默认值是true,我们可以取消验证,设置为false

hive.metastore.schema.verification

false

3.2、解决方法2

直接修改存储hive元数据的VERSION表

SELECT * FROM VERSION;

UPDATE VERSION SET SCHEMA_VERSION='3.1.0' WHERE VER_ID = 1;

83b2f9cb3d33

image.png

最后

以上就是幽默唇彩为你收集整理的spark mysql hive_sparkSql和hive的整合(spark on hive)的全部内容,希望文章能够帮你解决spark mysql hive_sparkSql和hive的整合(spark on hive)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(50)

评论列表共有 0 条评论

立即
投稿
返回
顶部