spark学习笔记:集群模式下的addFile()操作(存疑)

来源:互联网 发布:golang for sleep 编辑:程序博客网 时间:2024/06/05 07:31

前言

Add a file to be downloaded with this Spark job on every node.Path can be either a local file, a file in HDFS (or other Hadoop-supported filesystems), or an HTTP, HTTPS or FTP URI. To access the file in Spark jobs, use SparkFiles.get(fileName) to find its download location.


scala

在scala源码文件夹下新建scala对象,代码如下:

package sparkdemoimport org.apache.spark.SparkContextimport org.apache.spark.SparkConfimport org.apache.spark.SparkFilesobject addFileDemo {  def main(args: Array[String]): Unit = {        val conf=new SparkConf();    conf.setMaster("spark://master:7077");    conf.setAppName("spark_test");    val sc=new SparkContext(conf);    sc.addFile("/home/daya/test.txt");    var rdd=sc.textFile(SparkFiles.get("test.txt"));    rdd.foreach(println);  }}

因为集群模式下的各从机没有程序执行所需要的依赖包,所以右键项目使用maven打包:

将eclipse项目文件夹下的/target/sparkDemo-1.0-SNAPSHOT.jar提交到集群上运行:

spark-submit --class sparkdemo.addFileDemo --master spark://master:7077 sparkDemo-1.0-SNAPSHOT.jar

执行时报错:File file:/tmp/spark-34036848-e44c-46c3-962b-289832e83331/userFiles-4a903147-b4c2-46f5-8561-d92d3f4be7e6/test.txt does not exist


查看日志

在spark的web页面查看某一节点的stderr日志:

发现有这么两行:

17/08/25 01:59:04 INFO Utils: Fetching spark://192.168.200.100:36893/files/test.txt to /tmp/spark-b166b539-4279-419a-b8fc-7cecee60b7da/executor-2363a3f5-de00-4c2a-9f7e-6ed012905a9c/spark-31a8caa5-442a-4120-ab74-5685b5b7c04f/fetchFileTemp6483074797707216066.tmp17/08/25 01:59:04 INFO Utils: Copying /tmp/spark-b166b539-4279-419a-b8fc-7cecee60b7da/executor-2363a3f5-de00-4c2a-9f7e-6ed012905a9c/spark-31a8caa5-442a-4120-ab74-5685b5b7c04f/-257922111503651539934_cache to /usr/DevProgram/spark-2.2.0-bin-hadoop2.7/work/app-20170825015858-0004/0/./test.txt

远程登录到slave1从机,进入log记载的目录,发现确实有test.txt文件存在,而且内容与master主机一致 :

这说明从机确实从主机上下载到了目标文件。

在日志信息中搜索错误的相关信息“spark-34036848”,发现只有两条记录:

注意到slave1从机与主机对应文件夹名并不一致,所以这才是导致报错的原因。

主机的文件夹名:spark-34036848-e44c-46c3-962b-289832e83331,但是各从机上并没有生成这一文件夹,也没有把目标文件复制到这一目录下,所以当然会提示文件不存在。
这个错误暂时不知道如何解决。


Java

Java示例使用网络文件http://community.apache.org/newbiefaq.html。
在java源码文件夹下新建java类,代码如下:

package daya.sparkdemo;import org.apache.spark.SparkConf;import org.apache.spark.SparkFiles;import org.apache.spark.api.java.JavaSparkContext;public class addFileDemo {    public static void main( String[] args )    {        SparkConf conf =new SparkConf();        conf.setMaster("local[4]");        conf.setAppName("sparkdemo");        JavaSparkContext jsc=new JavaSparkContext(conf);        jsc.addFile("http://community.apache.org/newbiefaq.html");        jsc.textFile(SparkFiles.get("newbiefaq.html")).count();        jsc.close();    }}

同样使用maven编译打包,然后执行:

spark-submit --class daya.sparkdemo.addFileDemo --master spark://master:7077 sparkdemo-0.0.1-SNAPSHOT.jar 

采用网络文件时没有报错,但是却不知道文件分发到哪去了,/tmp与/usr/DevProgram/spark-2.2.0-bin-hadoop2.7/work下面都没有找到html文件。

原创粉丝点击