使用IDEA开发WordCount程序(scala语言)

使用IDEA开发WordCount程序(scala语言),第1张

能力目标

  1. 能够在Linux下运行Spark程序
  2. 能够使用Spark shell命令
  3. 能够在IDEA配置Spark运行环境
  4. 能够使用IDEA开发WordCount程序

文章目录
  • 前言
  • 一、认识Spark架构和原理
    • 1.基本概念
    • 2.集群运行架构
  • 二、启动Spark-Shell
    • 1.说明
    • 2.运行Spark-Shell读取HDFS文件
  • 三、IDEA开发WordCount程序
    • 1.创建Maven项目
    • 2.添加Spark相关依赖,打包插件
    • 3.编写代码,查看结果


前言

点赞+关注+评论=养成好习惯

提示:以下是本篇文章正文内容,下面案例可供参考

一、认识Spark架构和原理 1.基本概念
名称含义
ApplicationSpark上运行的应用。Application中包含一个驱动器进程和集群上的多个执行器进程。
Driver Program运行main()方法并创建SparkContext的进程
Cluster Manager用于在集群上申请资源的外部服务(如:独立部署的集群管理器、Mesos或者Yarn)
Worker Node集群上运行应用程序代码的任意一个节点
Executor在集群工作节点上为某个应用启动的工作进程,该进程负责运行计算任务,并为应用程序存储数据
Task运行main()方法并创建SparkContext的进程
Job一个并行计算作业,由一组任务组成,并由Spark的行动算子(如:save、collect)触发启动
Stage每个Job可划分为更小的Task集合,每组任务被称为Stage
2.集群运行架构
名称作用
SparkContext掌控了所有Spark的生命活动,统筹全局,除了具体的任务在executor中执行,其他的任务调度、提交、监控、RDD管理
Cluster Manager负责整个集群的统一资源管理
WorkerWorker节点中的Executor是应用执行的主要进程,内部含有多个Task线程以及内存空间

步骤1:当一个Spark应用被提交时,根据提交参数创建Driver进程,Driver进程初始化SparkContext对象,由SparkContext负责和Cluster Manager的通信以及资源的申请、任务的分配和监控等。

步骤2:Driver进程向Cluster Manager申请资源,Cluster Manager接收到Application的注册请求后,会使用自己的资源调度算法,在Spark集群的Worker节点上,通知Worker为应用启动多个Executor。

步骤3:Executor创建后,会向Cluster Manager进行资源及状态的反馈,便于Cluster Manager对Executor进行状态监控,如果监控到Executor失败,则会立刻重新创建。

步骤4:Executor会向SparkContext反向注册申请Task。

步骤5:Task Scheduler将Task发送给Worker进程中的Executor运行并提供应用程序代码。

步骤6:当程序执行完毕后写入数据,Driver向Cluster Manager注销申请的资源。

Spark应用在集群上作为独立的进程组来运行,具体运行流程如下所示。

二、启动Spark-Shell 1.说明 在spark/bin目录中,执行下列命令进入Spark-Shell交互环境 bin/spark-shell --master

–master”表示指定当前连接的Master节点
用于指定Spark的运行模式
可取的详细值如下所示:

参数相关说明
local使用一个Worker线程本地化运行Spark
local[*]本地运行Spark,工作线程数量与本机CPU逻辑核心数量相同
local[N]使用N个Worker线程本地化运行Spark
spark://host:portStandalone模式下,连接到指定的Spark集群,默认端口7077
yarn-client以客户端模式连接Yarn集群,集群位置可在HADOOP_CONF_DIR环境变量中配置
yarn-cluster以集群模式连接Yarn集群,集群位置可在HADOOP_CONF_DIR 环境变量中配置
mesos://host:port连接到指定的Mesos集群。默认接口是5050
直接在本地启动交互式spark命令行
[root@hadoop spark]# bin/spark-shell

使用一个Worker线程本地化运行Spark
[root@hadoop spark]# bin/spark-shell  --master  local

Standalone模式下,连接到指定的Spark集群,默认端口7077
[root@hadoop spark]# bin/spark-shell  --master  spark://hadoop:7077
2.运行Spark-Shell读取HDFS文件
(1)整合spark与HDFS
确定spark-env.sh添加了下面参数
export HADOOP_CONF_DIR=/opt/hadoop-2.7.1/etc/hadoop

(2)启动Hadoop、Spark服务

(3)启动Spark-Shell编写程序
[root@hadoop spark]# bin/spark-shell  --master  local
运行读取hdfs文件并统计单词个数的命令。
Spark-Shell本身就是一个Driver,它会初始化一个SparkContext对象为sc

(4)退出Spark-Shell客户端
scala> :quit

三、IDEA开发WordCount程序

本地模式执行Spark程序

1.创建Maven项目

创建一个名为“spark_chapter02”的Maven项目,然后在main和test目录下分别创建一个名称为scala的文件夹。

2.添加Spark相关依赖,打包插件

设置依赖的版本号
添加了Scala、Hadoop和Spark相关的依赖,pom.xml如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>Maven</artifactId>
    <version>1.0-SNAPSHOT</version>
    <properties>
        <scala.version>2.11.8</scala.version>
        <hadoop.version>2.7.1</hadoop.version>
        <spark.version>2.2.0</spark.version>
    </properties>
    <!--scala-->
    <dependencies>
        <dependency>
            <groupId>org.scala-lang</groupId>
            <artifactId>scala-library</artifactId>
            <version>${scala.version}</version>
        </dependency>
        <!--spark-->
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-core_2.11</artifactId>
            <version>${spark.version}</version>
        </dependency>
        <!--Hadoop-->
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-client</artifactId>
            <version>${hadoop.version}</version>
        </dependency>
    </dependencies>
</project>
3.编写代码,查看结果

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/725299.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-26
下一篇 2022-04-26

发表评论

登录后才能评论

评论列表(0条)

保存