我有一个在AWS EC2机器上运行的HortonWorks集群,我希望使用火花流运行一个火花工作,这将吞下关于权力游戏的推文 . 在尝试在我的集群上运行它之前,我确实在本地运行它 . 代码正常,这里是:
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:连接到主火花:// ip-adress:7077 ... 17/07/24 11:53:44 WARN AppClient $ ClientEndpoint:连接失败master ip-adress:7077 java.io.IOException:无法连接到org.apache的org.apache.spark.network.client.TransportClientFactory.createClient(TransportClientFactory.java:216)中的spark:// ip-adress:7077位于org.apache.spark.rpc.netty.Outbox的org.apache.spark.rpc.netty.NettyRpcEnv.createClient(NettyRpcEnv.scala:200)的.spark.network.client.TransportClientFactory.createClient(TransportClientFactory.java:167) $ anon $ 1.call(Outbox.scala:187)at org.apache.spark.rpc.netty.Outbox $$ anon $ 1.call(Outbox.scala:183)at java.util.concurrent.FutureTask.run(FutureTask .java:266)java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:617)at java.lang.Thread.run( Thread.java:748)
1 回答
要使用
yarn
运行spark应用程序,应使用spark-submit
使用--master yarn
. 无需在scala源代码中使用setMaster
.