spark中local模式与cluster模式使用场景_当Hadoop遇上Spark(迷糊蛋手把手)

v2-74b0078c7cd4ea005d88a308d34aa3e2_1440w.jpg?source=172ae18b

今天终于要开始来写一写分布式计算的那些拧巴事儿了!

我之前一直有个误解,以为 Spark和Hdfs是两个互相取代的东西,Hdfs和MapReduce是绑在一起的。最近才发现,完全不是这样... 正确的理解应该是:

Spark和MapReduce才是‘竞争关系’,它们都是分布式计算的工具而已。而Hdfs几乎是分布式计算都会采用的文件存储系统,hdfs的全称是hadoop distributed file system。其中Hadoop指的是分布式计算分态圈。

v2-51a4abaf9801d7e587b60bc3b58ae635_b.jpg

hadoop就是谷歌三宝的开源Java实现,'谷歌三宝'为谷歌的三篇论文(注意:对应的源码谷歌没有开源):MapReduce,GFS,bigtable。Hadoop如今已经是大数据框架的代名词了。

(参考:大数据框架Hadoop科普 - 云+社区 - 腾讯云 )

一、 Spark在哪儿?

上图没有Spark. 因为Spark是后起之秀。它的地位应该是在上图MapReduce那里,因为Spark主要用内存进行数据的处理,而且兼容HDFS, 且对python的库很友好,对sql很支持,而python, sql是大数据应用最广的工具了,所以Spark在分布式计算生态圈里前景很好。

划重点:Spark只是数据计算(编程)的工具,它不是个文件存储系统。 hdfs才是文件存储系统。所在 Spark需要处理海量数据时,需要在hdfs的基础上进行(依存关系,不是竞争关系)。

二、如何用Spark?

一般的Spark教程主要在rdd上,自己练习的话完全可以在local mode下进行,这种情况下完全不需要考虑hdfs。读取本地文件,在计算机多核里计算,就可以了。在使用样本数据的时候一般这么操作,用来验证脚本的可行性。

但是在工作中,我们需要在集群模式下进行Spark实战。因为数据海量了,必须用hdfs了, hdfs就是用多个计算机形成的集群来存数据。所以,这篇重点在于介绍如何使用spark cluster.

而如何在集群模式下进行Spark实战呢?有三种办法:

1 是用Spark Standalone

2 是用Hadoop YARN

3 是用Mesos

Spark Standalone 相当于diy攒机,相对复杂。Hadoop YARN相当于买回家就可以直接开机使用的整机,比diy攒机简单。Mesos是嫡系但我不会用所以这篇不讲。

挖坑:Pyspark和Spark是什么关系?

三、用Spark Standalone。 这里介绍的是在AWS EC2上diy.

  • 前提条件:租个aws ec2, 再git clone一个spark-ec2: amplab/spark-ec2 并注意要git checkout branch-2.0
  • spark-ec2的作用是:可以帮你在aws上启一个新的集群,关掉一个正在用的集群,登进你的集群。它还会自动帮你在aws上设置好 spark和 hdfs。

3.1 启动一个集群,并且指定你希望用几个slave/worker:

本机$ ./spark-ec2 -k k_name -i pem_name.pem -s 1 -r us-west-2 -z us-west-2a launch ec2-example 

注:上述就会在aws上启动两个instances, 一个是master一个是slave.

3.2 现在集群已经起来了,接下来登进:

本机 $./spark-ec2 -k k_name -i pem_name.pem -r us- west-2 -z us-west-2a login ec2-example

3.3 现在进行开发/计算模式,有两个运行spark的方式:

一个是直接在aws上机器的shell里面玩,用这个命令进行pyspark的shell:

awsip$ ~/spark/bin/pyspark

一个是先在本地写好python script, 再运行,即spark-submit。这里的本地是指在自己的local模式下写的脚本,即用本机多线程模拟cluster的产物。

这个有个坑要注意! 即在本地写的script里一般都会从本地读数据文件进来,在运行spark-submit之前,要先把这个数据文件拷贝到所有的节点上。否则submit之后,集群计算时会在某个结点读你的数据,然后就会报错说找不到。拷贝的命令也在上述提到的spark-ec2那个git项目里有写。比如:

先把本机的输入文件传到aws master结点上,

scp -i Dir/pem_name.pem –r YourDir/* root@ec2-54- 203-2-57.us-west-2.compute.amazonaws.com:~/DIR

再从aws master结点拷到其它结点:

~/spark-ec2/copy-dir ~/DIR

另外还需要更新一下在本地写的script,主要体现在两点:一是设置master node address and its port。 这个地址在Spark web UI里会写。(怎么打开Spark web UI? 请自己搜索)。二是把读文件的路径改为"file:///absolute_path"

最后,在主结点上submit就可以了:

~/spark/bin/spark-submit --deploy-mode client example.py > output.txt

四、用Hadoop YARN运行Spark。

4.1 关于YARN的科普。全称是yet another resource negotiator,“就是一种资源管理器”的意思,没错,跟“有家客栈”异曲同功。大多数的hadoop在安装时都在hdfs层面自带了yarn的配置。它的好处是不需要自己在每个结点上安装spark了,它都给你安排好了。

Amazon EMR天生兼容hadoop yarn上面的spark。

4.1 在aws emr的界面里选择create cluster, 填好相应的信息,其中applications选spark. 当cluster信息填好了,把ssh命令拷贝下来。

4.2 用拷下来的 ssh 登进cluster。

4.3 现在进行开发/计算模式,有两个运行spark的方式:

一个还是 pyspark,因为yarn都给你弄好了,直接输“pyspark”就进行shell

一个是用spark-submit。但是注意,这里不需要设置master address,因为这个系统里有yarn自带的resource manager了.

v2-e67faa3a90e00b7854990af73fe92652_b.jpg

然而,如果script里有从本地读数的操作,还要是把文件考到各个node上。这里因为不像spark standalone是用spark-ec2的包操作,所以拷贝命令也不一样,应该是用"$ hdfs -fs copyfrom local_path..blabla..." 一类的操作。

福利:关于spark-submit的参数之deploy-mode,这里贡献一篇让我醍醐灌顶的科普。spark client mode和cluster mode的区别 希望对同样迷糊的你有帮助。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值