spark 广播变量大数据_大数据处理 | Spark集群搭建及基本使用

b6d32de918ef27ddd15d8e14d30f74fe.png

点击蓝字关注我

b6d32de918ef27ddd15d8e14d30f74fe.png

前面用了一篇文章详细的介绍了集群HDFS文件系统的搭建,HDFS文件系统只是一个用于存储数据的系统,它主要是用来服务于大数据计算框架,例如MapReduce、Spark,本文就接着上一篇文章来详细介绍一下Spark集群的搭建及Spark的运行原理、运行模式。

—▼—

Spark集群环境搭建

f80c39b282969640673abdb24b046602.png

如果已经理解了前文Hadoop集群环境的搭建,那么学习Spark集群环境的搭建会容易很多,因为Hadoop和Spark不仅安装包目录结构非常相似,在配置方面也十分接近。均是在master节点上进行所有配置,然后打包复制到每个slave节点,然后启动集群Spark即可,下面就来详细介绍一下Spark集群环境的搭建。

下载安装

bc7645a9f3d75d5602e343b99d35f65c.png

进入Spark的下载目录,

https://spark.apache.org/downloads.html

可以看到Spark分多个版本,有基于Hadoop构建好的,有没基于Hadoop构建的,有基于Hadoop2.6之前版本构建的,也有基于Hadoop2.7以后版本构建的,由于前面讲解Hadoop集群环境搭建时采用的是Hadoop 3.2.1,因此,而且本文需要使用HDFS依赖Hadoop,因此需要下载Pre-built for Apache Hadoop 2.7 and later,

把spark-2.4.4-bin-hadoop2.7.tgz文件下载到home路径下,然后解压到指定目录,

$ tar -zxvf ~/spark-2.4.4-bin-hadoop2.7.tgz -C /usr/local/

然后进入目录并像Hadoop那样,修改Spark目录的拥有者,

$ cd /usr/local$ sudo mv ./spark-2.4.4-bin-hadoop2.7 ./spark$ sudo chowm -R user_name ./spark

配置环境变量

修改bashrc,配置环境变量,把Spark的bin和sbin路径加入到环境变量,

$ vim ~/.bashrcexport SPARK_HOME=/usr/local/sparkexport PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbinexport PYTHONPATH=$SPARK_HOME/python:$SPARK_HOME/python/lib/py4j-0.10.7-src.zip:$PYTHONPATHexport PYSPARK_PYTHON=python3

Master节点配置

进入Spark目录,修改spark-env.sh文件,

$ cd /usr/local/spark$ vim ./conf/spark-env.sh

在spark-env.sh中添加下面内容,

export SPARK_DIST_CLASSPATH=$(/usr/local/hadoop/bin/hadoop classpath)export HADOOP_CONF_DIR=/usr/local/hadoop/etc/hadoopexport SPARK_MASTER_IP=10.110.113.132

SPARK_MASTER_IP指定的是master节点的IP,后面启动集群Spark时slave节点会注册到SPARK_MASTER_IP,如果这一项不配置,Spark集群则没有可使用资源,

修改slaves文件

配置完master节点信息之后需要配置slave节点信息,slave节点的信息配置在slaves文件里,由于Spark目录下没有这个文件,因此需要首先从slaves.template拷贝一下,

$ cd /usr/local/spark/$ cp ./conf/slaves.template ./conf/slaves

然后添加如下内容,

slave0slave0slave1

需要注意的是,slaves文件里配置的是运行作业任务的节点(worker),这样的话master的节点只作为控制节点,而不作为工作节点,如果需要把master节点的资源也充分利用起来,需要把master节点也加入到slaves文件中。

slave节点配置

首先在master节点上把配制好的目录进行打包,拷贝到每个slave节点上,

$ cd /usr/local$ tar -zcf ~/spar.tar.gz ./spark$ scp ~/spark/tar.gz slave0:~/$ scp ~/spark/tar.gz slave1:~/$ scp ~/spark/tar.gz slave2:~/

