一.序言
这里介绍一下我们对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 快很多的
最后:这是分享的一简单经验,不好的地方指出,非常感谢
相关推荐
内容概要:由于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
腾讯TDW平台的介绍与应用。 数据引擎由TDW-Hive切换到TDW-Spark-SQL的实践。 TDW-Spark-SQL的功能完善,高可用和稳定性加强,性能和成本优化经验分享。
Spark SQL 多维聚合分析应用案例 Spark Streaming源码阅读 动态发现新增分区 Dstream join 操作和 RDD join 操作的区别 PIDController源码赏析及 back pressure 实现思路 Streaming Context重点摘要 checkpoint...
6.SparkSQL(下)--Spark实战应用.pdf 6.SparkSQL(中)--深入了解运行计划及调优.pdf 7.SparkStreaming(上)--SparkStreaming原理介绍.pdf 7.SparkStreaming(下)--SparkStreaming实战.pdf 8.SparkMLlib(上)--...
您可以使用以下命令将连接器添加到Spark应用程序:spark-shell,pyspark或spark-submit $SPARK_HOME/bin/spark-shell --packages com.singlestore:singlestore-spark-connector_2.11:3.0.7-spark-2.4.4 我们发布了...
包含spark快速入门、spark-sql介绍和应用、spark-streaming介绍和应用、spark项目实战等
6.SparkSQL(下)--Spark实战应用.pdf 6.SparkSQL(中)--深入了解运行计划及调优.pdf 7.SparkStreaming(上)--SparkStreaming原理介绍.pdf 7.SparkStreaming(下)--SparkStreaming实战.pdf 8.SparkMLlib(上)--...
一个简单的应用程序,用于演示Spark核心和Spark SQL组件的功能。 提供与分析相关的Morning @ Lohika事件: 公司的唯一参与者 最忠实的参与者 参加者按职位 等等。 特征: 简单的基于HTTP的API 文件系统:本地...
分析纽约高中数据 Curso Apache Spark(TM)SQL用于数据分析的Databricks no Coursera。 面食加工的意大利面食。面食。...应用的Spark SQL 数据存储与优化 带有Spark SQL的Delta Lake SQL编码挑战
6.SparkSQL(下)--Spark实战应用.pdf 6.SparkSQL(中)--深入了解运行计划及调优.pdf 7.SparkStreaming(上)--SparkStreaming原理介绍.pdf 7.SparkStreaming(下)--SparkStreaming实战.pdf 8.SparkMLlib(上)--...
此应用程序(CSJB)是Spark应用程序,它将在Spark SQL中自动将所有Cassandra表注册为架构RDD,并启动嵌入式Apache HiveThriftServer,以使这些RDD准备通过“ jdbc:hive2”协议使用。 使用此网桥/服务器,您可以...
Spark SQL系统查询优化方法的研究,杨烨蔓,双锴,目前Spark SQL系统在面对海量数据(TB)的查询时,无法在短时间内得到查询结果,查询延时会大大降低用户的使用体验。本文针对当前Spar
建造如果您想自己构建应用程序,则需要执行以下任务(必须事先安装npn 、 bower和grunt-cli ): 安装本地项目的npn工具。 运行以下命令还将安装所需的凉亭组件npm install 然后运行grunt任务。 如果一切顺利,生产...
本文详细的描述了sparksql的一些应用,带你快速的了解
元数据,例如spark应用程序名称 安装 建立罐子: $ ./gradlew shadowJar 将输出从build/lib/jars复制到您的集群。 请注意,如果您打算使用关联的报告器,则您将需要在火花类路径中具有适当的AWS开发工具包jar。 ...
该存储库是 Spark 生态系统各个组件(包括 Spark-Core、Spark-Streaming、Spark-SQL、Spark-MLLib)的 Spark 示例和用例实现的集合。 这个存储库包含什么? Spark核心示例 Spark 流示例 Spark 核心用例 Spark 流...
大规模游戏社交网络节点相似性算法及其应用-6-5 Spark SQL 在平安产险的应用
spark-pac4j项目是用于Sparkjava Web应用程序和Web服务的简单而强大的安全性库,它支持身份验证和授权,还支持注销和会话固定和CSRF保护等高级功能。 它基于Java 8,Spark 2.9和v4 。 它在Apache 2许可下可用。 代表...
通过学习Spark,我了解了其基本概念和核心组件,如RDD(弹性分布式数据集)、Spark SQL、Spark Streaming和MLlib等。我学会了使用Spark编写分布式的数据处理程序,并通过调优技巧提高了程序的性能。在实践过程中,我...
Spark SQL Core 封装 Catalyst,向应用程序提供 SparkSession、Dataset、 DataFrame 等 API(DataFrame 是 Dataset[Row]的别名);Spark SQL Hive 则提供操作 Hive 的 接口。本文主要关注查询执行过程,不涉及 ...