并行化文件系统操作

并行化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,假,参看)}}


这篇文章有用吗?