走进Spark生态圈:运行程序在Spark集群

上一节 走进Spark生态圈:环境的安装与配置 我们在虚拟机上简单的搭建了运行于StandAlone的上的伪分布集群和全分布集群,并通过Spark的可视化查看集群的运行状态. 集群已经存在,这一节我们将会在集群上运行我们的第一个程序:统计文本中的单词数(简称:WordCount)
示例代码将使用Scala语言编写,运行在伪分布集群Spark81上

Spark核心对象

SparkConf:spark程序的配置对象,可以通该对象设置spark程序的要运行的master环境,app的名称等信息。
SparkContext:这个很重要,是Spark核心的上下文对象,使程序可以和Spark进行交互
RDD:分布式弹性数据集,任何数据在Spark上面都可以是RDD,RDD将数据并行的运行在不同的Worker上不同的Executer上

在集群上运行spark shell

spark shell可以把它看成是一个壳,可以直接运行在集群上,而壳中的内容就是我们用scala语言编写的程序。
让我们先来启动 spark shell,运行 spark-shell命令
这里写图片描述

这里面有几个很重要的信息
1.spark context available as ‘sc’ (master=lcoal[*],app id=lcoal-…..
:在该交互式命令行中我们可以直接使用sparkcontext对象,名为“sc”
:现在的spark-shell运行在本地,并且id为lcoal-……
2.spark version 2.2.0 Using Scala version 2.11.8
:spark的运行版本为2.2.0
:使用的scala版本为2.11.8
:说这两个显而易见的信息是因为我们在开发程序的时候,最好使用scala的版本为2.11.8,否则会报错,请看本节最后

现在spark-shell运行在本地,显然不是我们所要求的,那么要想spark-shell运行在集群上,我们该怎么做呢?现退出本地spark-shell,然后请使用如下命令

spark-shell --master spark://spark81:7077

这里写图片描述

现在我们的spark程序则是运行在伪分布式的集群上,通过图中标注的信息即可看到,若感觉不明显,可以在浏览器中运行 spark81:8080 查看

这里写图片描述

从图中可以看到当前Spark Master的地址,Spark的运行状态,集群中的Worker信息,和运行在Worker上应用程序的信息(可以看到当前有一个名字为spark shell的程序运行在集群上)

在spark shell上编写WordCount

在命令行中输入运行以下代码

val result = sc.textFile("application/files/greeting.txt")
               .flatMap(_.split(" "))
               .map((_,1))
               .reduceByKey(_+_)
               .saveAsTextFile("applications/files/out/wordcount")

简单的解释(我把代码分开来运行),后续的文章会详细说
文件内容:
这里写图片描述
1.从文件中创建一个RRD,使用sc.textFile()
这里写图片描述
2.按照空格分割,将数据集压平
这里写图片描述
3.把数据转化为元组
这里写图片描述
4.对结果进行按照Key相同的组的值进行累加
这里写图片描述
5.将结果保存到指定的文件
这里写图片描述

文件part-00000,part-00001为不同的分区文件(具体内容后续介绍)

这里写图片描述

使用IntelliJ IDEA 开发Scala程序WordCount

物理机信息
这里写图片描述
1.安装scala插件
这里写图片描述

点击“Configuration” > plugins

这里写图片描述

之后搜索Scala 在右侧的点击“Install”即可,安装完成之后创建项目”WordCount”

这里写图片描述

点击“next”(这里一定要选择Spark要求的Scala版本)

这里写图片描述

完整结构如下

这里写图片描述

关键的过程详细说明一下

1.创建lib文件夹,导入需要的Jar包(Jar包的来源,上一节说到spark安装后的目录结构里面就有一个jars文件夹,那么这里就是需要依赖jars,添加到lib即可),导入之后,执行如下操作

这里写图片描述

此时我们就可以在文件中导入所依赖的jar包了

2.打包

这里选择Empty,防止打包出来的包含引用jars,导致过大

这里写图片描述

起包名,并向包中添加清单文件(Manifest),默认点击Open即可

这里写图片描述

将程序编译的输出打包到包中

这里写图片描述
这里写图片描述

添加Jar的Main入口

这里写图片描述

完整结构如下

这里写图片描述

编译Artifacts

这里写图片描述

在项目的out目录下,可以看到编译的Jar包

这里写图片描述

3.提交jar到Spark上执行
将jar包发送到虚拟机spark81的applications目录下

scp -r  CalculateWordCount.jar root@spark81:applications 

在spark81下运行如下命令

spark-submit --master spark://sprk81:7077 --class example.WordCount CalcalateWordCount.jar files/greeting.txt files/out/wordcount 

运行结果如spark shell的运行结果

遇见的问题

1.Exception: spark master 没有链接上
这里写图片描述
解决办法:运行 start-all.sh 启动spark集群

2.Exception:输出文件已存在
这里写图片描述
解决办法:删除已经存在的文件或者是文件夹

3.Exception:对应的版本不一致,类似的异常信息
scala/runtime/java8/JFunction1$mcII$sp
解决办法:使用对应版本的scala编写程序,并运行在Spark集群

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值