然后在每个slave节点上执行下方命令,把文件解压到相应路径下,

$ sudo rm -rf /usr/local/spark$ sudo tar -zxvf ~/spark.tar.gz -C /usr/local$ sudo chown -R user_name /usr/local/spark

这样就完成了slave节点的配置。

启动Spark集群

如果要使用HDFS的话,在启动Spark集群前需要先启动Hadoop集群,

$ cd /usr/local/hadoop/$ ./sbin/start-all.sh

然后进入Spark目录,启动Spark集群,

$ cd /usr/local/spark$ ./sbin/start-all.sh

需要说明一下,前面配置Hadoop集群是提到,需要配置ssh免密登陆,对于Spark也是同样的道理,如果不配置ssh免密登陆的话,执行./sbin/start-all.sh会提示输入密码。

除了使用./sbin/start-all.sh启动Spark集群外,还可以分开启动,先启动master节点,然后启动slave节点,

$ ./sbin/start-master.sh$ ./sbin/start-slaves.sh

如果前面没有完成Master节点配置指定master节点IP,那么执行./sbin/start-slaves.sh时则无法注册master节点的IP,这样集群计算资源则无法使用。除了配置spark-env.sh指定master节点IP外,还可以通过下面方式指定注册的master节点IP,

$ ./sbin/start-slave.sh 10.110.113.132

然后分别在master节点和slave节点执行下面命令会看到分别多出一个Master进程和Worker进程。

Spark基本使用

运行原理

如果使用过tensorflow的话,应该对Spark的使用很容易理解,Spark的计算过程和tensorflow有相似之处。

回忆一下,我们在使用tensorflow时需要首先构造一个计算图,然后实例化一个session,然后用session.run来启动图运算。

其实Spark也是这样,RDD(弹性分布式数据集)是Spark中最重要的概念之一,它提供了一个共享内存模型。Saprk的执行过程中主要包括两个动作:转换与行动。其中转换操作就如同tensorflow中的构造计算图的过程,在这个过程中Spark构造一个有向无环图(DAG),但是不进行运算,输入为RDD输出则是一个不同的RDD,当执行行动操作时就如同tensorflow中的session.run,开始执行运算。

Spark中有很多转换操作,例如,

  • groupByKey

  • reduceByKey

  • sortByKey

  • map

  • filter

  • join

  • ……

行动操作包括,

  • count

  • collect

  • first

  • foreach

  • reduce

  • take

  • ……

运行模式

Spark中通过master url来执行Spark的运行模式,Spark的运行模式包括本地运行、集群运行、yarn集群等,关于Spark master url的指定不同运行模式的含义如下,

URL值运行模式
local使用1个线程本地化运行
local[K]使用K个线程本地化运行
local[*]使用逻辑CPU个数数量的线程来本地化运行
spark://HOST:PORT指定集群模式运行Spark
yarn-cluster集群模式连接YARN集群
yarn-client客户端模式连接YARN集群
mesos://HOST:PORT连接到指定的Mesos集群

示例

下面就以一个简单的示例把前面Hadoop和Spark串联在一起,讲解一下HDFS+Spark的使用方法。上传数据到HDFS新建一个hello_world.txt的本地文件,并在文件中添加3行hello world,然后上传至HDFS,
$ cd /usr/local/hadoop/$ ./bin/hdfs dfs -mkdir -p /usr/hadoop$ touch hello_world.txt$ echo -e "hello world \nhello world \nhello world" >> hello_world.txt$ ./bin/hdfs dfs -put ./hello_world.txt /usr/hadoop
编写Spark程序新建一个spark.py的Python文件,
$ vim spark.py
添加如下内容,
from pyspark import SparkConffrom pyspark import SparkContextconf = SparkConf().setAppName("FirstProject").setMaster("local[*]")sc = SparkContext.getOrCreate(conf)rdd = sc.textFile("hdfs:///master:9000/usr/hadoop/hello_world.txt")rdd.map(lambda line: line).foreach(print)
然后运行程序,
$ python spark.pyhello worldhello worldhello world
以上就是Spark的集群配置过程和基本使用方法。

END

dbb1fd1e0a7f10847423e8bbde4e04b3.png9b2379221a87ba817904f3b6251b0b6d.png有趣的灵魂在等你

长按扫码可关注 

相关文章效率工具 | 推荐一款提高Python编程效率的神器实用工具 | 推荐5款值得安装的Windows工具学习资源 | 推荐2份Github热门校招面试汇总资料文章好看就点这里3779be1dc1c800d6d1a909908c753498.gif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/537058.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何将本地项目上传到gitee

*************************************优雅的分割线 ********************************** 分享一波:程序员赚外快-必看的巅峰干货 如果以上内容对你觉得有用,并想获取更多的赚钱方式和免费的技术教程 请关注微信公众号:HB荷包 一个能让你学习技术和赚钱方法的公众号,持续更…

oracle dg 备库未设置convert参数导致ORA-01111,ORA-01110

2019独角兽企业重金招聘Python工程师标准>>> 查看trace 文件: MRP0: Background Managed Standby Recovery process started (amls) started logmerger process Sun Jan 20 07:55:53 2019 Managed Standby Recovery starting Real Time Apply MRP0: Back…

git回退历史版本无法上传_Git系列教程(二):版本库中添加文件、版本回退

Git系列教程(一):简介、安装、配置我们学习了分布式和版本控制系统的概念、Git具有的8个功能以及如何在Windows上安装Git、进行相关配置并创建版本库。Git版本库中添加文件Git 的工作就是创建和保存你的项目的快照及与之后的快照进行对比。我们编写一个readme.txt文…

nginx反向代理配置如何去除前缀

