【问题标题】:Unable to create spark-warehouse directory using spark-2.3.0无法使用 spark-2.3.0 创建 spark-warehouse 目录
【发布时间】:2018-06-12 13:02:24
【问题描述】:

我想用 akka 和 spark 创建一个项目。我也添加了依赖项和其他一些依赖项。这些依赖是否会对使用spark产生任何影响。

我有以下 sbt 文件

    dependencyOverrides += "com.fasterxml.jackson.core" % "jackson-core" % "2.8.7"
    dependencyOverrides += "com.fasterxml.jackson.core" % "jackson-databind" % "2.8.7"
    dependencyOverrides += "com.fasterxml.jackson.module" % "jackson-module-scala_2.11" % "2.8.7"

lazy val commonSettings = Seq(
  organization := "com.bitool.analytics",
  scalaVersion := "2.11.12",
  libraryDependencies ++= Seq(
    "org.scala-lang.modules" %% "scala-async" % "0.9.6",
    "com.softwaremill.macwire" %% "macros" % "2.3.0",
    "com.softwaremill.macwire" %% "macrosakka" % "2.3.0",
    "com.typesafe.akka" %% "akka-http" % "10.0.6",
    "io.swagger" % "swagger-jaxrs" % "1.5.19",
    "com.github.swagger-akka-http" %% "swagger-akka-http" % "0.9.1",
    "io.circe" %% "circe-generic" % "0.8.0", 
    "io.circe" %% "circe-literal" % "0.8.0", 
    "io.circe" %% "circe-parser" % "0.8.0", 
    "io.circe" %% "circe-optics" % "0.8.0", 
    "org.scalafx" %% "scalafx" % "8.0.144-R12",
    "org.scalafx" %% "scalafxml-core-sfx8" % "0.4",
    "org.apache.spark" %% "spark-core" % "2.3.0",
    "org.apache.spark" %% "spark-sql" % "2.3.0",
    "org.apache.spark" %% "spark-hive" % "2.3.0",
    "org.scala-lang" % "scala-xml" % "2.11.0-M4",
    "mysql" % "mysql-connector-java" % "6.0.5"
  )
)
lazy val root = (project in file(".")).
  settings(commonSettings: _*).
  settings(
    name := "BITOOL-1.0"
  )
ivyScala := ivyScala.value map {
  _.copy(overrideScalaVersion = true)
}
fork in run := true

下面是我的火花代码

private val warehouseLocation = new File("spark-warehouse").getAbsolutePath
val conf = new SparkConf()
  conf.setMaster("local[4]")
  conf.setAppName("Bitool")
  conf.set("spark.sql.warehouse.dir", warehouseLocation)

  val SPARK = SparkSession
    .builder().config(conf).enableHiveSupport()
    .getOrCreate()
  val SPARK_CONTEXT = SPARK.sparkContext

当我尝试执行此操作时,它正在创建 metastore_db 文件夹,但未创建 spark-warehouse 文件夹。

【问题讨论】:

  • 删除conf.set("spark.sql.warehouse.dir", warehouseLocation) 后会发生什么?通常,我的目录是在项目目录中创建的,因为我在那里使用sbt run
  • 我通过删除 warehouselocation 进行了尝试。它没有创建 spark-warehouse 文件夹。
  • 删除enableHiveSupport时是否创建了目录?如果您手动创建目录会发生什么(权限问题)?我认为 hive 使用 hdfs 路径或 hive 元存储。还可以尝试在 warehouseLocation 路径之前添加 file:///
  • 当我尝试使用 enableHiveSupport 373574 [default-akka.actor.default-dispatcher-9] WARN hive.ql.metadata.Hive - 无法访问 Metastore 时出现以下错误。不应在运行时访问此类。 org.apache.hadoop.hive.ql.metadata.HiveException: java.lang.RuntimeException: 无法实例化 org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient

标签: scala apache-spark akka


【解决方案1】:

此目录不是由getOrCreate 创建的。您可以在 Spark 源代码中查看它:getOrCreate 将其操作委托给 SparkSession.getOrCreate,这只是一个 setter。所有内部测试和CliSuite 使用这样的sn-p 来提前初始化目录:val warehousePath = Utils.createTempDir()

相反,在实际的用户代码中,您必须至少执行一次数据修改操作才能实现您的仓库目录。尝试在你的代码之后运行类似的东西并再次检查硬盘上的仓库目录:

  import SPARK.implicits._
  import SPARK.sql
  sql("DROP TABLE IF EXISTS test")
  sql("CREATE TABLE IF NOT EXISTS test (key INT, value STRING) USING hive")

【讨论】:

    猜你喜欢
    • 2015-04-01
    • 2017-10-06
    • 1970-01-01
    • 1970-01-01
    • 2018-01-30
    • 1970-01-01
    • 2017-05-05
    • 2019-05-19
    • 1970-01-01
    相关资源
    最近更新 更多