繁体   English   中英

无法从spark插入到hive分区表中

[英]unable to insert into hive partitioned table from spark

我在 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
  }

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

您的流作业正在将新分区写入 table_location。 但是 Hive Metastore 并不知道这一点。

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

你需要运行 -

ALTER TABLE <TABLE_NAME> RECOVER PARTITIONS

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

msck repair table tablename

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM