【问题标题】:Another instance of Derby may have already booted the database /home/cloudera/metastore_db另一个 Derby 实例可能已经启动了数据库 /home/cloudera/metastore_db
【发布时间】:2017-12-06 21:16:23
【问题描述】:

我正在尝试使用 Spark 将普通文本文件加载到配置单元表中。我正在使用 Spark 2.0.2 版。我在 Spark 版本中成功完成了它:1.6.0 并且我正在尝试在版本 2x 中做同样的事情 我执行了以下步骤:

    import org.apache.spark.sql.SparkSession
    val spark = SparkSession.builder().appName("SparkHiveLoad").master("local").enableHiveSupport().getOrCreate()
    import spark.implicits._

到目前为止没有问题。 但是当我尝试将文件加载到 Spark 中时:

val partfile = spark.read.textFile("hdfs://quickstart.cloudera:8020/user/cloudera/partfile")

我遇到了一个异常:

Caused by: org.apache.derby.iapi.error.StandardException: Another instance of Derby may have already booted the database /home/cloudera/metastore_db.

core-site.xml 中的默认属性:

 <property>
    <name>fs.defaultFS</name>
    <value>hdfs://quickstart.cloudera:8020</value>
  </property>

后台没有运行其他 hive 或 spark 会话。 我看到了不同的问题,但有相同的例外。所以读一遍,如果你仍然认为它是重复的,你可以标记它。

谁能告诉我如何解决它。

【问题讨论】:

  • 请提供完整的错误
  • 引起:org.apache.derby.iapi.error.StandardException:无法使用类加载器 org.apache.spark.sql.hive.client.IsolatedClientLoader$$anon$1 启动数据库“metastore_db” @6ba6ec73,有关详细信息,请参阅下一个异常。在 org.apache.derby.iapi.error.StandardException.newException(Unknown Source) at org.apache.derby.impl.jdbc.SQLExceptionFactory.wrapArgsForTransportAcrossDRDA(Unknown Source) ... 144 更多原因:org.apache.derby。 iapi.error.StandardException:另一个 Derby 实例可能已经启动了数据库 /home/cloudera/metastore_db。
  • @T.Gawęda 在两个问题中出现异常的点是不同的。但是,如果您能说出除了相同标题之外的两个问题之间的相似之处,我可以尝试解决该问题来解决我的问题

标签: scala apache-spark hive spark-dataframe


【解决方案1】:

Spark 2.0.2 spark.sparkContext.textFile 一般被用来 阅读文本文件。

Spark SQL 的 Scala 接口支持自动将包含案例类的 RDD 转换为 DataFrame。案例类定义表的模式。案例类的参数名称使用反射读取并成为列的名称。案例类也可以嵌套或包含复杂类型,例如 Seqs 或 Arrays。这个 RDD 可以隐式转换为 DataFrame,然后注册为表。表可以在后续的 SQL 语句中使用。

示例代码:

mport org.apache.spark.sql.catalyst.encoders.ExpressionEncoder
import org.apache.spark.sql.Encoder

// For implicit conversions from RDDs to DataFrames
import spark.implicits._

// Create an RDD of Person objects from a text file, convert it to a Dataframe
val peopleDF = spark.sparkContext
  .textFile("examples/src/main/resources/people.txt")
  .map(_.split(","))
  .map(attributes => Person(attributes(0), attributes(1).trim.toInt))
  .toDF()
// Register the DataFrame as a temporary view
peopleDF.createOrReplaceTempView("people")

请参考Spark Documentation 了解更多信息并查看其他选项。

【讨论】:

  • 好的。我可以使用这个 val partfile = spark.sparkContext.textFile("hdfs://quickstart:8020/user/cloudera/partfile") 获取数据但是当我输入 'val partfile = spark.read." 并给出' tab' 我得到了选项:csv、format、jdbc、json、load、option、options、orc、parquet、schema、table、text 和 textFile。所以这意味着有一个选项对吗?同样使用 spark.sparkContext,你只是有一个用于文件读取的“textFile”选项。但您没有读取“json、parquet、ORC等”文件的选项。
  • 我还没有尝试使用 spark.read.textFile。我会检查并相应更新。
  • Spark 在构建库中可以读取 json、parquet 和 ord 文件。即对于 json,您的代码将是 val df = spark.read.json("examples/src/main/resources/people.json")
  • 没错。您可以看到这些选项以及我的第一条评论中列出的“textFile”。但是在我们的项目中,我们需要处理一个'.txt'文件。
  • spark.read -> 这些格式用于读取提供架构的结构化数据。由于 textFile 不与 schema 关联,因此读取它的功能不同。
猜你喜欢
  • 2014-05-27
  • 2016-03-31
  • 2019-12-25
  • 2015-09-26
  • 1970-01-01
  • 2013-12-13
  • 2014-07-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多