首页 文章

Spark Shell侦听localhost而不是配置的IP地址

提问于
浏览
2

我试图通过spark-shell运行一个简单的spark工作,看起来像BlockManager for spark-shell侦听localhost而不是配置的IP地址导致spark工作失败 . 抛出的异常是“ Failed to connect to localhost ” .

这是我的配置:

机器1(ubunt64):Spark master [192.168.253.136]

机器2(ubuntu64server):Spark Slave [192.168.253.137]

机器3(ubuntu64server2):Spark Shell客户端[192.168.253.138]

Spark版本:spark-1.3.0-bin-hadoop2.4环境:Ubuntu 14.04

Source Code to be executed in Spark Shell:

import org.apache.spark.SparkConf
    import org.apache.spark.SparkContext

    var conf = new SparkConf().setMaster("spark://192.168.253.136:7077")
    conf.set("spark.driver.host","192.168.253.138")
    conf.set("spark.local.ip","192.168.253.138")
    sc.stop
    var sc = new SparkContext(conf)
    val textFile = sc.textFile("README.md")
    textFile.count()

如果我在运行从机的机器2上运行它,上面的代码只是工作文件,但它在机器1(主机)和机器3(Spark Shell)上失败 .

不确定为什么spark shell会侦听localhost而不是配置的IP地址 . 我在机器3上使用spark-env.sh以及.bashrc(导出SPARK_LOCAL_IP = 192.168.253.138)设置了SPARK_LOCAL_IP . 我确认spark shell java程序确实在端口44015上侦听 . 不确定为什么spark shell正在广播localhost地址 .

任何有关解决此问题的帮助都将受到高度赞赏 . 可能我错过了一些配置设置 .

日志:

scala> val textFile = sc.textFile("README.md")

15/04/22 18:15:22 INFO MemoryStore:ensureFreeSpace(163705)调用curMem = 0,maxMem = 280248975

15/04/22 18:15:22 INFO MemoryStore:阻止broadcast_0作为值存储在内存中(估计大小为159.9 KB,自由267.1 MB)

15/04/22 18:15:22 INFO MemoryStore:ensureFreeSpace(22692)调用curMem = 163705,maxMem = 280248975

15/04/22 18:15:22 INFO MemoryStore:阻止broadcast_0_piece0作为字节存储在内存中(估计大小为22.2 KB,自由267.1 MB)

15/04/22 18:15:22 INFO BlockManagerInfo:在localhost上添加了broadcast_0_piece0内存:44015(大小:22.2 KB,免费:267.2 MB)

scala> textFile.count()

15/04/22 18:16:07 INFO DAGScheduler:从第0阶段提交2个缺失的任务(在textFile上的README.md MapPartitionsRDD [1]:25)

15/04/22 18:16:07 INFO TaskSchedulerImpl:添加任务集0.0,包含2个任务

15/04/22 18:16:08 INFO TaskSetManager:在阶段0.0中启动任务0.0(TID 0,ubuntu64server,PROCESS_LOCAL,1326字节)

15/04/22 18:16:23 INFO TaskSetManager:在阶段0.0中启动任务1.0(TID 1,ubuntu64server,PROCESS_LOCAL,1326字节)

15/04/22 18:16:23 WARN TaskSetManager:阶段0.0中丢失的任务0.0(TID 0,ubuntu64server):java.io.IOException:无法连接到org.apache.spark的localhost / 127.0.0.1:44015 . net.client.TransportClientFactory.createClient(TransportClientFactory.java:191)位于org.apache.spark.network.netty.NettyBlockTransferService $$ anon的org.apache.spark.network.client.TransportClientFactory.createClient(TransportClientFactory.java:156) $ 1.createAndStart(NettyBlockTransferService.scala:78)org.apache.spark.network.shuffle.RetryingBlockFetcher.fetchAllOutstanding(RetryingBlockFetcher.java:140)at org.apache.spark.network.shuffle.RetryingBlockFetcher.access $ 200(RetryingBlockFetcher.java) :43)atg.apache.spark.network.shuffle.RetryingBlockFetcher $ 1.run(RetryingBlockFetcher.java:170)at java.util.concurrent.Executors $ RunnableAdapter.call(Executors.java:471)at java.util.concurrent .futureTask.run(FutureTask.java:262)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:11 45)at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:615)at java.lang.Thread.run(Thread.java:745)

1 回答

  • 1

    通过在shell启动时提供spark主地址(或者可以是spark-defaults.conf),找到解决此BlockManager本地主机问题的方法 .

    ./spark-shell --master spark://192.168.253.136:7077
    

    这样,我不必停止spark上下文,原始上下文能够读取文件以及从Cassandra表中读取数据 .

    以下是BlockManager监听localhost(停止和动态创建上下文)的日志,该日志因“无法连接异常”而失败

    15/04/25 07:10:27 INFO BlockManagerInfo: Added broadcast_1_piece0 in memory on localhost:40235 (size: 1966.0 B, free: 267.2 MB)
    

    与侦听实际服务器名称(如果命令行提供的spark master)相比较有效

    15/04/25 07:12:47 INFO BlockManagerInfo: Added broadcast_1_piece0 in memory on ubuntu64server2:33301 (size: 1966.0 B, free: 267.2 MB)
    

    在shell中动态创建上下文时,看起来像BlockManager代码中的错误 .

    希望这有助于某人 .

相关问题