如何向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的絕對路徑.


分享到:


相關文章: