zeppelin 中的 Hello World 失败

Posted

技术标签:

【中文标题】zeppelin 中的 Hello World 失败【英文标题】:Hello world in zeppelin failed 【发布时间】:2015-12-20 12:56:37 【问题描述】:

我刚刚安装了 apache zeppelin(从 gi​​t repo 的最新源构建)并成功地看到它在端口 10008 中启动并运行。 我用一行代码创建了一个新的笔记本

val a = "Hello World!"

运行这一段,看到下面的错误

java.net.ConnectException:连接被拒绝 java.net.PlainSocketImpl.socketConnect(Native Method) 在 java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) 在 java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) 在 java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) 在 java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) 在 java.net.Socket.connect(Socket.java:589) 在 org.apache.thrift.transport.TSocket.open(TSocket.java:182) 在 org.apache.zeppelin.interpreter.remote.ClientFactory.create(ClientFactory.java:51) 在 org.apache.zeppelin.interpreter.remote.ClientFactory.create(ClientFactory.java:37) 在 org.apache.commons.pool2.BasePooledObjectFactory.makeObject(BasePooledObjectFactory.java:60) 在 org.apache.commons.pool2.impl.GenericObjectPool.create(GenericObjectPool.java:861) 在 org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:435) 在 org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:363) 在 org.apache.zeppelin.interpreter.remote.RemoteInterpreterProcess.getClient(RemoteInterpreterProcess.java:139) 在 org.apache.zeppelin.interpreter.remote.RemoteInterpreter.init(RemoteInterpreter.java:137) 在 org.apache.zeppelin.interpreter.remote.RemoteInterpreter.getFormType(RemoteInterpreter.java:257) 在 org.apache.zeppelin.interpreter.LazyOpenInterpreter.getFormType(LazyOpenInterpreter.java:104) 在 org.apache.zeppelin.notebook.Paragraph.jobRun(Paragraph.java:197) 在 org.apache.zeppelin.scheduler.Job.run(Job.java:170) 在 org.apache.zeppelin.scheduler.RemoteScheduler$JobRunner.run(RemoteScheduler.java:304) 在 java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 在 java.util.concurrent.FutureTask.run(FutureTask.java:266) 在 java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) 在 java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 在 java.lang.Thread.run(Thread.java:745

有什么线索吗?

我的后端是 spark 1.5,我通过解释器的 web 界面验证了 zeppelin 指向正确版本的 spark 和适当的 spark.home。

【问题讨论】:

你的火花在运行吗? 【参考方案1】:

该错误也可能是由于 Zeppelin 尝试创建解释器时发生的错误。

Zeppelin 在不同的进程中启动解释器并尝试使用 Thrift 协议进行连接

在我的情况下,我在 spark-defaults.conf 中尝试为 spark 驱动程序分配 5GB 时出现此错误 注释此行时解决(或分配4g或更少)

#spark.driver.memory              5g

你可以看看这个 JIRA ZEPPELIN-305

编辑

此错误可能由阻止 Spark 解释器进程启动的任何原因引起。 最近,我在尝试将 JMX 选项添加到 ZEPPELIN_JAVA_OPTS 时得到它,这会导致解释器进程使用与 Zeppelin 进程相同的 JMX 端口。给出“端口已在使用”错误

请检查 Zeppelin 日志(默认情况下,它们位于 ZEPPELIN_DIR/logs/ 以查看 Zeppelin 尝试启动 Spark Interpreter 时发生的情况

【讨论】:

【参考方案2】:

$SPARK_HOME 设置不正确时遇到了这个问题

【讨论】:

【参考方案3】:

像下面 [1] 这样的错误堆栈可能意味着很多不同的事情。 Zeppelin Server 无法连接到本地解释器,因为它没有启动或死亡。这似乎是一个 Zeppelin 错误,因为它无法在没有创建 Zeppelin 解释器进程的情况下在interpreter.sh 退出时捕获,提交https://issues.apache.org/jira/browse/ZEPPELIN-1984 以跟踪它。

在我们所有具有不同根本原因的案例中,真正的错误只能暴露出来 如果你想添加

LOG="/tmp/interpreter.sh-$$.log"
date >> $LOG
set -x
exec >> $LOG
exec 2>&1

到 $ZEPPELIN_HOME/bin/interpreter.sh 所以 /tmp/interpreter.sh-*.log 文件会告诉你实际的问题。

[1]

错误 [2017-01-18 16:54:38,533] (pool-2-thread-2 NotebookServer.java[afterStatusChange]:1645) - 错误 org.apache.zeppelin.interpreter.InterpreterException: org.apache.zeppelin.interpreter.InterpreterException: org.apache.thrift.transport.TTransportException: java.net.ConnectException:连接被拒绝 在 org.apache.zeppelin.interpreter.remote.RemoteInterpreter.init(RemoteInterpreter.java:232) 在 org.apache.zeppelin.interpreter.remote.RemoteInterpreter.getFormType(RemoteInterpreter.java:400) 在 org.apache.zeppelin.interpreter.LazyOpenInterpreter.getFormType(LazyOpenInterpreter.java:105) 在 org.apache.zeppelin.notebook.Paragraph.jobRun(Paragraph.java:316) 在 org.apache.zeppelin.scheduler.Job.run(Job.java:176) 在 org.apache.zeppelin.scheduler.RemoteScheduler$JobRunner.run(RemoteScheduler.java:329) 在 java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) 在 java.util.concurrent.FutureTask.run(FutureTask.java:262)

编辑。揭示真正根本原因的另一种方法是更改​​ log4j 以查看 spark 解释器进程的输出,正如 Jeff 在 ZEPPELIN-1984 中所暗示的那样。更改您的 ZEPPELIN_HOME/conf/log4j.properies 如下:

log4j.rootLogger = INFO, dailyfile

log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%d] (%t %F[%M]:%L) - %m%n

