关于在集群 (AWS) 上运行 Spark 作业的说明

Posted

技术标签:

【中文标题】关于在集群 (AWS) 上运行 Spark 作业的说明【英文标题】:Clarification about running spark jobs on a cluster (AWS) 【发布时间】:2017-07-24 09:55:25 【问题描述】:

我有一个在 AWS EC2 机器上运行的 HortonWorks 集群,我想在该机器上使用 spark 流运行一个 spark 作业,它会吞下关于权力游戏的推文。 在尝试在我的集群上运行它之前,我确实在本地运行了它。 代码正在运行,这里是:

import org.apache.spark.streaming.StreamingContext, Seconds
import org.apache.spark.streaming.twitter._
import org.apache.spark.SparkConf, SparkContext

object Twitter_Stream extends App 

  val consumerKey = "hidden"
  val consumerSecret = "hidden"
  val accessToken = "hidden"
  val accessTokenSecret = "hidden"

  val sparkConf = new SparkConf().setAppName("GotTweets").setMaster("local[2]")

  val ssc = new StreamingContext(sparkConf, Seconds(1))

  val myStream = TwitterUtils.createStream(ssc, None, Array("#GoT","#WinterIsHere","#GameOfThrones"))

  val rddTweets = myStream.foreachRDD(rdd =>
  
    rdd.take(10).foreach(println)
  )

  ssc.start()
  ssc.awaitTermination()

我的问题更确切地说是关于这个特定的代码行:

val sparkConf = new SparkConf().setAppName("GotTweets").setMaster("local[2]")

我将“local[2]”替换为“spark://ip-address-EC2:7077”,它对应于我的一台 ec2 机器,但连接失败。 我确定这台机器上的 7077 端口是开放的。

此外,当我在其中一台 EC2 机器上使用此配置 (setMaster("local[2]")) 运行此代码时,我的 spark 会使用集群的所有机器还是仅在单台机器上运行?

这里是例外:

17/07/24 11:53:42 INFO AppClient$ClientEndpoint: 连接到 master 火花:// IP地址:7077 ... 17/07/24 11:53:44警告 AppClient$ClientEndpoint:无法连接到主 IP 地址:7077 java.io.IOException:无法连接到 spark://ip-adress:7077 at org.apache.spark.network.client.TransportClientFactory.createClient(TransportClientFactory.java:216) 在 org.apache.spark.network.client.TransportClientFactory.createClient(TransportClientFactory.java:167) 在 org.apache.spark.rpc.netty.NettyRpcEnv.createClient(NettyRpcEnv.scala:200) 在 org.apache.spark.rpc.netty.Outbox$$anon$1.call(Outbox.scala:187) 在 org.apache.spark.rpc.netty.Outbox$$anon$1.call(Outbox.scala:183) 在 java.util.concurrent.FutureTask.run(FutureTask.java:266) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 在 java.lang.Thread.run(Thread.java:748)

【问题讨论】:

为了更好地理解问题,能否请您报告异常输出? 我认为异常不会带来比我所说的更多的信息,但我编辑了我的消息。 能否通过“telnet ip-address-EC2 7077”验证是否可以访问本机 不,我无法通过 telnet 访问它。仅使用 ssh。 【参考方案1】:

要使用 yarn 运行 spark 应用程序,您应该使用 spark-submit--master yarn 。无需在 scala 源代码中使用setMaster

【讨论】:

不仅“不需要使用setMaster”,而且如果包含setMaster,将不会工作。投赞成票:)

以上是关于关于在集群 (AWS) 上运行 Spark 作业的说明的主要内容,如果未能解决你的问题,请参考以下文章

我的 spark 作业在 aws EMR 集群上长时间处于接受模式

在没有 spark UI 的情况下在 AWS EMR 中监控 spark 集群

如何将 Spark EMR 集群与 AWS elasticsearch 集群连接起来

在 Yarn 集群上运行 Spark 作业的问题

AWS EMR 火花提交选项 - 失败

无法让 pyspark 作业在 hadoop 集群的所有节点上运行