如何向Spark个节点共享静态文件和jar包

Spark中提供了函数addFile和addJar函数这个函数怎么使用呢,接下来我们就来看一下,以addFile。有时候我们需要在程序中加载一个静态文件,并且要通过特殊的工具类解析里面的内容。就需要用到addFile,相当于把文件拉到executor本地进行解析。

addFile方法可以接收本地文件(或者HDFS上的文件),甚至是文件夹(如果是文件夹,必须是HDFS路径),然后Spark的Driver和Exector可以通过SparkFiles.get()方法来获取文件的绝对路径(Get the absolute path of a file added through SparkContext.addFile()),addFile的函数原型如下:

def addFile(path: String): Unit

def addFile(path: String, recursive: Boolean): Unit

addFile把添加的本地文件传送给所有的Worker,这样能够保证在每个Worker上正确访问到文件。另外,Worker会把文件放在临时目录下。因此,比较适合用于文件比较小,计算比较复杂的场景。如果文件比较大,网络传送的消耗时间也会增长。

Spark中addFile加载配置文件

val qqwry = "hdfs://dcnameservice/mcloud/data/datacenter/aws/mediastat/tools/qqwry.dat"//分发文件sc.addFile(qqwry)

获取分发文件绝对路径:

SparkFiles.get("qqwry.dat");

我们在使用Spark的时候有时候需要将一些数据分发到计算节点中。一种方法是将这些文件上传到HDFS上,然后计算节点从HDFS上获取这些数据。当然我们也可以使用addFile函数来分发这些文件。注意,如果是spark程序通过yarn集群上加载配置文件,path必须是集群hdfs的绝对路径.


分享到:


相關文章: