热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

用java提交一个Spark应用程序

第一种方式经常有人在公众号留言或者在群里问浪尖,如何使用java代码提交一个Spark应用程序。在这里浪尖介绍一种简单的方法来实现这个功能。首先用vim打开一个文件&



第一种方式

经常有人在公众号留言或者在群里问浪尖,如何使用java代码提交一个Spark应用程序。在这里浪尖介绍一种简单的方法来实现这个功能。

首先用vim打开一个文件,MyLauncher.java

编写代码如下:

import org.apache.spark.launcher.SparkAppHandle;

import org.apache.spark.launcher.SparkLauncher;

import java.util.HashMap;

public class MyLauncher {

 public static void main(String[] args) throws Exception {

HashMap map = newHashMap();

       map.put("HADOOP_CONF_DIR","/home/hadoop/conf");

       map.put("YARN_CONF_DIR","/home/hadoop/conf");

       map.put("SPARK_CONF_DIR","/home/hadoop/spark/conf");

     new SparkLauncher(map)

        .setAppResource("/data/newStreaming/uesc-analyzer.jar")

        .setMainClass("ucloud.UESBash.testSchema")

        .setMaster("yarn-cluster")

        .setConf(SparkLauncher.DRIVER_MEMORY, "2g")

       .setVerbose(true).startApplication();

       Thread.sleep(100000);

      // Use handle API to monitor / control application.

}

}

 

接着,进行编译

javac -cp /home/hadoop/spark/lib/spark-assembly-1.6.0-hadoop2.6.0-cdh5.4.9.jarMyLauncher.java

 

然后提交执行

java -cp/home/hadoop/spark/lib/spark-assembly-1.6.0-hadoop2.6.0-cdh5.4.9.jar:.MyLauncher

这样就可以在yarn的界面上看到运行情况了。

注释:可能你比较奇怪我为啥在那加了个停顿,因为正常情况下我们要进行一些其它操作监控Spark应用而不是直接退出,直接退出可能会导致提交还没完成退出,以至于应用程序不能被提交了。

当然,还有另外一种方式,但是不建议使用,上面采用的这种方式呢可以更好地监控我们Spark程序的状态。

第二种方式

import org.apache.spark.launcher.SparkAppHandle;

import org.apache.spark.launcher.SparkLauncher;

import java.util.HashMap;

public class MyLauncher {

 public static void main(String[] args) throws Exception {

HashMap map = newHashMap();

       map.put("HADOOP_CONF_DIR","/home/hadoop/conf");

       map.put("YARN_CONF_DIR","/home/hadoop/conf");

       map.put("SPARK_CONF_DIR","/home/hadoop/spark/conf");

    Process spark  = new SparkLauncher(map)

        .setAppResource("/data/newStreaming/uesc-analyzer.jar")

        .setMainClass("ucloud.UESBash.testSchema")

        .setMaster("yarn-cluster")

        .setConf(SparkLauncher.DRIVER_MEMORY, "2g")

       .setVerbose(true).launch();

      // Use handle API to monitor / control application.

       spark.waitFor();    

}

}

第二种方式是启动了一个子进程来加载提交应用程序。

至于SparkLauncher其它标准函数操作,比如如何传参,如何指定内存,cpu,如何指定钩子函数这些浪尖就不在这里啰嗦了,有兴趣可以去翻看这个类的源码。也可以在公众号里输入:submit,来获取这个类和钩子函数使用的复杂代码。

 推荐阅读:

1,读懂Word2Vec之Skip-Gram

2,CountVectorizer

3,spark调优系列之内存和GC调优




关于Spark高级玩法

kafka,hbase,spark,Flink等入门到深入源码,spark机器学习,大数据安全,大数据运维,请关注浪尖公众号,看高质量文章。

更多文章,敬请期待





推荐阅读
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 本文介绍了一个Java猜拳小游戏的代码,通过使用Scanner类获取用户输入的拳的数字,并随机生成计算机的拳,然后判断胜负。该游戏可以选择剪刀、石头、布三种拳,通过比较两者的拳来决定胜负。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
  • 本文介绍了Java高并发程序设计中线程安全的概念与synchronized关键字的使用。通过一个计数器的例子,演示了多线程同时对变量进行累加操作时可能出现的问题。最终值会小于预期的原因是因为两个线程同时对变量进行写入时,其中一个线程的结果会覆盖另一个线程的结果。为了解决这个问题,可以使用synchronized关键字来保证线程安全。 ... [详细]
  • HDFS2.x新特性
    一、集群间数据拷贝scp实现两个远程主机之间的文件复制scp-rhello.txtroothadoop103:useratguiguhello.txt推pushscp-rr ... [详细]
  • Android工程师面试准备及设计模式使用场景
    本文介绍了Android工程师面试准备的经验,包括面试流程和重点准备内容。同时,还介绍了建造者模式的使用场景,以及在Android开发中的具体应用。 ... [详细]
  • 本文介绍了在Python中使用zlib模块进行字符串的压缩与解压缩的方法,并探讨了其在内存优化方面的应用。通过压缩存储URL等长字符串,可以大大降低内存消耗,虽然处理时间会增加,但是整体效果显著。同时,给出了参考链接,供进一步学习和应用。 ... [详细]
  • 纠正网上的错误:自定义一个类叫java.lang.System/String的方法
    本文纠正了网上关于自定义一个类叫java.lang.System/String的错误答案,并详细解释了为什么这种方法是错误的。作者指出,虽然双亲委托机制确实可以阻止自定义的System类被加载,但通过自定义一个特殊的类加载器,可以绕过双亲委托机制,达到自定义System类的目的。作者呼吁读者对网上的内容持怀疑态度,并带着问题来阅读文章。 ... [详细]
author-avatar
朴子字軒_755
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有