Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 在纱线簇上使用带管道的addFile_Scala_Apache Spark_Yarn - Fatal编程技术网

Scala 在纱线簇上使用带管道的addFile

Scala 在纱线簇上使用带管道的addFile,scala,apache-spark,yarn,Scala,Apache Spark,Yarn,我已经成功地将pyspark用于我的纱线簇。我正在做的工作 这样做需要使用RDD的pipe命令通过二进制文件发送数据 我已经做好了准备。我可以像这样在pyspark中轻松地做到这一点(假设“sc”是 已定义): 但是,如果我在Scala中执行相同的操作,管道命令会得到一个'Cannot' 运行程序“dumb_prog”:错误=2,没有这样的文件或目录错误。这是 Scala shell中的代码: sc.addFile("./dumb_prog") val t = sc.parallelize(0

我已经成功地将pyspark用于我的纱线簇。我正在做的工作 这样做需要使用RDD的pipe命令通过二进制文件发送数据 我已经做好了准备。我可以像这样在pyspark中轻松地做到这一点(假设“sc”是 已定义):

但是,如果我在Scala中执行相同的操作,管道命令会得到一个'Cannot' 运行程序“dumb_prog”:错误=2,没有这样的文件或目录错误。这是 Scala shell中的代码:

sc.addFile("./dumb_prog")
val t = sc.parallelize(0 until 10)
val u = t.pipe("dumb_prog")
u.take(10)
为什么这只适用于Python而不适用于Scala?我有办法吗 让它在Scala工作

下面是来自scala端的完整错误消息:

[59/3965]
14/09/29 13:07:47 INFO SparkContext: Starting job: take at <console>:17
14/09/29 13:07:47 INFO DAGScheduler: Got job 3 (take at <console>:17) with 1
output partitions (allowLocal=true)
14/09/29 13:07:47 INFO DAGScheduler: Final stage: Stage 3(take at
<console>:17)
14/09/29 13:07:47 INFO DAGScheduler: Parents of final stage: List()
14/09/29 13:07:47 INFO DAGScheduler: Missing parents: List()
14/09/29 13:07:47 INFO DAGScheduler: Submitting Stage 3 (PipedRDD[3] at pipe
at <console>:14), which has no missing parents
14/09/29 13:07:47 INFO MemoryStore: ensureFreeSpace(2136) called with
curMem=7453, maxMem=278302556
14/09/29 13:07:47 INFO MemoryStore: Block broadcast_3 stored as values in
memory (estimated size 2.1 KB, free 265.4 MB)
14/09/29 13:07:47 INFO MemoryStore: ensureFreeSpace(1389) called with
curMem=9589, maxMem=278302556
14/09/29 13:07:47 INFO MemoryStore: Block broadcast_3_piece0 stored as bytes
in memory (estimated size 1389.0 B, free 265.4 MB)
14/09/29 13:07:47 INFO BlockManagerInfo: Added broadcast_3_piece0 in memory
on 10.10.0.20:37574 (size: 1389.0 B, free: 265.4 MB)
14/09/29 13:07:47 INFO BlockManagerMaster: Updated info of block
broadcast_3_piece0
14/09/29 13:07:47 INFO DAGScheduler: Submitting 1 missing tasks from Stage 3
(PipedRDD[3] at pipe at <console>:14)
14/09/29 13:07:47 INFO YarnClientClusterScheduler: Adding task set 3.0 with
1 tasks
14/09/29 13:07:47 INFO TaskSetManager: Starting task 0.0 in stage 3.0 (TID
6, SERVERNAME, PROCESS_LOCAL, 1201 bytes)
14/09/29 13:07:47 INFO BlockManagerInfo: Added broadcast_3_piece0 in memory
on SERVERNAME:57118 (size: 1389.0 B, free: 530.3 MB)
14/09/29 13:07:47 WARN TaskSetManager: Lost task 0.0 in stage 3.0 (TID 6,
SERVERNAME): java.io.IOException: Cannot run program "dumb_prog": error=2,
No such file or directory
    java.lang.ProcessBuilder.start(ProcessBuilder.java:1041)
    org.apache.spark.rdd.PipedRDD.compute(PipedRDD.scala:119)
    org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:262)
    org.apache.spark.rdd.RDD.iterator(RDD.scala:229)
    org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:62)
    org.apache.spark.scheduler.Task.run(Task.scala:54)
[59/3965]
14/09/29 13:07:47信息SparkContext:开始工作:17点开始
14/09/29 13:07:47信息调度程序:与1一起获得作业3(在:17接受)
输出分区(allowLocal=true)
14/09/29 13:07:47信息调度:最后阶段:第三阶段
:17)
14/09/29 13:07:47信息:最后阶段的家长:列表()
14/09/29 13:07:47信息调度程序:失踪家长:列表()
14/09/29 13:07:47信息调度程序:提交第3阶段(PipedRDD[3]位于管道
在:14),没有失踪的父母
14/09/29 13:07:47信息存储器存储:EnsureRefreeSpace(2136)已通过
curMem=7453,maxMem=278302556
14/09/29 13:07:47信息存储器存储:块广播_3作为值存储在
内存(估计大小为2.1 KB,可用空间为265.4 MB)
14/09/29 13:07:47信息存储器存储:EnsureRefreeSpace(1389)已通过
curMem=9589,maxMem=278302556
14/09/29 13:07:47信息存储器存储:块广播\u 3\u片段0存储为字节
内存中(估计大小1389.0 B,可用容量265.4 MB)
14/09/29 13:07:47信息块管理信息:在内存中添加了广播片段0
10.10.0.20:37574(大小:1389.0 B,空闲:265.4 MB)
14/09/29 13:07:47信息块管理员:更新块的信息
广播(3)(0)
14/09/29 13:07:47信息调度程序:提交阶段3中缺少的1个任务
(管道处的管道直径[3]:14)
14/09/29 13:07:47信息YarnClientClusterScheduler:使用添加任务集3.0
1任务
14/09/29 13:07:47信息任务经理:在第3.0阶段(TID)启动任务0.0
6,服务器名,进程(本地,1201字节)
14/09/29 13:07:47信息块管理信息:在内存中添加了广播片段0
服务器名:57118(大小:1389.0 B,可用空间:530.3 MB)
14/09/29 13:07:47警告TaskSetManager:第3.0阶段(TID 6,
SERVERNAME):java.io.IOException:无法运行程序“dumb_prog”:错误=2,
没有这样的文件或目录
start(ProcessBuilder.java:1041)
org.apache.spark.rdd.PipedRDD.compute(PipedRDD.scala:119)
org.apache.spark.rdd.rdd.computeOrReadCheckpoint(rdd.scala:262)
迭代器(rdd.scala:229)
org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:62)
org.apache.spark.scheduler.Task.run(Task.scala:54)

我在spark 1.3.0的客户机模式下遇到了类似的问题。当我查看应用缓存目录时,即使使用
--files
,文件也不会被推送到执行器。但当我添加以下内容时,它确实推送到了每个执行人身上:

sc.addFile("dumb_prog",true)
t.pipe("./dumb_prog")
我认为这是一个bug,但上面的内容让我克服了这个问题。

sc.add(“hdfs:///file “hdfs中的脚本路径”不起作用。是否尝试使用spark 2.2
sc.addFile("dumb_prog",true)
t.pipe("./dumb_prog")