在HDFS上写入数据需要很长时间

时间:2019-05-18 10:20:32

标签: scala

在HDFS上写入文件会创建很多零件文件(200),并且耗时很长

我正在将配置单元表(使用SqlContext.sql)加载到数据帧1(6K条记录)中,并注册到临时表中。我将临时表与另一个配置单元表(500万条记录)连接在一起,并加载到数据框2中。我正在使用左外部连接用数据框2值更新数据框1,我正尝试将dataframe_1(6K条记录)写入HDFS文件,花费1小时30分钟。我试过了 重新分区(dataframe_1.rdd.repartition(2)) 不合并写入文件(1) 只写一条记录,看看是否更快 但没有帮助。甚至dataframe_1上的show(10)记录也要花费很长时间。 我正在使用Spark解释器在Zeppelin中编写代码。我也无权访问任何配置设置。需要联系支持团队。

我是大数据平台的新手。任何帮助将不胜感激。

%spark

import org.apache.hadoop.fs._
import org.apache.hadoop.fs.FileSystem
import org.apache.hadoop.fs.Path

val fs=FileSystem.get(sc.hadoopConfiguration)
val sqlContext = new org.apache.spark.sql.hive.HiveContext(sc)
val Dataframe_1 = sqlContext.sql("""select * from  Hive_Table_1""")
Dataframe_1.registerTempTable("Dataframe_table")

val Dataframe_2 = sqlContext.sql("""SELECT * FROM 
(select B.col1,    B.col2,    A.col4,    B.col3 FROM Dataframe_table A 
left join  Hive_Table_2  B on a.col1=b.col1 and a.col2=b.col2) A """ )

val Dataframe_1 = 
Dataframe_1.join(Dataframe_2,Seq("col1","col2"),"leftouter")
.withColumn("col3", when($"col3".isNotNull,"Path Found").otherwise("Path 
Not Found"))

Dataframe_1.coalesce(1).write.format("com.databricks.spark.csv")
.option("header","true").save("/abc")

1 个答案:

答案 0 :(得分:0)

如您所说,如果您禁用了对HDFS的写入,但作业仍然很慢,则意味着对HDFS的写入不是瓶颈。可以预料到:结果的大小与第一个数据帧(6k条记录)的大小相同。无论如何,编写它应该非常快。 因此,很可能您的问题来自加入。是的,巨大的表连接可能要花费数小时。

为了验证这种情况,我通常将from django.core.exceptions import ObjectDoesNotExist from django.http import Http404 from django.shortcuts import redirect class BookUpdateView(UpdateView): """Update the requested book.""" model = Book form_class = BookForm # ... def get(self, *args, **kwargs): try: self.object = self.get_object() except (ObjectDoesNotExist, Http404): return redirect('books:index') return self.render_to_response(self.get_context_data())替换为.write以隔离io操作。但这可能不适用于您的情况,因为spark sql api可能会优化.count

此外,您还应将.count替换为coalsece,因为前者消除了并行性。