请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

无法使用Spark来访问Hive

package com.imooc.bigdata.chapter06

import java.util.Properties

import org.apache.spark.sql.SparkSession


object HiveSourceApp {

  def main(args: Array[String]): Unit = {


    // 如果你想使用Spark来访问Hive的时候,一定需要开启Hive的支持
    val spark: SparkSession = SparkSession.builder().master("local").appName("HiveSourceApp")
      .enableHiveSupport() //切记:一定要开启
      .getOrCreate()


    // 走的就是连接 default数据库中的pk表,如果你是其他数据库的,那么也采用类似的写法即可
    spark.table("default.pk").show()


    spark.stop()

  }
}

报的是这个错误:
Exception in thread “main” org.apache.spark.sql.AnalysisException: java.lang.RuntimeException: java.lang.RuntimeException: The root scratch dir: /tmp/hive on HDFS should be writable. Current permissions are: rw-rw-rw-;
at org.apache.spark.sql.hive.HiveExternalCatalog.withClient(HiveExternalCatalog.scala:106)
at org.apache.spark.sql.hive.HiveExternalCatalog.databaseExists(HiveExternalCatalog.scala:214)
at org.apache.spark.sql.internal.SharedState.externalCataloglzycompute(SharedState.scala:114)atorg.apache.spark.sql.internal.SharedState.externalCatalog(SharedState.scala:102)atorg.apache.spark.sql.internal.SharedState.globalTempViewManagerlzycompute(SharedState.scala:114) at org.apache.spark.sql.internal.SharedState.externalCatalog(SharedState.scala:102) at org.apache.spark.sql.internal.SharedState.globalTempViewManagerlzycompute(SharedState.scala:114)atorg.apache.spark.sql.internal.SharedState.externalCatalog(SharedState.scala:102)atorg.apache.spark.sql.internal.SharedState.globalTempViewManagerlzycompute(SharedState.scala:141)
at org.apache.spark.sql.internal.SharedState.globalTempViewManager(SharedState.scala:136)
at org.apache.spark.sql.hive.HiveSessionStateBuilderKaTeX parse error: $ within math modeanonfun$2.apply(HiveSessionStateBuilder.scala:55)
at

看老师视频上直接连上去了,就能输出PK表里面的数据,我这个报的超时错误,说HDFS上应该需要写权限,我就把HDFS中的tmp目录赋777的权限
图片描述
然后还是连不上去,我就去百度搜了搜,把windows上的也改成777了,结果还是连不上去,请老师指导,老师辛苦

正在回答 回答被采纳积分+3

2回答

Michael_PK 2019-09-26 19:48:28

win本地不建议使用支持hive的,我上课写完打包到服务器运行的。win要做很多特殊配置,非常麻烦

1 回复 有任何疑惑可以回复我~
Michael_PK 2019-09-26 19:49:15

/tmp/hive这个HDFS目录,以及子目录手工通过命令改下,都具有执行权限

0 回复 有任何疑惑可以回复我~
  • 老师,我这里也遇到了这个问题,不过我idea里用的是我mac系统的用户名,而hdfs上的用户名是hadoop,请问这里有什么办法可以指定访问时以什么用户访问吗?
    Exception in thread "main" org.apache.hadoop.security.AccessControlException: Permission denied: user=stevecai, access=WRITE, inode="/user/hive/warehouse":hadoop:supergroup:drwxr-xr-x
    回复 有任何疑惑可以回复我~ 2022-06-23 11:51:58
  • 可以通过mock用户的方式传递进去,比如你的mac是你的用户名,但是hdfs是hadoop,那么就通过System.setProperty("HADOOP_USER_NAME", "hadoop")这样就可以了
    
    这些操作都是大数据最基础的操作,在Hadoop课程里面都有讲解
    回复 有任何疑惑可以回复我~ 2022-06-23 23:19:42
  • 了解了,前面的有点忘。。谢谢~
    回复 有任何疑惑可以回复我~ 2022-06-24 20:37:44
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信