並行化文件係統操作

並行化Apache Hadoop文件係統操作與DBUtils FileUtil火花;模仿DistCp。

寫的sandeep.chandran

去年發表在:2022年8月4日

當你需要加快複製和移動業務,它們並行通常是一個不錯的選擇。您可以使用Apache引發對執行人並行化操作。你可以使用磚DBUtilsAPI,這些API調用意味著用於驅動節點,和不應該用於火花工作執行人上運行。

在本文中,我們將向您展示如何使用Apache HadoopFileUtil功能連同DBUtils並行化火花複製操作。

您可以使用這個例子作為其他文件係統操作的基礎。

請注意

複製操作的例子看起來熟悉我們使用DBUtils和Hadoop FileUtil模仿Hadoop的功能DistCp工具。

進口所需的庫

導入Hadoop函數和定義源和目標的位置。

% scala org.apache.hadoop.fs進口。_ val源= " <源dir > " val dest = <目的地dir >“dbutils.fs.mkdirs(桌子)

從司機執行人廣播信息

% scala val相依= new org.apache.spark.util.SerializableConfiguration (sc.hadoopConfiguration) val broadcastConf = sc.broadcast(參看)val broadcastDest = sc.broadcast(桌子)

複製路徑序列

% scala val filesToCopy = dbutils.fs.ls(源). map (_.path)

並行化序列和劃分工作負載

這裏我們首先得到Hadoop配置和目的地的路徑。然後我們創建對象的路徑,最後執行FileUtil.copy命令。

% scala spark.sparkContext.parallelize (filesToCopy)。foreachPartition{行= >行。foreach {file = > val conf = broadcastConf.value。價值val destPathBroadcasted = broadcastDest。值val fromPath =新路徑(文件)val toPath =新路徑(destPathBroadcasted) val fromFs = fromPath.getFileSystem(參看)val toFs = toPath.getFileSystem FileUtil(配置)。複製(fromFs fromPath、toFs toPath,假,參看)}}