使用nginx做反向代理的时候,可以简单的直接把请求原封不动的转发给下一个服务。设置proxy_pass请求只会替换域名,如果要根据不同的url后缀来访问不同的服务,则需要通过如下方法: 方法一:加"/"** server {l…

「作文素材详解」写作必知篇:语言优美不是作文第一要求

语言优美不是作文第一要求“教孩子写作文,老师家长应该先提升自己。”“语言优美不是作文的第一要求。”“如果教孩子写漂亮的违心话,会害了他一辈子。”日前,著名作家肖复兴来到体育东路小学,与广州的一线语文教师交流&#xff0…

华为安装gsm框架_华为nova5怎么下载安装谷歌服务助手,安装GMS框架教程

看到不少的华为nova5用户喜欢这个谷歌服务助手,也就是想安装这个GMS框架,可是一直不知道如何下载安装,这个谷歌服务框架是可以在系统软件里面可以删除的一个APK程序,但现在有很多的软件和游戏需要谷歌服务的支持,那咱们…

VMware安装虚拟机并使用NAT模式连接网络

*************************************优雅的分割线 ********************************** 分享一波:程序员赚外快-必看的巅峰干货 如果以上内容对你觉得有用,并想获取更多的赚钱方式和免费的技术教程 请关注微信公众号:HB荷包 一个能让你学习技术和赚钱方法的公众号,持续更…

PHPStudy下Apache SSL证书安装教程

一、安装SSL证书的环境 Apache安装目录:E:phpStudyPHPTutorialApache 以上为windows下测试SSL证书安装的目录,具体目录请根据自己的实际环境! 二、获取SSL证书 成功在沃通申请SSL证书后,会得到一个压缩包文件,解压后得到四个文件&…

laravel 集成采集_新版2020 Laravel采集网站程序

环境:php5.6数据库:mysql5.5集成环境软件:护卫神apache这套程序是520.ag 的网站很早的程序了是去年还是前年 应该是前年免费采集网站 但是经常挂 其实他网站挂和服务器没有多大关系 是程序没有作好优化这套程序可以大家做起来 自己用就可以了 放出去免费采集的话 网站容易死程…

详解模板方法设计模式

分享一波:程序员赚外快-必看的巅峰干货 概念 定义一个操作中的算法骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的重复代码全部在父类里面,不同业务的,使用抽象方法,抽取给子类进…

怎么从已有文件中挑选需要的文字重新生成新文件_CAD问题全面解答(几乎涵盖了CAD使用的全部问题)...

1.【CTrlN无效时之解决办法】众所周知CTRLN是新建命令但有时候CTRLN则出现选择面板这时只需到OP选项里调下设置操作:OP(选项)------系统-------右侧有一个启动(A显示启动对话框B不显示启动对话框)选择A则新建命令有效,反则无效2.【Ctrl键无效之解决办法】…

中国官方要求进一步加强中资商业银行境外机构合规管理

中新社北京1月22日电 (记者 王恩博)为推动在境外设有经营性机构的中资商业银行进一步优化集团合规管理体系,健全跨境合规管理机制,提高跨境合规管理有效性,实现境外机构安全稳健运行,中国银保监会22日发布《关于加强中资商业银行境…

详解:设计模式之-代理设计

分享一波:程序员赚外快-必看的巅峰干货 概念 通过代理控制对象的访问,可以详细访问某个对象的方法,在这个方法调用处理,或调用后处理(类似于AOP)。 代理设计模式应用场景:AOP、权限控制、事务 常见代理的分类有&am…

【实时+排重】摆脱渠道统计刷量作弊行为

如今的渠道统计不仅要看精准度,更要看数据的真实性。 对App的推广业务而言,渠道监测和统计是必不可少的环节,不论以什么形式开展推广,终究都要具体落实到App的安装量、激活量等指标上。但在如今数据刷量和作假行为横行的背景下&am…

python清空idle的内容_Python IDLE清空窗口的实例

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里技术人对外发布原创技术内容的最大平台&…

详解:设计模式之-单例设计模式

分享一波:程序员赚外快-必看的巅峰干货 前言 近期预计1-2周左右会更新设计模式专题文章。 单例设计模式:保证在一个JVM中,只能存在一个实例。 应用场景:Servlet,Spring IOC,线程池,连接池,S…

rabbitmq可靠性投递_阿里Java研发二面:了解RabbitMQ?说说RabbitMQ可靠性投递

上期写到高并发下RabbitMq消息中间件你应该介么玩今天给小伙伴说说!有自己看法的也可以在评论区留言探讨,也可以转发关注下我以后会长期分享!目录:确保消息发送到RabbitMQ服务器确保消息被正确的路由确保消息在队列正确地存储确保…

IBM发布Open Liberty 18.0.0.4,支持MicroProfile 2.1和反应性扩展框架

IBM在2018年第四季度发布的Open Liberty 18.0.0.4提供了对MicroProfile 2.1、反应性扩展框架和连接池指标的全面支持。根据发布说明:Open Liberty现在对JAX-RS 2.1进行了反应性扩展,这样你就可以使用来自Apache CXF和Jersey的提供程序。在ops方面&#x…

b700a怎么连蓝牙_233621蓝牙2.1无线音箱B700A小测

随着蓝牙技术的发展,使用蓝牙的相关产品也越来越多,各种蓝牙耳机、蓝牙键盘、蓝牙鼠标都让我们的外设摆脱了线材的束缚。小编之前也介绍过一款便携蓝牙音箱,也评测过一款蓝牙耳机,而今天拿到的是一款采用蓝牙2.1技术,造…

详解:设计模式之-适配器模式

分享一波:程序员赚外快-必看的巅峰干货 简介 在设计模式中,适配器模式有时候也称包装样式或者包装。将一个类的接口转接成用户所期待的。一个适配使得因接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已存在的类中。 分类 …