2016-02-03 22 views
1

我有一個Spark作業,它從HDFS讀取數百萬條記錄,處理它們,並以AVRO格式回寫到HDFS。觀察到許多文件(寫入)保持在.avro.tmp狀態。文件在Spark作業中保持.avro.tmp狀態?

我使用Kite SDK以AVRO格式寫入數據。環境是CDH 5.5。

難道是因爲星火工作,只要它與閱讀記錄,並將其發送給執行者完成終止(這實際上不寫?)

如果是這樣的話,我該如何確保作業直到所有.tmp轉換成.avro纔會終止?

還有什麼可能的原因?

謝謝,任何幫助/指針,將不勝感激。

回答

0

在迭代遍歷所有記錄之後,我在call()方法本身中關閉了writer後得到了它的工作。這裏的主要缺點是對於每個分區我都會得到一個新的作者,需要找到一個更好的方法。

 df.toJavaRDD().foreachPartition(new VoidFunction<Iterator<Row>>() { 

     @Override 
     public void call(Iterator<Row> iterator) throws Exception { 

      final DatasetWriter writer = // obtain writer 

      while (iterator.hasNext()) { 
       // process the records; write to HDFS using writer 
      } 

      writer.close(); // this ensures that .avro.tmp is converted to .avro 
     } 
    });