一.序言
这里介绍一下我们对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 快很多的
最后:这是分享的一简单经验,不好的地方指出,非常感谢
相关推荐
* 高灵活性:Spark-Sql 源码解析可以支持多种数据源和文件格式,以便适应不同的应用场景。 * 高扩展性:Spark-Sql 源码解析可以轻松地集成到 Spark 集群中,以便提供一个完整的数据处理解决方案。 Spark-Sql 源码...
与Spark Core的无缝集成:可以在编写RDD应用程序时,集成Spark-SQL完成逻辑实现。 统一的数据访问方式:提供标准化的SQL查询。 Hive的继承:通过内嵌Hive或连接外部Hive,支持Hive语法。 标准化的连接方式:支持JDBC...
- 运行应用:使用Spark Shell或提交Spark应用程序到集群执行。 6. 开发与交互: - 使用Scala、Java、Python或R语言编写Spark应用。 - 使用SparkSubmit工具提交应用程序到集群。 - Spark Shell提供了一个交互式...
2. **Spark SQL**:支持结构化和半结构化数据处理,可以与Hive、Parquet、JSON等多种数据源进行交互,同时提供了DataFrame和Dataset API,使得SQL和DataFrame/Dataset之间的转换更为方便。 3. **Spark Streaming**:...
内容概要:由于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中的一个重要组件,它是Spark的核心库,包含了所有Spark模块的合并版本,便于用户在运行Spark应用时进行一次性部署。本文将深入解析这个组件的关键知识点。 1. Spark...
4. **Spark SQL**:Spark SQL是Spark的一个模块,用于处理结构化数据,它集成了SQL查询与DataFrame API,提供了一种统一的方式来处理结构化和半结构化数据。 5. **Spark Streaming**:Spark Streaming提供了微...
- **Spark SQL**:Spark的SQL模块,支持使用SQL查询DataFrame,同时兼容Hive的元数据和SQL语法。 - **Spark Streaming**:用于实时流数据处理,通过将数据流划分为微批次进行处理。 - **MLlib**:机器学习库,包含...
Spark的核心特性包括支持批处理、交互式查询(通过Spark SQL)、实时流处理(通过Spark Streaming)以及机器学习(通过MLlib)和图计算(通过GraphX)。它采用了弹性分布式数据集(Resilient Distributed Datasets, ...
文档中还提到了Spark SQL应用程序开发的基础知识,包括如何使用SparkSession作为Spark SQL的入口点,以及如何使用Fluent API构建SparkSession。其中,SparkSession是Spark 2.0版本引入的新的SQL执行入口,它整合了...
8. **生态系统**: Spark的生态非常丰富,包括DataFrame/Dataset API、Spark SQL、Spark Streaming、GraphX(图计算)、MLlib(机器学习库)和SparkR(R语言接口)。这些组件可以组合使用,满足各种大数据处理需求。 ...
此外,它内置了Spark SQL模块,用于执行SQL查询,同时支持DataFrame和Dataset操作,以及Spark Streaming用于实时数据处理。 在这个压缩包中,"spark-2.2.2-bin-hadoop2.7"目录下会包含以下关键组件: 1. `bin`:...
2. **Spark SQL**:Spark SQL允许用户使用SQL或者DataFrame/Dataset API来处理结构化和半结构化数据。它与Hive兼容,可以无缝地读取Hive表并进行查询。 3. **Spark Streaming**:提供了一个高级抽象来处理实时数据流...
2. Spark SQL:提供了SQL接口和DataFrame/Dataset API,使得开发人员可以方便地进行结构化和半结构化数据处理。 3. Spark Streaming:支持实时流数据处理,利用微批处理实现低延迟的数据处理。 4. MLlib:机器学习库...
在实际应用中,Spark常被用于大数据分析、实时数据处理、机器学习模型训练和图数据分析。由于其内存计算的特点,相比Hadoop MapReduce,Spark在迭代计算和交互式查询上有显著优势。此外,Spark还支持多种数据源,如...
Spark主要由几个核心组件构成,包括Spark Core、Spark SQL、Spark Streaming、MLlib(机器学习库)和GraphX(图处理)。Spark Core提供了分布式任务调度、内存管理以及错误恢复等基础功能,是其他组件的基础。 2. ...
Spark-assembly-1.5.2-hadoop2.6.0.jar是Apache Spark的一个关键组件,主要用于在Scala环境中开发Spark应用程序。这个特定的版本(1.5.2)与Hadoop 2.6.0兼容,这意味着它可以无缝地运行在支持Hadoop 2.6.0的集群上...
Pyspark提供了一种与Python交互的方式来创建Spark应用,它支持DataFrame和Spark SQL,使得数据处理变得更加直观和易于理解。Python社区的广泛支持使得pyspark成为很多数据分析项目的首选工具。 在安装"spark-2.3.4-...
Spark SQL是Apache Spark项目的一部分,它是处理结构化数据的强大工具,尤其在大数据分析领域中广泛应用。Spark SQL结合了Spark核心的高性能计算能力和SQL查询的便利性,使得开发人员能够使用SQL或者DataFrame API来...
总结来说,“spark-3.2.0-bin-hadoop3-without-hive”是一个专注于 Spark 与 Hadoop 3 基础集成的版本,它提供了最新的 Spark 特性,如优化的 SQL 引擎和 DataFrame API,同时也兼容 Hadoop 3 的诸多改进。...