【总结】Spark优化(1)-多Job并发执行
发表于:2025-01-23 作者:千家信息网编辑
千家信息网最后更新 2025年01月23日,Spark程序中一个Job的触发是通过一个Action算子,比如count(), saveAsTextFile()等在这次Spark优化测试中,从Hive中读取数据,将其另外保存四份,
千家信息网最后更新 2025年01月23日【总结】Spark优化(1)-多Job并发执行
Spark程序中一个Job的触发是通过一个Action算子,比如count(), saveAsTextFile()等
在这次Spark优化测试中,从Hive中读取数据,将其另外保存四份,其中两个Job采用串行方式,另外两个Job采用并行方式。将任务提交到Yarn中执行。能够明显看出串行与兵线处理的性能。
每个Job执行时间:
JobID | 开始时间 | 结束时间 | 耗时 |
Job 0 | 16:59:45 | 17:00:34 | 49s |
Job 1 | 17:00:34 | 17:01:13 | 39s |
Job 2 | 17:01:15 | 17:01:55 | 40s |
Job 3 | 17:01:16 | 17:02:12 | 56s |
四个Job都是自执行相同操作,Job0,Job1一组采用串行方式,Job2,Job3采用并行方式。
Job0,Job1串行方式耗时等于两个Job耗时之和 49s+39s=88s
Job2,Job3并行方式耗时等于最先开始和最后结束时间只差17:02:12-17:01:15=57s
代码:
package com.cn.ctripotb;import org.apache.spark.SparkConf;import org.apache.spark.api.java.JavaSparkContext;import org.apache.spark.sql.DataFrame;import org.apache.spark.sql.hive.HiveContext;import java.util.*;import java.util.concurrent.Callable;import java.util.concurrent.Executors;/** * Created by Administrator on 2016/9/12. */public class HotelTest { static ResourceBundle rb = ResourceBundle.getBundle("filepath"); public static void main(String[] args) { SparkConf conf = new SparkConf() .setAppName("MultiJobWithThread") .set("spark.serializer", "org.apache.spark.serializer.KryoSerializer"); JavaSparkContext sc = new JavaSparkContext(conf); HiveContext hiveContext = new HiveContext(sc.sc()); //测试真实数据时要把这里放开 final DataFrame df = getHotelInfo(hiveContext); //没有多线程处理的情况,连续执行两个Action操作,生成两个Job df.rdd().saveAsTextFile(rb.getString("hdfspath") + "/file1",com.hadoop.compression.lzo.LzopCodec.class); df.rdd().saveAsTextFile(rb.getString("hdfspath") + "/file2",com.hadoop.compression.lzo.LzopCodec.class); //用Executor实现多线程方式处理Job java.util.concurrent.ExecutorService executorService = Executors.newFixedThreadPool(2); executorService.submit(new Callable() { @Override public Void call(){ df.rdd().saveAsTextFile(rb.getString("hdfspath") + "/file3",com.hadoop.compression.lzo.LzopCodec.class); return null; } }); executorService.submit(new Callable () { @Override public Void call(){ df.rdd().saveAsTextFile(rb.getString("hdfspath") + "/file4",com.hadoop.compression.lzo.LzopCodec.class); return null; } }); executorService.shutdown(); } public static DataFrame getHotelInfo(HiveContext hiveContext){ String sql = "select * from common.dict_hotel_ol"; return hiveContext.sql(sql); }}
方式
两个
时间
处理
数据
线程
测试
明显
相同
之和
代码
任务
性能
情况
最先
程序
算子
生成
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
服务器面试
如何开发文档的数据库
相城区品牌网络技术服务电话
软件开发工程师项目
在数据库视图中添加列
上海名拓网络技术有限公司
北京互联网科技有哪些
软件开发代码有哪些语言
湖北微型软件开发市场报价
从哪里学习网络技术
网络安全小报精美
计算机网络技术学c语音吗
六安金狮网络技术
比较两个集合差异的数据库
苏州歪猫网络技术有限公司
网络安全黑板报图片2021
手机号码能用到云服务器吗
模板方法模式的数据库实例
sql怎么查收缩数据库的进度
女孩子软件开发好学吗
学网络安全需要编程吗
关于数据库建设技术规范
基于关系数据库的erp
分布式服务器如何管理
服务器hdmi接口什么意思
软件开发行业的工作内容
2019网络安全周知识问答
设计一个无线网络安全协议
新闻类网站怎么存数据库
英雄联盟服务器崩了的段子