Spark工程化代码 - 三层架构代码

Spark使用三层架构代码,分解复杂度,工程化管理代码

三层架构分为控制层、服务层、持久化层

具体实现如下(以wordcount为案例):

一、application包

application包是管理应用程序的包。

这些类包含了应用程序的业务逻辑和功能实现。这些类通常会调用DAO层和Service层的方法,以完成具体的业务功能,,Application包通常位于应用层中,用于实现具体的业务逻辑和功能,提供给用户使用。

WordCountApplication.scala

package com.hadoop.spark.core.framework.application

import com.hadoop.spark.core.framework.common.TApplication
import com.hadoop.spark.core.framework.controller.WordCountController

object WordCountApplication extends App with TApplication{

    // 启动应用程序
    start(){
        val controller = new WordCountController()
        controller.dispatch()
    }

}

在Scala中,App类是预定义的类,用于在应用程序的入口点执行代码。它是一个没有参数的特质(trait),可以用于在Scala程序中定义主函数。

使用App特质,可以将主函数和相关的代码组织在一起,并且不需要显式地定义main方法。当Scala程序运行时,App特质中的代码会被自动执行。

二、controller包

controller管理控制层的代码。Controller层是管理整个Spark集群的控制器,它可以控制和监视整个集群的运行状态,包括节点的管理、任务的管理、资源的分配等。

这里主要就是执行操作。

WordCountController.scala

package com.hadoop.spark.core.framework.controller

import com.hadoop.spark.core.framework.common.TController
import com.hadoop.spark.core.framework.service.WordCountService


/**
  * 控制层
  */
class WordCountController extends TController {

    private val wordCountService = new WordCountService()

    // 调度
    def dispatch(): Unit = {
        // TODO 执行业务操作
        val array = wordCountService.dataAnalysis()
        array.foreach(println)
    }
}

三、service包

service包是管理服务层的代码包,service包是一个用于存放业务逻辑代码的包。

WordCountService.scala

package com.hadoop.spark.core.framework.service

import com.hadoop.spark.core.framework.common.TService
import com.hadoop.spark.core.framework.dao.WordCountDao
import org.apache.spark.rdd.RDD

/**
  * 服务层
  */
class WordCountService extends TService {

    private val wordCountDao = new WordCountDao()

    // 数据分析
    def dataAnalysis() = {

        val lines = wordCountDao.readFile("datas/word.txt")
        val words: RDD[String] = lines.flatMap(_.split(" "))
        val wordToOne = words.map(word=>(word,1))
        val wordToSum: RDD[(String, Int)] = wordToOne.reduceByKey(_+_)
        val array: Array[(String, Int)] = wordToSum.collect()
        array
    }
}

四、dao包

dao包是管理持久层的代码包,DAO包是一种数据访问对象(Data Access Object)的包,它通常用于封装数据访问层的代码,位于业务逻辑层和持久化数据层之间。

DAO包通常位于持久化层中,用于与数据库进行交互,实现数据的持久化操作。

WordCountDao .scala

package com.hadoop.spark.core.framework.dao

import com.hadoop.spark.core.framework.common.TDao

// 持久层
class WordCountDao extends TDao{

}

五、common包

common包是一个用于存放公共代码的包,common包里的代码通常由公共类(共同、重复属性被抽取)和工具类组成,这些类和工具类被其他层和模块共享使用,以提供公共的功能和服务。

TApplication.scala

package com.hadoop.spark.core.framework.common

import com.hadoop.spark.core.framework.controller.WordCountController
import com.hadoop.spark.core.framework.util.EnvUtil
import org.apache.spark.{SparkConf, SparkContext}

trait TApplication {

    def start(master:String ="local[*]", app:String = "Application")( op : => Unit ): Unit = {
        val sparConf = new SparkConf().setMaster(master).setAppName(app)
        val sc = new SparkContext(sparConf)
        EnvUtil.put(sc)

        try {
            op
        } catch {
            case ex => println(ex.getMessage)
        }

        // TODO 关闭连接
        sc.stop()
        EnvUtil.clear()
    }
}

TController.scala

package com.hadoop.spark.core.framework.common

trait TController {
    def dispatch(): Unit
}

TService.scala

package com.hadoop.spark.core.framework.common

trait TService {
    def dataAnalysis():Any
}

TDao.scala

package com.hadoop.spark.core.framework.common

import com.hadoop.spark.core.framework.util.EnvUtil

trait TDao {

    def readFile(path:String) = {
        EnvUtil.take().textFile(path)
    }
}

六、util包

util包是一个用于存放工具类的包,它通常用于提供一些常用的工具和函数,以方便开发人员在程序中使用(区别common包:util包在哪都能用)。util包里的工具类通常包括日期处理、字符串操作、数组操作、集合操作等。

EnvUtil.scala

package com.hadoop.spark.core.framework.util

import org.apache.spark.SparkContext

object EnvUtil {

    private val scLocal = new ThreadLocal[SparkContext]()

    def put( sc : SparkContext ): Unit = {
        scLocal.set(sc)
    }

    def take(): SparkContext = {
        scLocal.get()
    }

    def clear(): Unit = {
        scLocal.remove()
    }
}

七、bean包