log4j.appender.dailyfile.DatePattern=.yyyy-MM-dd
log4j.appender.dailyfile.Threshold = DEBUG
log4j.appender.dailyfile = org.apache.log4j.DailyRollingFileAppender
log4j.appender.dailyfile.File = $zeppelin.log.file
log4j.appender.dailyfile.layout = org.apache.log4j.PatternLayout
log4j.appender.dailyfile.layout.ConversionPattern=%5p [%d] (%t %F[%M]:%L) - %m%n

log4j.logger.org.apache.zeppelin.interpreter.InterpreterFactory=DEBUG
log4j.logger.org.apache.zeppelin.notebook.Paragraph=DEBUG
log4j.logger.org.apache.zeppelin.scheduler=DEBUG
log4j.logger.org.apache.zeppelin.livy=DEBUG
log4j.logger.org.apache.zeppelin.flink=DEBUG
log4j.logger.org.apache.zeppelin.spark=DEBUG
log4j.logger.org.apache.zeppelin.python=DEBUG
log4j.logger.org.apache.zeppelin.interpreter.util=DEBUG
log4j.logger.org.apache.zeppelin.interpreter.remote=DEBUG
log4j.logger.org.apache.zeppelin.interpreter.remote.RemoteInterpreterServer=DEBUG

然后重新启动 Zeppelin。注意:它可能会产生过多的日志记录。我最初的建议是在interpreter.sh 中添加几行不需要重新启动 Zeppelin。

还创建了拉取请求以(部分)修复此问题:https://github.com/apache/zeppelin/pull/1921

2017 年 1 月 24 日更新。 https://issues.apache.org/jira/browse/ZEPPELIN-1984 已在 master 中修复,并将包含在 Zeppelin 0.8 版本中。 ZEPPELIN-1984 中有两个重要的修复:

如果解释器进程无法启动,您不会收到“连接被拒绝”; Zeppelin 将显示根本原因(在段落输出中)根本原因是什么。

【讨论】:

【参考方案4】:

问题

Zeppelin 会在 localhost 上运行自定义 Spark 应用程序,有时(如果您有多个网络,例如 ***),它不能使用127.0.0.1

因为这个源码:https://github.com/apache/zeppelin/blob/v0.8.1/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/remote/RemoteInterpreterUtils.java#L104

public static String findAvailableHostAddress() throws UnknownHostException, SocketException 
    InetAddress address = InetAddress.getLocalHost();
    if (address.isLoopbackAddress()) 
      for (NetworkInterface networkInterface : Collections
          .list(NetworkInterface.getNetworkInterfaces())) 
        if (!networkInterface.isLoopback()) 
          for (InterfaceAddress interfaceAddress : networkInterface.getInterfaceAddresses()) 
            InetAddress a = interfaceAddress.getAddress();
            if (a instanceof Inet4Address) 
              return a.getHostAddress();
            
          
        
      
    
    return address.getHostAddress();
  

