【总结】Spark优化(1)-多Job并发执行
发表于:2024-11-20 作者:千家信息网编辑
千家信息网最后更新 2024年11月20日,Spark程序中一个Job的触发是通过一个Action算子,比如count(), saveAsTextFile()等在这次Spark优化测试中,从Hive中读取数据,将其另外保存四份,
千家信息网最后更新 2024年11月20日【总结】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安全错误
数据库的锁怎样保障安全
概念数据库设计
网络安全风险态势感知系统
邵阳长沙会员管理系统软件开发
三级网络技术网络如何汇聚
惠州服务器机柜批发
牡丹江软件开发培训
多服务器远程管理软
关于网络安全的知识题库
网络技术应用教材选修三
软件开发项目人力投入
cod17玩什么服务器好
combox动态加载数据库
跨数据库怎么查询
佛山游戏软件开发公司招聘
网络安全管理第七章
创建数据库及数据库表
数据库服务启动和停止的方法
高级软件开发工程师定义
计算机网络安全职业目标设计
民生山西服务器故障
调查问卷数据库怎么设计
腾讯云服务器购买及域名注册
全民奇迹服务器怎么找人
2018年网络安全周宣传语
网络安全员可以从事哪些工作
软件开发和软件工程师哪个好
做网站开发为什么要用服务器
网络安全实战详解 pdf
益阳软件开发培训院校
c 得到数据库所有表