bean包存放的是一些实体类,规范要求这些类必须具有一个无参构造方法,所有的属性必须用getter和setter方法来访问。

以上通过学习和阅读网上资料,对你们的不一定能起到帮助,但是可以给你们提供参考。如有雷同,请联系!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 使用spark-submit命令提交Spark应用程序到YARN集群模式,可以按照以下步骤进行操作: 1. 确保已经安装了Spark和YARN,并且配置了正确的环境变量。 2. 编写Spark应用程序代码,并将其打包成jar包。 3. 打开终端,输入以下命令: ``` spark-submit --class <main-class> --master yarn --deploy-mode cluster <jar-file> <args> ``` 其中,`<main-class>`是Spark应用程序的主类名,`<jar-file>`是打包好的jar包路径,`<args>`是传递给应用程序的参数。 4. 提交命令后,Spark会将应用程序提交到YARN集群中,并在集群中启动应用程序的Driver程序。 5. 可以通过YARN的Web界面或命令行工具来监控应用程序的运行状态和日志输出。 注意事项: - 在提交应用程序时,需要指定`--master yarn`和`--deploy-mode cluster`参数,以告诉Spark将应用程序提交到YARN集群中运行。 - 如果应用程序需要访问HDFS或其他外部资源,需要在应用程序中指定相应的路径或URL,并确保YARN集群中的节点也能够访问这些资源。 - 在提交应用程序时,可以通过`--num-executors`、`--executor-memory`、`--executor-cores`等参数来指定应用程序在集群中的资源分配情况。 ### 回答2: Spark是一个快速、通用、可扩展的大数据处理引擎,能够处理包括离线批处理、实时流处理、图形处理等多种数据处理场景。其中,Spark中常见的数据处理方式是通过RDD(弹性分布式数据集)来进行计算处理。 对于Spark应用的部署,有两种方式:一种是通过Spark Standalone模式,将Spark应用作为单一进程的方式运行;另一种则是通过YARN模式,将Spark应用分布到一组计算节点中去运行。在这里,我们介绍一种常见的部署方式:通过spark-submit命令将应用提交到YARN集群上运行。 spark-submit命令是Spark提供的专门用于提交应用的命令,根据不同的运行模式,有不同的参数指定方式。其中,将应用部署到YARN模式的一般命令如下: ``` ./bin/spark-submit \ --class [app-class] \ --master yarn \ --deploy-mode cluster \ [--executor-memory <memory>] \ [--num-executors <num>] \ [path-to-app-jar] [app-arguments] ``` 其中,各参数含义如下: 1. --class:指定应用的入口类。 2. --master:指定Spark应用运行在YARN模式下。 3. --deploy-mode:指定应用在YARN模式下的部署方式,有两种模式:client和cluster。其中,client模式是指在本地运行应用,而cluster模式则是将应用提交到YARN集群上运行。 4. --executor-memory:指定每个executor占用的内存大小。 5. --num-executors:指定在YARN集群上运行的executor数目。 6. [path-to-app-jar]:指定应用程序的jar包路径。 7. [app-arguments]:应用的命令行参数。 需要注意的是,将应用提交到YARN集群上运行时,需要提前从HDFS中将数据加载到内存中,否则可能会降低应用的性能。在代码中,可以通过使用SparkContext的textFile等方法,将HDFS中的数据读取到RDD中进行处理。 总之,通过spark-submit命令将Spark应用部署到YARN集群上运行,可以充分利用集群资源,实现高效处理大规模数据。而在代码编写方面,需要注意处理好HDFS中数据的读取和分布式操作等问题。 ### 回答3: Spark是一种开源的大数据处理框架,其可以通过Spark-submit进行提交。Spark-submit是一个命令行工具,可用于将Spark应用程序提交到集群中运行。它支持多种模式,包括local模式、standalone模式和yarn-cluster模式等。其中,在yarn-cluster模式中,Spark应用程序将在YARN集群上运行。 在使用Spark-submit提交Spark应用程序到YARN集群的时候,需要考虑以下几个方面: 1. 配置参数 首先,需要指定Spark-submit的参数,例如--class参数用于指定要运行的主类。在YARN集群上运行Spark应用程序需要使用--master参数,并将其设置为yarn-cluster。同时,可以添加其它的参数,例如--num-executors用于设置执行程序的数量,--executor-memory用于设置每个执行程序的内存。 示例: spark-submit --class com.test.TestApp \ --master yarn-cluster \ --num-executors 5 \ --executor-memory 4G \ /path/to/your/application.jar 2. 配置环境 为了让Spark应用程序在YARN集群上运行,需要为其配置适当的环境。需要确保所有必要的依赖项都已安装,并将其添加到Spark-submit命令中。在集群节点上,需要确保Spark和Hadoop已正确配置并运行。 3. 访问资源 将应用程序提交到YARN集群后,需要确保它能够访问必要的资源。这些资源包括存储在HDFS中的数据和应用程序所需的库和文件。如果应用程序需要访问外部资源,则还需要配置适当的访问权限。 总的来说,Spark-submit提交yarn-cluster模式是一种将Spark应用程序提交到YARN集群上运行的方法。在提交之前,需要考虑配置参数、配置环境和访问资源,以确保应用程序能够正确运行并访问所需的资源和库。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值