Spark基础01 简介 框架体系 安装部署 spark-shell使用 scala,Java,Lambda分别编写WordCount 打包运行 Debug运行

spark简介
快速、通用、可扩展的大数据分析引擎
(Java, Scala, Python, R and sql)
既可以做离线计算,也可以做实时计算
提供了统一的大数据处理解决方案
可以运行在各种资源调度框架和读写多种数据源
支持的多种部署方案
丰富的数据源支持。

1.MR只能做离线计算,如果实现复杂计算逻辑,一个MR搞不定,就需要将多个MR按照先后顺序连成一串,
一个MR计算完成后会将计算结果写入到HDFS中,下一个MR将上一个MR的输出作为输入,
这样就要频繁读写HDFS,网络IO和磁盘IO会成为性能瓶颈。从而导致效率低下。
2.既可以做离线计算,有可以做实时计算,提供了抽象的数据集(RDD、Dataset、DataFrame、DStream)
有高度封装的API,算子丰富,并且使用了更先进的DAG有向无环图调度思想,
可以对执行计划优化后在执行,并且可以数据可以cache到内存中进行复用。
注意:MR和Spark在Shuffle时数据都落本地磁盘

2020年6月18日发布的spqrk3.0在Python和SQL方面很大扩展改进,特别是易用性上

spark体验
/bin/spark_shell
sc.textFile(“file:///root/1.txt”).flatMap(.split(" "))
.map((
, 1)).reduceByKey(+).sortBy(_._2, false).collect

spark框架体系
Master:是一个Java进程,接受Worker的注册信息和心跳,移除异常超时的Worker,
接受客户端提交的任务,负责资源调度,命令Worker启动Executor.
Worker:是一个Java进程,负责管理当前节点的资源关联,向Master注册并定期发送心跳,
负责启动Executor,并监控Executor的状态.
SparkSubmit:是一个Java进程,负责向Master提交任务.
Driver:是很多类的统称,可以认为SparkContext就是Driver,client模式Driver运行在SparkSubmit进程中,
cluster模式单独运行在一个进程中,负责将用户编写的代码转成Tasks,然后调度到Executor中执行
并监控Task的状态和执行进度。
Executor :是一个Java进程,负责执行Driver端生成的Task,将Task放入线程中运行。

spark安装部署
安装spark3.0时,要求scala版本高于或等于2.12
linux 安装前提 安装好JDK
下载spark安装包 官网
上传spark安装包到Linux服务器上
解压spark安装包
tar -zxvf spark-3.0.0-bin-hadoop3.2.tgz -C /opt/apps/
进入到spark按照包目录并将conf目录下的spark-env.sh.template重命名为spark-env.sh
vi spark-env.sh 添加二行代码
export JAVA_HOME=/opt/apps/jdk x.xxx.xx/
export SPARK_MASTER_HOST=node-1.51doit.com
将conf目录下的slaves.template重命名为slaves并修改,指定Worker的所在节点
linux201 linux202 linux203
将配置好的spark拷贝到其他节点
scp -r spark-3.0.0-bin-hadoop3.2 linux202: P W D s c p − r s p a r k − 3.0.0 − b i n − h a d o o p 3.2 l i n u x 203 : PWD scp -r spark-3.0.0-bin-hadoop3.2 linux203: PWDscprspark3.0.0binhadoop3.2linux203:PWD

standalone模式是Spark自带的分布式集群模式,不依赖其他的资源调度框架

启动spark
sbin/start-all.sh
sbin/start-all.sh
linux201:7077 spark进程进行rpc通信的端口号
linux201:8080 web管理spark界面

standalone模式参数说明(使用不多,生产模式通常使用 onyarn模式)
conf/spark-env.sh
export SPARK_WORKER_MEMORY=3g 大小
export SPARK_WORKER_CORES=3 核数(并非计算机核数)

Spark-shell的使用
spark-shell是spark中的交互式命令行客户端,可以在spark shell中使用scala编写spark程序
启动后默认创建了SparkContext,别名为sc

启动命令

运行在本地进程
bin/spark-shell
info中master=local[*] (表示运行扎起本地,并未运行在集群上)

运行在集群
前提,启动HDFS /hadoop-3.xxx/sbin/start-dfs.sh(start-all.sh)
先将wordCount放在HDFS的wordCount文件夹下
bin/spark-shell --master spark://linux201:7077

./spark-shell --master spark://linux201:7077 --executor-memory 2g --total-executor-cores 4
./spark-shell --master spark://linux201:7077 --executor-memory 1g --total-executor-cores 7 --dirver-memory 2g

val lines = sc.textFile("hdfs://linux201:9000/wordCount")  
val words = lines.flatMap(_.split(" "))
val wordAndOne = words.map((_, 1))
val reduced = wordAndOne.reduceByKey(_+_)
reduced.sortBy(_._2, false).collect
reduced.saveAsTextFile("hdfs://linux201:9000/out2")

使用Scala编写WordCount程序

建Maven项目,导入依赖

<properties>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <scala.version>2.12.11</scala.version>
    <spark.version>3.0.0</spark.version>
    <hadoop.version>3.2.1</hadoop.version>
    <encoding>UTF-8</encoding>
</properties>

<dependencies>
    <!-- 导入scala的依赖 -->
    <dependency>
        <groupId>org.scala-lang</groupId>
        <artifactId>scala-library</artifactId>
        <version>${scala.version}</version>
    </dependency>

    <!-- 导入spark的依赖,core指的是RDD编程API -->
    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-core_2.12</artifactId>
        <version>${spark.version}</version>
        <!-- 剔除重复的包 -->
    </dependency>



</dependencies>

<build>
    <pluginManagement>
        <plugins>
            <!-- 编译scala的插件 -->
            <plugin>
                <groupId>net.alchim31.maven</groupId>
                <artifactId>scala-maven-plugin</artifactId>
                <version>3.2.2</version>
            </plugin>
            <!-- 编译java的插件 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.5.1</version>
            </plugin>
        </plugins>
    </pluginManagement>
    <plugins>
        <plugin>
            <groupId>net.alchim31.maven</groupId>
            <artifactId>scala-maven-plugin</artifactId>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值