您可以看到 Spark 解释器正在运行并在“奇怪”的 IP 上侦听:

ps aux | grep spark
zep/bin/interpreter.sh -d zep/interpreter/spark -c 10.100.37.2 -p 50778 -r : -l /zep/local-repo/spark -g spark

但是,Zeppelin UI 尝试连接到 localhost,它将解析 127.0.0.1,因此解析为 Connection refused

解决方案

在运行 Spark 解释器之前断开与 *** 的连接 使用 v0.8.2 通过新的环境变量 ZEPPELIN_LOCAL_IP 修复它

【讨论】:

【参考方案5】:

我注意到指向 spark 的 url 不正确。有一次,我纠正了它,它工作正常。还是谢谢。

【讨论】:

【参考方案6】:

$YARN_QUEUE 设置不正确时遇到同样的问题

【讨论】:

很久以前... 可能是设置了不同的队列名称?【参考方案7】:

这个问题已经开放一年了,不确定问题的解决方案是否已经实现。最近,我在 Amazon EMR 上使用 Yarn-Spark 遇到了类似的错误。当我调试它时,我意识到以下几点,如果他们发现自己处于相似的位置,我会建议他们尝试(解决方案基于 EMR,但在其他产品上应该类似

1. kill -9 `ps -ef | grep zeppelin | grep -v grep | awk 'print $2'`( *will make sure zombie processes are taken care of*)
2. kill -9 `ps -ef | grep hadoop-yarn-resourcemanager | grep -v grep | awk 'print $2'`
3. sudo /sbin/restart hadoop-yarn-resourcemanager
4. At times, simply starting the resource-manager does not start the name-node `sudo start hadoop-hdfs-namenode`
5. sudo /usr/lib/zeppelin/bin/zeppelin-daemon.sh start 
6. Use telnet to make sure that the default ports are open for required service.

在同样的情况下,应该能够使用有效的 SparkContext 使 zeppelin 正常运行。希望这有用

【讨论】:

这样你将在root用户下运行Zeppelin,这是一个巨大的安全问题。想象一下您的用户使用 %sh,然后以 root 用户身份运行任意命令。【参考方案8】:

在我的例子中,(project-root)/node_modules/zeppelin/spark-2.0.2-bin-hadoop2.7 没有安装,原因不明。 rm -rf node_modules; npm cache clear; npm i 已修复。

【讨论】:

【参考方案9】:

我修复了这个错误,将 spark-model yarn-cluster 更改为 yarn-client,因为它在 zepplin/conf/defalt.sh 中设置

【讨论】:

【参考方案10】:

当我尝试在 Amazon ECS 的微型实例上的同一个 docker 容器中使用 Spark 运行 Zeppelin 时,我遇到了完全相同的错误。

错误源在 %ZEPPELIN_HOME%/logs/*.out 的输出日志中可见,它表示 Zeppelin 由于内存不足而无法启动 Spark 解释器。所以我将我的 Docker 映像移动到具有更多内存的实例。

【讨论】:

【参考方案11】:

就我而言,我的集群中有三个节点。虽然其中三个安装了 spark,但只有一个安装了 zeppelin。

所以在 zeppelin Interpreter Menu --> Spark --> Edit --> Properties --> Master

将该参数从 yarn-client 更改为 local[*] 解决了我的问题。

【讨论】:

我正在尝试在 Windows 8 r2 中进行设置。我已经设置了 SPARK_HOME 并能够从 windows cmd 运行 spark-shell ....现在我安装了 zeppelin 0.8.0 版本 ....当我说 spark.version 它抛出空指针异常...任何线索如何在 Windows 上设置它?如何检查它是否指向 spark_home ?

以上是关于zeppelin 中的 Hello World 失败的主要内容,如果未能解决你的问题,请参考以下文章

csharp Zenject教程中的“Hello容器/门面的Hello World示例”示例

csharp Zenject教程中的“Hello容器/门面的Hello World示例”示例

text 固定RPG中的Hello World

php 固定RPG中的Hello World

html Hello React - ReactJs 1.3中的Hello World,不使用JSX

php 自由格式RPGIV中的Hello World