1.开始我就是按照网上的办法连接hive,但一直出现问题,现将我失败的场景和大家看一下,以及遇到同样的问题解决的办法,防止大家以后踩坑
2.首先如果是遇到这个问题就是hive的hive-site.xml的配置出现了问题,缺少元数据的一个配置,我最先开始是遇到的这个问题,解决办法如下
Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient;
<property>
<name>hive.metastore.uris</name>
<value>thrift://自己机器的IP:9083</value>
</property>
如果是上述的问题是hive元数据没有配置uri地址,导致连接hive找到,加上以上配置问题就可以解决
3,如果遇到下面的问题,就是pom的依赖出现了问题,首先给大家说一个点,我们配置依赖一定要配置我们需要的依赖,对于我们不要的依赖最好不要加上,要不然就会导致依赖冲突,我遇到的第2个问题就是这个问题,出现的报错就是下面标红的,而出现的问题就是我加入了hbase的依赖导致连接hive出现了问题,我看到网上有说可以把这个依赖放在最后可以解决,但如果一定要加上可以新开一个文件,单独配置一个依赖,这个只是我的方法,我这个依赖没有用上我直接删除了问题就能解决,如果大家看到这个问题一定要注意你的pom文件的依赖问题
java.lang.NoClassDefFoundError: org/apache/hadoop/tracing/SpanReceiverHost
<dependency><groupId>org.apache.hbase</groupId>
<artifactId>hbase-client</artifactId>
<version>2.4.2</version>
</dependency>4,如果前面的2个问题没有出现,后面就是连接hive的常规操作了,将hive-site.xml文件复制粘贴到resource目录下,然后就是直接写Scala代码就好了,我的代码如下
def main(args: Array[String]): Unit = {
// System.setProperty("HADOOP_USER_NAME","root");
Logger.getLogger("org.apache.spark").setLevel(Level.ERROR)
Logger.getLogger("org.eclipse.jetty.server").setLevel(Level.OFF)
//创建 SparkSession
val spark: SparkSession = SparkSession
.builder()
.enableHiveSupport()
.master("local[*]")
.appName("sql")
.getOrCreate()
spark.sql("show databases").show()
spark.close()
// spark.sql("show databases").show()
//result.printSchema()
}
如果这些操作都完成了,连接hive是肯定有的,我的操作是上面的代码,main函数的那个logger出现是为了减少spark的运行日志,方便查看结果,运行结果如下:
最后在总结一遍,对于spark连接hive,一定不能错一步,错就会导致报错,还有就是hive的hive-site.xml一定要配置元数据的uri,没有这个一定连接不上,还有就是在pom文件对于没用的依赖最好不要加上,对于hbase的依赖最好不要出现如果加上了依赖我在运行一定失败,你们的可能也会失败,其它的就是hadoop集群和hive的元数据的服务一定要开启,目前我就是这些都做好了才能成功,如果大家还遇到别的问题不是我上面的欢迎大家留言,我能解决的一定帮助解决
版权归原作者 平凡天下 所有, 如有侵权,请联系我们删除。