【问题标题】:Spark dataFrame.colaesce(1) or dataFrame.reapartition(1) does not seem to workSpark dataFrame.coalesce(1) 或 dataFrame.repartition(1) 似乎不起作用
【发布时间】:2020-10-11 06:37:26
【问题描述】:

我将 Hive 插入到创建新 Hive 分区的查询中。我有两个名为 server 和 date 的 Hive 分区。现在我使用以下代码执行插入查询并尝试保存它

DataFrame dframe = hiveContext.sql("insert into summary1 partition(server='a1',date='2015-05-22') select from sourcetbl bla bla"); 
//above query creates orc file at /user/db/a1/20-05-22 
//I want only one part-00000 file at the end of above query so I tried the following and none worked 
drame.coalesce(1).write().format("orc").mode(SaveMode.OverWrite).saveAsTable("summary1"); OR

drame.repartition(1).write().format("orc").mode(SaveMode.OverWrite).saveAsTable("summary1"); OR

drame.coalesce(1).write().format("orc").save("/user/db/a1/20-05-22",SaveMode.OverWrite); OR

drame.repartition(1).write().format("orc").save("/user/db/a1/20-05-22",SaveMode.OverWrite); OR

无论我在上面的查询中使用合并还是重新分区,都会在 /user/db/a1/20-05-22 位置创建大约 20 MB 的大约 200 个小文件。在使用 Hive 时,出于性能原因,我只需要一个 part0000 文件。我在想如果我打电话给coalesce(1) 那么它会创建最后一个零件文件,但它似乎没有发生。我错了吗?

【问题讨论】:

  • 但是你得到了什么?
  • 就像我提到的那样,由于 coalesce(1),我得到了 200 个小文件,而不是预期的一个部分文件

标签: apache-spark apache-spark-sql


【解决方案1】:

重新分区管理在执行 Spark 作业时分割文件的多少,但文件的实际保存由 Hadoop 集群管理。

或者这就是我的理解。你也可以在这里看到同样的问题:http://mail-archives.us.apache.org/mod_mbox/spark-user/201501.mbox/%3CCA+2Pv=hF5SGC-SWTwTMh6zK2JeoHF1OHPb=WG94vp2GW-vL5SQ@mail.gmail.com%3E

这应该无关紧要,为什么要设置在单个文件上?如果只是为了你自己的系统,getmerge 会为你一起编译。

【讨论】:

  • 您好,我的问题在这里进行了解释stackoverflow.com/questions/25967961/…,其中提到多个小部分文件可能会使名称节点过载。我尝试过同样的事情,但看起来合并没有减少 DataFrame 的部分文件
  • 200 根本不会减慢速度。甚至没有 2000。你很好。
  • 假设我的 spark 作业每天都在运行,它会创建 10000 个文件,这些文件的大小像 20 mb 这样的小文件,这将导致 hadoop namenode 上出现不必要的负载,并且如果我在几周内 namenode 将用完 Metastore 空间spark job 每天都会创建很多小文件
  • 嗨,如果我的 spark 作业每天创建 1 万个小文件,请帮助我了解 namenode 不会耗尽内存
  • 嗨,你能帮我几个链接吗?我是 Hadoop 新手,我听说你的 Spark 工作每天创建 10k 个小文件,这对 HDFS 中的 namenode 来说太过分了
【解决方案2】:

df.coalesce(1) 在 spark 2.1.1 中为我工作,所以任何看到此页面的人都不必像我一样担心。

df.coalesce(1).write.format("parquet").save("a.parquet") 

【讨论】:

    猜你喜欢
    • 2017-11-21
    • 2018-01-10
    • 2021-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多