`
greemranqq
  • 浏览: 976955 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

spark-sql应用

阅读更多

一.序言

     这里介绍一下我们对spark-sql 的一些简单应用。

  

二.业务描述

     我们需要对大量数据进行分析,包含历史的数据,传统数据库即使用分库分表的中间件,也只能满足基本查询,对于多表关连的分析是不太友好的,因此我们将数据放到hadoop集群,但是并不是所有的JAVA 程序员都能对hadoop 或者hive 进行开发,为了屏蔽这种差异,因此我们在几个分析软件上做了对比,这里就不介绍了,最后选择了spark。

 

三.开发流程

     1.服务器上我们启动了hive 的metastore 信息,让spark 使用。

 

      2.开发了简单的jar 进行使用,大概有以下类:

   

public class SparkContextWrapper {
    /**
     * sc 对象
     */
    private  JavaSparkContext sparkContext;
    /**
     * hive sql 查询
     */
    private  HiveContext hiveContext;
    /**
     * 配置信息
     */
    private SparkConf conf;
    // 初始化spark
    private synchronized void initJavaSparkContext(){...}
    // 初始化hive
    private synchronized HiveContext initHiveContext(){...}
   
    // 其他环境检查  关闭 重启 等方法  

}

    

   2.2 类似于sqlTemplate 模板

   

@Component
public class SqlContextWrapper {
    // 获取对象
    @Autowired
    SparkContextWrapper sparkContextWrapper;
   
    // 执行sql
    public DataFrame sql(String sql){}

    //  缓存表
    public DataFrame cacheTable(String sql,String tableName){}
   
    // 清空表,返回结果集 等等方法

}

 

    2.3 事务控制,支持关闭 和长连接的方式。

   

/**
 * spark 事务管理器
 * 提供初始化和stop 方法
 * Created by qqr on 15/12/18.
 */
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface SparkHiveSqlTransactional {
 /**
     * 默认延迟关闭时间
     * @return
     */
    int delayTime() default 5;

    /**
     * 是否延迟关闭
     * @return
     */
    boolean isDelayStop() default true;
}

    

    2.4 事务拦截器

   

/**
 * spring 事务管理器
 * Created by qqr on 15/12/18.
 */
@Component
@Aspect
@Log4j
public class SparkTransactionManager {
    
    @Autowired
    private SparkContextWrapper sparkContextWrapper;

    // 监控
    @Autowired
    private MonitorUtil monitorUtil;

    @Around("@annotation(com.xxx.SparkHiveSqlTransactional)")
    @Transactional()
    private Object sparkTx(ProceedingJoinPoint pj) throws Throwable {
    ...
}
    

 

    2.5 还包含监控,异常,任务管理等等就不贴了。

 

 

三.使用配置

    3.1 用spring 注册环境变量

    

<!-- spring 需要的参数,居然参数解释 看文档 -->
<bean id="evnInit" class="com.xxx.EnvInit">
        <property name="master" value="${spark.master}"/>
        <property name="appName" value="${spark.app.name}"/>
        <property name="sparkConfPrams">
            <map>
                <entry key="spark.executor.memory" value="1G" />
                <entry key="spark.cores.max" value="4" />
                <entry key="spark.worker.cleanup.enabled" value="true" />
                <entry key="spark.worker.cleanup.interval" value="120" />
                <entry key="spark.akka.frameSize" value="256" />
                <entry key="spark.scheduler.mode" value="FAIR" />
            </map>
        </property>
        <property name="sparkMonitor" ref="sparkMonitor" />
        <property name="debugModel" value="${debug.model}"/>
    </bean>

 

    3.2 使用

   

@Scheduled(cron = "0 15 07 01 * ?")
    @SparkHiveSqlTransactional
    public void autoRun() {
        // 执行任务
        runTask();
    }

 

    

  private void runTask(){
        StringBuilder sql = new StringBuilder("select * from test limit 1");
         // 继承一个 baseDao
         List<Row> rowList = sql(sql.toString());
         // 返回值想干嘛干嘛
           
        }
    }

 

 

四.小结

     1.关于spark 的配置已经很多了,这里不介绍。

     2.这样能让java 程序员直接对大数据进行操作,还是比较方便的,当然需要对他们的SQL 进行一些监控,毕竟效率需要考虑的,监控可以按需求开发

     3.任务和直接接入任务调度。

 

     4.问题:

      4.1    开始为了节约资源,每次跑完了,一定时间内没有其他任务 就把sc 关闭了,这样会导致perm 区很多,注意内存。

      4.2   使用长连接可以解决上面问题,但是有些浪费资源。服务器的最好是8G,我们是4G,也够了,spark 的自己看着办吧。

      4.3 最后是长连接和断开的方式混用的模式,spark挂了,重启可以重新跑

      4.4 sparkUI  是很占perm 区,特别是短链接的时候,可以改小的,默认是1000

      4.5 因为有RDD 和内存表的概念,比hive  快很多的

最后:这是分享的一简单经验,不好的地方指出,非常感谢

    

0
3
分享到:
评论

相关推荐

    Spark-Sql源码解析

    * 高灵活性:Spark-Sql 源码解析可以支持多种数据源和文件格式,以便适应不同的应用场景。 * 高扩展性:Spark-Sql 源码解析可以轻松地集成到 Spark 集群中,以便提供一个完整的数据处理解决方案。 Spark-Sql 源码...

    Python大数据分析&人工智能教程 - Spark-SQL编程实例(含源码和学习思维导图)

    与Spark Core的无缝集成:可以在编写RDD应用程序时,集成Spark-SQL完成逻辑实现。 统一的数据访问方式:提供标准化的SQL查询。 Hive的继承:通过内嵌Hive或连接外部Hive,支持Hive语法。 标准化的连接方式:支持JDBC...

    spark-3.1.2.tgz & spark-3.1.2-bin-hadoop2.7.tgz.rar

    - 运行应用:使用Spark Shell或提交Spark应用程序到集群执行。 6. 开发与交互: - 使用Scala、Java、Python或R语言编写Spark应用。 - 使用SparkSubmit工具提交应用程序到集群。 - Spark Shell提供了一个交互式...

    spark-2.4.8-bin-hadoop2.7.tgz

    2. **Spark SQL**:支持结构化和半结构化数据处理,可以与Hive、Parquet、JSON等多种数据源进行交互,同时提供了DataFrame和Dataset API,使得SQL和DataFrame/Dataset之间的转换更为方便。 3. **Spark Streaming**:...

    spark-3.2.2-bin-3.0.0-cdh6.3.2

    内容概要:由于cdh6.3.2的spark版本为2.4.0,并且spark-sql被阉割,现基于cdh6.3.2,scala2.12.0,java1.8,maven3.6.3,,对spark-3.2.2源码进行编译 应用:该资源可用于cdh6.3.2集群配置spark客户端,用于spark-sql

    spark-assembly-1.5.2-hadoop2.6.0.jar

    Spark-assembly-1.5.2-hadoop2.6.0.jar是Spark中的一个重要组件,它是Spark的核心库,包含了所有Spark模块的合并版本,便于用户在运行Spark应用时进行一次性部署。本文将深入解析这个组件的关键知识点。 1. Spark...

    spark-2.4.7-bin-hadoop2.6.tgz

    4. **Spark SQL**:Spark SQL是Spark的一个模块,用于处理结构化数据,它集成了SQL查询与DataFrame API,提供了一种统一的方式来处理结构化和半结构化数据。 5. **Spark Streaming**:Spark Streaming提供了微...

    spark-1.6.0-bin-hadoop2.6.tgz

    - **Spark SQL**:Spark的SQL模块,支持使用SQL查询DataFrame,同时兼容Hive的元数据和SQL语法。 - **Spark Streaming**:用于实时流数据处理,通过将数据流划分为微批次进行处理。 - **MLlib**:机器学习库,包含...

    spark-3.1.3-bin-without-hadoop.tgz

    Spark的核心特性包括支持批处理、交互式查询(通过Spark SQL)、实时流处理(通过Spark Streaming)以及机器学习(通过MLlib)和图计算(通过GraphX)。它采用了弹性分布式数据集(Resilient Distributed Datasets, ...

    mastering-spark-sql.pdf

    文档中还提到了Spark SQL应用程序开发的基础知识,包括如何使用SparkSession作为Spark SQL的入口点,以及如何使用Fluent API构建SparkSession。其中,SparkSession是Spark 2.0版本引入的新的SQL执行入口,它整合了...

    spark-3.2.4-bin-hadoop3.2-scala2.13 安装包

    8. **生态系统**: Spark的生态非常丰富,包括DataFrame/Dataset API、Spark SQL、Spark Streaming、GraphX(图计算)、MLlib(机器学习库)和SparkR(R语言接口)。这些组件可以组合使用,满足各种大数据处理需求。 ...

    spark-2.2.2-bin-hadoop2.7.tgz

    此外,它内置了Spark SQL模块,用于执行SQL查询,同时支持DataFrame和Dataset操作,以及Spark Streaming用于实时数据处理。 在这个压缩包中,"spark-2.2.2-bin-hadoop2.7"目录下会包含以下关键组件: 1. `bin`:...

    spark-2.3.1-bin-hadoop2.7.zip

    2. **Spark SQL**:Spark SQL允许用户使用SQL或者DataFrame/Dataset API来处理结构化和半结构化数据。它与Hive兼容,可以无缝地读取Hive表并进行查询。 3. **Spark Streaming**:提供了一个高级抽象来处理实时数据流...

    spark-3.2.1-bin-hadoop2.7.tgz

    2. Spark SQL:提供了SQL接口和DataFrame/Dataset API,使得开发人员可以方便地进行结构化和半结构化数据处理。 3. Spark Streaming:支持实时流数据处理,利用微批处理实现低延迟的数据处理。 4. MLlib:机器学习库...

    spark-2.4.0-bin-hadoop2.7.tgz

    在实际应用中,Spark常被用于大数据分析、实时数据处理、机器学习模型训练和图数据分析。由于其内存计算的特点,相比Hadoop MapReduce,Spark在迭代计算和交互式查询上有显著优势。此外,Spark还支持多种数据源,如...

    spark-3.0.0-bin-hadoop2.7.tgz

    Spark主要由几个核心组件构成,包括Spark Core、Spark SQL、Spark Streaming、MLlib(机器学习库)和GraphX(图处理)。Spark Core提供了分布式任务调度、内存管理以及错误恢复等基础功能,是其他组件的基础。 2. ...

    spark-assembly-1.5.2-hadoop2.6.0jar包

    Spark-assembly-1.5.2-hadoop2.6.0.jar是Apache Spark的一个关键组件,主要用于在Scala环境中开发Spark应用程序。这个特定的版本(1.5.2)与Hadoop 2.6.0兼容,这意味着它可以无缝地运行在支持Hadoop 2.6.0的集群上...

    spark-2.3.4-bin-hadoop2.7.tgz

    Pyspark提供了一种与Python交互的方式来创建Spark应用,它支持DataFrame和Spark SQL,使得数据处理变得更加直观和易于理解。Python社区的广泛支持使得pyspark成为很多数据分析项目的首选工具。 在安装"spark-2.3.4-...

    spark-sql入门

    Spark SQL是Apache Spark项目的一部分,它是处理结构化数据的强大工具,尤其在大数据分析领域中广泛应用。Spark SQL结合了Spark核心的高性能计算能力和SQL查询的便利性,使得开发人员能够使用SQL或者DataFrame API来...

    spark-3.2.0-bin-hadoop3-without-hive

    总结来说,“spark-3.2.0-bin-hadoop3-without-hive”是一个专注于 Spark 与 Hadoop 3 基础集成的版本,它提供了最新的 Spark 特性,如优化的 SQL 引擎和 DataFrame API,同时也兼容 Hadoop 3 的诸多改进。...

Global site tag (gtag.js) - Google Analytics