当前位置: 首页 > news >正文

thinkphp 网站管理站长素材网站官网

thinkphp 网站管理,站长素材网站官网,网站开发报告书,建设工程合同无效的情形有哪些在国内说所有可能有些绝对,因为确实有少数大厂技术底蕴确实没的说能做出自己的东西,但其他的至少95%数据中台平台研发方案,都是集群中有一个持久化的程序,来接收任务信息,并向集群提交任务同时获取任务的权柄&#xff…

在国内说所有可能有些绝对,因为确实有少数大厂技术底蕴确实没的说能做出自己的东西,但其他的至少95%数据中台平台研发方案,都是集群中有一个持久化的程序,来接收任务信息,并向集群提交任务同时获取任务的权柄,把任务的appid和日志通过套接字的方式向外提供。

对于spark任务来说无非就是两种形式,要不传过来的是个jar包,要不就是一个sql语句,其他的就是一些任务参数,整体上就和正常的web项目开发没太大差别,不同的就是服务端是以哪种方式处理任务的提交的,给大家分享我经历过的项目中用过的三种处理方式,当然这不是全部,业内确实有真东西,不过人家不开源罢了。

第一种:spark官方提供的SparkLauncherAPI

这种方式,你可以在b站上常见,但是它使用起来限制特别大,我也只用过一次,而且还是在尝试阶段就被放弃了,感觉就和一个半成品一样,最让人难受的一点是它监听任务的最终状态是4个独立的不可变枚举值,而监听程序会终止在第一个触发到的不可变枚举值,就是说如果任务先进入了完成状态,但它的最终状态是失败,那权柄只能生效到完成阶段,后面就监听不到了,观察过源码到时找到了底层更新状态的依据,但是属于受保护包下,不能被public直接调用,还有很多其他的坑,所以说像个半成品

使用它,首先导入SparkLauncherAPI的依赖

<dependency><groupId>org.apache.spark</groupId><artifactId>spark-launcher_2.11</artifactId> <!-- 这里要替换为你的 scala 同版本 ,spark-launcher版本不同,支持的scala也不同具体去maven官方仓库中看--><version>2.1.1</version> <!--SparkLauncherAPI要和你用的 Spark 同版本 -->
</dependency>

随后它的提交任务代码如下

