Spark独立集群 - 存储在worker中临时目录中的输出文件

时间:2015-07-06 20:43:46

标签: apache-spark cluster-computing

我是Spark新手,我有一个Spark独立集群,有2名员工 -

  • 主机和一个从机线程在一台机器上运行 - 机器1
  • 在另一台机器上运行的另一个奴隶 - 机器2

我在第二台机器上运行一个spark shell,它从hdfs读取一个文件并对它们进行一些计算并将结果存储在hdfs中。

这就是我在spark shell中读取文件的方法 -

val file = sc.textFile("hdfs://localhost:9000/user/root/table.csv")

这就是我将结果写回文件的方式 -

finalRDD.saveAsTextFile("hdfs://localhost:9000/user/root/output_file")

当我运行代码时,它在集群中运行,并且作业成功,每个工作程序处理大约一半的输入文件。我也能看到在webUI中处理的记录。

但是当我在第二台机器上检查HDFS时,我只找到输出文件的一部分。

另一部分存储在第一台机器的hdfs中。但即使该部分实际上并不存在于正确的hdfs位置,而是存储在_temporary目录

在机器2中 -

root@worker:~# hadoop fs -ls ./output_file
Found 2 items
-rw-r--r--   3 root supergroup          0 2015-07-06 16:12 output_file/_SUCCESS
-rw-r--r--   3 root supergroup     984337 2015-07-06 16:12 output_file/part-00000

在机器1 -

root@spark:~# hadoop fs -ls ./output_file/_temporary/0/task_201507061612_0003_m_000001
-rw-r--r--   3 root supergroup     971824 2015-07-06 16:12 output_file/_temporary/0/
task_201507061612_0003_m_000001/part-00001

我有几个问题 -

  1. 两个部分不应该在工人2上(因为hdfs是指的) 在saveAsTextFile中是本地hdfs)?或输出是 总是分裂在工人身上?
  2. 为什么输出存储在机器1的_temporary目录中?
  3. 非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

我也很新兴,但在我的理解中:

  1. 是的,你应该有一个包含所有结果的文件。
  2. 你所采取的输出只是暂时的结果,我应该合并到最后一个。
  3. 当作业失败时,可能会留下临时结果。可能你在日志中有一些错误吗?