【问题标题】:unable to insert into hive partitioned table from spark无法从 spark 插入 hive 分区表
【发布时间】:2019-02-16 04:34:13
【问题描述】:

我在 hive 中创建了一个外部分区表。 在日志中它显示 numinputrows。这意味着查询正在工作并正在发送数据。但是当我使用直线和查询连接到蜂巢时,select * or count(*) 它总是空的。

def hiveOrcSetWriter[T](event_stream: Dataset[T])( implicit spark: SparkSession): DataStreamWriter[T] = {

    import spark.implicits._
    val hiveOrcSetWriter: DataStreamWriter[T] = event_stream
      .writeStream
      .partitionBy("year","month","day")
      .format("orc")
      .outputMode("append")
      .option("compression", "zlib")
      .option("path", _table_loc)
      .option("checkpointLocation", _table_checkpoint)

    hiveOrcSetWriter
  }

可能是什么问题?我无法理解。

【问题讨论】:

标签: apache-spark hive apache-spark-sql


【解决方案1】:
msck repair table tablename

它会检查表的位置,并在新分区退出时添加分区。

在您的 spark 过程中添加此步骤以便从 hive 进行查询。

【讨论】:

    【解决方案2】:

    您的流作业正在将新分区写入 table_location。但是 Hive 元存储并没有意识到这一点。

    当您对表运行选择查询时,Hive 会检查元存储以获取表分区列表。由于 Metastore 中的信息已经过时,因此数据不会显示在结果中。

    你需要运行 -

    ALTER TABLE <TABLE_NAME> RECOVER PARTITIONS
    

    来自 Hive/Spark 的命令以使用新分区信息更新元存储。

    【讨论】:

    • @Sam 你能检查一下答案,看看这是否适合你?
    • 是的,我检查了 ALTER TABLE 对我不起作用,但 msck repair 命令有效。
    猜你喜欢
    • 1970-01-01
    • 2015-09-13
    • 2019-10-27
    • 1970-01-01
    • 2018-01-03
    • 2020-02-10
    • 2016-06-19
    • 1970-01-01
    • 2016-04-02
    相关资源
    最近更新 更多