初次接触spark的一点理解

由于工作的需要,在考虑用spark作为实时日志分析的框架,而之前没有接触过spark,只是在网上看到大家对它评价很高,于是就开始去着手学习它,从官方文档和网上各种资料狠狠恶补了两天,综合这两天的收获,谈一谈对spark的肤浅的理解

一、spark的三种运行模式(这里没有去关注mesos)

1、standlone模式  

这种模式是spark在做计算时候的一种独立模式,这种模式是为了让初学spark的人能更快的上手去开发spark作业和进行调试,其基本原理是:spark实际上自己实现了一套资源分配机制(类似yarn),在这种模式下需要部署一个spark集群,并在master上面用start-all.sh启动集群,这个时候我们就可以使用spark来运行作业了,提交作业的时候的地址应该是  --master spark://master:7077(默认7077端口),这就是说把作业提交给master,然后我们可以在master:8080上面看到作业的相关信息。总的来说这种模式下的spark就是一个整体(只是指分布式计算方面,输入和输出还是可能要借助外部框架的,比如从hdfs读取文件等),可以自己分配资源,自己创建executor,自己玩。

       2、yarn-client模式

这种模式会使用yarn来进行资源的分配,而不再使用spark自身实现的资源分配机制了。具体的执行过程为:从客户端(执行发布作业动作的机器,比如eclipse、spark-submit命令等)发布作业到yarn,这里有一个地方要注意,需要把spark支持hadoop的那个包(这里是/lib/spark-assembly-1.6.1-hadoop2.6.0.jar)上传到hdfs的某个目录下面,因为这种模式下作业和standlon模式下的spark集群没有什么关系了,yarn不会把任务分配到spark集群中的(换句话说,我们在standlone模式下搭建的那个集群启动不启动跟它没鸟关系)而是分配到hadoop集群中的节点去计算,而这些hadoop节点没有spark运行的环境啊,这个时候就是靠着这个spark-assembly-1.6.1-hadoop2.6.0.jar包来以spark的模式跑作业的,所以我们在运行官方的那个spark-submit的时候,会看到有upload这个jar到hdfs的打印信息,应该是他会默认的把SPARK_HOME下的这个jar包上传到hdfs,当然我们也可以在手动上传该jar包到hdfs后,在job的代码中的SparkConf中设置一下“spark.yarn.jar”变量,告诉框架,你要的这个包我已经上传了,就在那,这样就不会上传了。下一步就是上传job的jar包了,等这个做完后,作业就开始运行了。

3、yarn-cluster模式

这种模式的基本执行过程与yarn-client基本一致,那区别在哪里,区别在于spark driver(也可以说sparkContext)在哪里运行,先说一下这个sparkContext,这是一个很重要的东西,它负责作业过程中任务调度,还有最后的结果处理,在这个作业的运行过程中要与executor交互的,在standlone模式下,spark driver是会放在某一个worker上;yarn-client模式下会放在客户端,也就是说在作业运行的过程中,客户端会与yarn集群不停的交互,直到结束;而yarn-cluster模式下,spark driver会跟application manager放在一起,也就是说,作业提交后,客户端就没屁事了,所有的都交给yarn集群了,包括怎么创建spark driver,创建在哪,那都是你yarn集群的事,客户端拍拍屁股就完工了,但这样客户端最终拿不到最后的结果,往往这种模式下的输出都会写到其他地方(比如hdfs等)。


二、在eclipse环境中远程发布spark作业

我习惯用eclipse编写java程序,而写习惯在windows下面,因此需要在eclipse下面编写spark程序,并在远程去执行(standlone或者yarn-client),具体方法可参考 http://www.open-open.com/lib/view/open1454333137901.html,这个帖子里采用的是yarn-client方式去运行,本人在尝试的时候出现了“ERROR YarnScheduler: Lost executor 2 on datanode2: Slave lost”类似的错误,网上一查,说是yarn资源分配失败,要改配置,于是就在SparkConf中(程序中通过set()方法加)加了一些关于内存的配置,试了一次,成功了,但是试第二次的时候又失败了,目前还在跟踪中,

如要要用standlone模式远程执行,只需要把master从yarn—client改成spark://xxxx:7077就是了,这个倒是很容易成功,成功后可以在master:8080上看到作业的信息。


由于才接触两天,理解有限,需要继续学习

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值