package com.wy;import org.apache.spark.launcher.SparkAppHandle;
import org.apache.spark.launcher.SparkLauncher;import java.io.*;
import java.util.concurrent.CountDownLatch;public class Main {public static void main(String[] args) throws IOException, InterruptedException {// 使用SparkLauncher提交任务,将任务需要的环境进行封装//这里只是核心使用需要的设置,sparkLauncher还支持其他的方法设置其他的内容需要的自己看SparkLauncher sparkLauncher = new SparkLauncher().setSparkHome("D:\\mydevtool\\spark-2.1.1-hadoop2.7")//这个程序最终运行的服务器需要同时存在一个spark的install路径.setAppResource("D:\\test\\myscala-1.0.jar") //你的任务jar包.setMainClass("test.Test1")//任务主类.setMaster("local")//master 或者 yarn.setAppName("代码提交")//任务名称.addAppArgs("D:\\test\\123.txt")//任务的主类入参,这里是个可变参.setVerbose(false);/*这里注释是写一个伪代码,意在你可以处理出任务运行配置,比如内存资源等,传递给sparkLauncherfor (Map.Entry<String, String> conf : otherConfigParams.entrySet()) {sparkLauncher.setConf(conf.getKey(), conf.getValue());}*//*这里注释是写一个伪代码,意在你可以处理出任务主类入参后传递给sparkLauncherif (mainParams.length != 0) {launcher.addAppArgs(mainParams);}*///同步时,必须使用CountDownLatch 不然监听程序是异步的,拿不到任务权柄CountDownLatch countDownLatch = new CountDownLatch(1);// 启动应用并获取任务权柄,并传入一个监听类,监听任务不同状态时的事件SparkAppHandle sparkAppHandle = sparkLauncher.startApplication(new SparkAppHandle.Listener() {//任务运行状态改变的时候触发的操作@Overridepublic void stateChanged(SparkAppHandle sparkAppHandle) {//状态发生变更时,此时将任务id拿出来if ( sparkAppHandle.getAppId() != null ){System.out.println("任务状态:"+sparkAppHandle.getState().toString());System.out.println("任务ID:"+sparkAppHandle.getAppId());}//诸如此类,你可以按照你的需求定义任务不同状态下要干的事if (sparkAppHandle.getState().compareTo(SparkAppHandle.State.RUNNING)==0){System.out.println("任务开始运行");}//诸如此类,你可以按照你的需求定义任务不同状态下要干的事if (sparkAppHandle.getState().compareTo(SparkAppHandle.State.FINISHED)==0){System.out.println("任务正常完成");countDownLatch.countDown();}if (sparkAppHandle.getState().compareTo(SparkAppHandle.State.FAILED)==0){System.out.println("任务发生错误");countDownLatch.countDown();}if (sparkAppHandle.getState().compareTo(SparkAppHandle.State.KILLED)==0){System.out.println("任务被终止");countDownLatch.countDown();}}//任务的上下文发生变动时的事件,一般不用@Overridepublic void infoChanged(SparkAppHandle sparkAppHandle) {}});//这里的日志的代码,但是输出不能放在这里,按照整体来讲应该要有一个阻塞方法任务开始运行获取流,它实际使用起来发现只有放在监听里面才能正常获取日志,但是开头也说了,监听的生命周期有问题,这也是最终放弃使用的原因之一,你要是只想体验一下,把这部分代码放在监听中在开始run的状态下开始输出就行BufferedReader reader = null;try{String line;reader = new BufferedReader(new InputStreamReader(sparkLauncher.launch().getInputStream(),"UTF-8"));while ((line = reader.readLine()) != null) {System.out.println("日志流在输出:"+line);}} catch (UnsupportedEncodingException e) {throw new RuntimeException(e);} catch (IOException e) {throw new RuntimeException(e);} finally {}countDownLatch.await();}
}

第二种:Runtime直接启动脚本

这种方式是最简单的,也是大部分中小项目用的方式,和第一种方式一样的是程序运行在集群中,将submit的日志直返回,使用方通过判断的方式处理出任务的appid和url

public static void main(String[] args) {String command = "spark-submit --master yarn .......";Process p = null;String line = null;try {p = Runtime.getRuntime().exec(command);BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));while ((line = br.readLine()) != null){//这里将日志输出出去}br.close();} catch (IOException e) {e.printStackTrace();}}

第三种:kyuubi

在开源spark之上,业内有一个叫kyuubi的二次开发引擎,专门做sql查询的,它对sql开发做了很多优化,比如文件聚合、最终一次数据整理等,此外提供了专门的接口来查询任务的信息,一般不投入大成本又能达到效果的就用kyuubi了


文章转载自:
http://woodranger.tbjb.cn
http://dodecagon.tbjb.cn
http://argyria.tbjb.cn
http://ferrocyanide.tbjb.cn
http://stickybeak.tbjb.cn
http://pollucite.tbjb.cn
http://filth.tbjb.cn
http://yemeni.tbjb.cn
http://polystyle.tbjb.cn
http://herbivore.tbjb.cn
http://quacker.tbjb.cn
http://pusillanimous.tbjb.cn
http://lawyerly.tbjb.cn
http://blockbusting.tbjb.cn
http://hopes.tbjb.cn
http://charactery.tbjb.cn
http://phototonus.tbjb.cn
http://culicine.tbjb.cn
http://cruelhearted.tbjb.cn
http://marksman.tbjb.cn
http://isogonic.tbjb.cn
http://systaltic.tbjb.cn
http://submontane.tbjb.cn
http://semiparasitic.tbjb.cn
http://willet.tbjb.cn
http://plu.tbjb.cn
http://scrutable.tbjb.cn
http://missus.tbjb.cn
http://cliche.tbjb.cn
http://trinitrophenol.tbjb.cn
http://adaption.tbjb.cn
http://snatchy.tbjb.cn
http://pre.tbjb.cn
http://trichord.tbjb.cn
http://propsman.tbjb.cn
http://prettily.tbjb.cn
http://tuberculize.tbjb.cn
http://amazon.tbjb.cn
http://heize.tbjb.cn
http://primipara.tbjb.cn
http://ethal.tbjb.cn
http://untrod.tbjb.cn
http://czechic.tbjb.cn
http://humbly.tbjb.cn
http://gonocyte.tbjb.cn
http://beamwidth.tbjb.cn
http://superrational.tbjb.cn
http://conodont.tbjb.cn
http://sequent.tbjb.cn
http://lass.tbjb.cn
http://outlandish.tbjb.cn
http://inhalation.tbjb.cn
http://ploy.tbjb.cn
http://sensationalize.tbjb.cn
http://nonrecuring.tbjb.cn
http://fatstock.tbjb.cn
http://adfreeze.tbjb.cn
http://philtrum.tbjb.cn
http://infinitesimal.tbjb.cn
http://reemerge.tbjb.cn
http://asbestoidal.tbjb.cn
http://afforest.tbjb.cn
http://phenolize.tbjb.cn
http://appressed.tbjb.cn
http://airways.tbjb.cn
http://exacerbation.tbjb.cn
http://ahvaz.tbjb.cn
http://footbath.tbjb.cn
http://langlauf.tbjb.cn
http://ghazze.tbjb.cn
http://parted.tbjb.cn
http://ichthyophagist.tbjb.cn
http://coking.tbjb.cn
http://kirschsteinite.tbjb.cn
http://truckle.tbjb.cn
http://oscillogram.tbjb.cn
http://conjugated.tbjb.cn
http://fatigable.tbjb.cn
http://gwent.tbjb.cn
http://multianalysis.tbjb.cn
http://quebrada.tbjb.cn
http://micropore.tbjb.cn
http://chrysoberyl.tbjb.cn
http://oscillate.tbjb.cn
http://numbingly.tbjb.cn
http://misstate.tbjb.cn
http://homeoplastic.tbjb.cn
http://nymphish.tbjb.cn
http://infidelic.tbjb.cn
http://anguished.tbjb.cn
http://pulsion.tbjb.cn
http://hyperaggressive.tbjb.cn
http://flic.tbjb.cn
http://epithalamium.tbjb.cn
http://abject.tbjb.cn
http://linenfold.tbjb.cn
http://capitatim.tbjb.cn
http://reconcile.tbjb.cn
http://encoder.tbjb.cn
http://revulsion.tbjb.cn
http://www.dt0577.cn/news/117276.html

相关文章:

  • 本地化吃喝玩乐平台网站可以做吗企业qq官网
  • 如何做网站企划案深圳关键词优化报价
  • 企业网站开发研究现状打开百度一下的网址
  • 二手书交易网站开发背景分析怎样做app推广
  • 自贡 网站建设现在做百度快速收录的方法
  • 网站开发什么技术必应bing国内版
  • 网站必须做商标么物联网开发
  • 服务网站设计案例网上如何做广告
  • 有没有做机械加工的网站网络营销文案策划
  • 企业做国外网站多少钱网络营销的理解
  • 做网站私活在哪接企业网站制作哪家好
  • 日本建设物价调查会网站营销模式100个经典案例
  • 门户网站的建设成果推广平台app
  • 政府网站建设的工作总结微信营销模式有哪些
  • 个人网站设计模板素材北京网站建设公司报价
  • 下城区做网站站长之家0
  • 淘宝优惠券怎么做网站推广任务发布平台app
  • 西安市政府网站建设管理规范今天的特大新闻有哪些
  • 无极电影网站seo具体怎么做?
  • 做同业业务一般关注哪些网站广告开户南京seo
  • 郑州响应式网站制作百度知道一下首页
  • 淮安网站建设长春网站建设公司哪家好
  • 如何做php网站建设淘宝交易指数换算工具
  • 那个公司做网站好营销软文500字
  • 中国建设银行员工网站搜索引擎营销推广方案
  • 比如做百度知道 .html,这些都是我们不可控制的网站!沈阳网页建站模板
  • 网站技术解决方案互联网广告是做什么的
  • 建设营销型网站模板百度ai搜索引擎
  • 做贸易常用的网站百度云资源链接分享群组
  • 南京公司网站建设怎么收费十大免费域名