Spark 作业提交
一、作业打包jar
1、工程目录结构
2、不同运行模式的打包方式
Local模式与Yarn模式不同就在于:Local模式运行时jar包仅在本地存在,而Yarn模式需要在每台从机的环境上都要相同的jar包,因此在Yarn 模式打jar包时,需要将pom.xml中依赖的 所有jar包一起打进去。
(1)Local 模式对maven 工程进行编译为jar 文件
  mvn clean package -DskipTests
【题外话:安装自定义jar包到自己的maven仓库
            mvn install:install-file -Dfile=/www/lib/ipdatabase-master/target/ipdatabase-1.0-SNAPSHOT.jar -DgroupId=com.ggstar -DartifactId=ipdatabase -Dversion=1.0 -Dpackaging=jar
打包成功后,会在ImoocSparkSQLProject/target 文件下生成一个 jar 文件,如pom.xml 中配置为,则生成sql-1.0.jar 
(2)Yarn模式对maven 工程进行编译为jar 文件
a.打包时要注意,pom.xml中需要添加如下plugin,目的就是将pom.xml所依赖的包一起打进去。
b.该方式打包时,可以对环境上已经存在的jar 禁止打进去,确保 Spark 不与应用依赖的其他工件打包在一起。在依赖下添加 <scope>provided</scope> ,如图
 
 <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifest>
                            <mainClass></mainClass>
                        </manifest>
                    </archive>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                </configuration>
        </plugin>
或者
<!-- 用来创建超级JAR包的Maven shade插件 -->
<plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-shade-plugin</artifactId>
      <version>2.3</version>
      <executions>
             <execution>
                   <phase>package</phase>
                    <goals>
                         <goal>shade</goal>
                    </goals>
             </execution>
      </executions>
</plugin>
运行maven 命令:  mvn assembly:assembly
打包成功后,会在ImoocSparkSQLProject/target 文件下生成一个 jar 文件,如pom.xml 中配置为,则生成sql-1.0-jar-with-dependencies.jar 
4、作业提交有多种运行模式,以下是各种模式的提交方式。
5、依赖冲突解决办法:当用户应用与 Spark 本身依赖同一个库时可能会发生依赖冲突,导致程序崩溃。这种情况不是很常见,但是出现的时候也让人很头疼。通常,依赖冲突表现为 Spark 作业执行过程中抛出 NoSuchMethodError 、 ClassNotFoundException ,或其他与类加载相关的 JVM 异常。对于这种问题,主要有两种解决方式:一是修改你的应用,使其使用的依赖库的版本与 Spark 所使用的相同,二是使用通常被称为“shading”的方式打包你的应用。Maven 构建工具通过对例 7-5 中使用的插件(事实上,shading 的功能也是这个插件取名为 maven-shade-plugin 的原因)进行高级配置来支持这种打包方式。shading 可以让你以另一个命名空间保留冲突的包,并自动重写应用的代码使得它们使用重命名后的版本。这种技术有些简单粗暴,不过对于解决运行时依赖冲突的问题非常有效。
二、选择Spark 运行模式提交
在Spark中,支持4种运行模式:
1)Local:开发时使用
2)Standalone: 是Spark自带的,如果一个集群是Standalone的话,那么就需要在多台机器上同时部署Spark环境
3)YARN:建议大家在生产上使用该模式,统一使用YARN进行整个集群作业(MR、Spark)的资源调度
4)Mesos
不管使用什么模式,Spark应用程序的代码是一模一样的,只需要在提交的时候通过--master参数来指定我们的运行模式即可
1、Local模式下
提交Spark Application到环境中运行。如果要写入数据库数据则需要加上  --jars
1、该模式操作路径在本地的数据
spark-submit  \
--name SparkSessionApp \
--class com.imooc.spark.SparkSessionApp \
--jars /www/lib/mysql-connector-java-5.1.25.jar  \   
--master local[2]  \
/www/lib/sql-1.0.jar  \
/www/instl/spark/spark-2.1.0-bin-2.6.0-cdh5.7.0/examples/src/main/resources/people.json
2、该模式操作路径在hdfs上的数据
spark-submit  \
--name SparkSessionApp \
--class com.imooc.spark.SparkSessionApp \
--jars /www/lib/mysql-connector-java-5.1.25.jar  \   
--master local[2]  \
/www/lib/sql-1.0.jar  \
hdfs://hadoop001:8020/inputfile/people.json
2、YARN模式
如果想运行在YARN之上,ResourceManager的地址从Hadoop配置中获取。因此必须要设置HADOOP_CONF_DIR或者是YARN_CONF_DIR。即为spark配置上hadoop路径下直到/etc/hadoop 的路径
方式 1:直接导出方式   export HADOOP_CONF_DIR=/www/instl/hadoop/hadoop-2.6.0-cdh5.9.3/etc/hadoop
方式2:在 $SPARK_HOME/conf/spark-env.sh 中配置上hadoop路径下直到/etc/hadoop 的路径
       HADOOP_CONF_DIR=/www/instl/hadoop/hadoop-2.6.0-cdh5.7.0/etc/hadoop
YARN 模式运行的两种方式
(1)Client 模式特点:(YARN默认模式)
a. Driver运行在Client端(提交Spark作业的机器)
b.Client会和请求到的Container进行通信来完成作业的调度和执行,Client是不能退出的
c..日志信息会在控制台输出:便于我们测试
d.命令如
如果要写入数据库数据则需要加上  --jars  ,如果需要引入文件,需要加上 --file
1、该模式操作路径在hdfs上的数据.(参数路径不加hdfs://hadoop001:8020 时,默认加上这路径)
spark-submit \
--name SparkSessionApp \
--class com.imooc.spark.SparkSessionApp \
--jars /www/lib/mysql-connector-java-5.1.25.jar  \
--master yarn-client \
--executor-memory 1G \
--num-executors 1 \
--conf spark.sql.shuffle.partitions=100 \
--files /www/lib/ipDatabase.csv,/home/hadoop/lib/ipRegion.xlsx \
/www/lib/sql-1.0-jar-with-dependencies.jar \
hdfs://hadoop001:8020/inputfile/access.log   hdfs://hadoop001:8020/outputfile/clean
2、该模式操作路径在本地数据,需要加上file:// 标识
spark-submit \
--name SparkSessionApp \
--class com.imooc.spark.SparkSessionApp \
--jars /www/lib/mysql-connector-java-5.1.25.jar  \
--master yarn-client \
--executor-memory 1G \
--num-executors 1 \
--conf spark.sql.shuffle.partitions=100 \
--files /www/lib/ipDatabase.csv,/www/lib/ipRegion.xlsx \
/www/lib/sql-1.0-jar-with-dependencies.jar \
file:///www/data/outputfile/access.log  file:///www/data/outputfile/clean
3、不参与操作路径资源
spark-submit \
--class org.apache.spark.examples.SparkPi \
--master yarn-client  \
--executor-memory 1G \
--num-executors 1 \
/www/instl/spark/spark-2.1.0-bin-2.6.0-cdh5.7.0/examples/jars/spark-examples_2.11-2.1.0.jar \
4
(2)Cluster模式特点:
a.Driver运行在ApplicationMaster中
b.Client只要提交完作业之后就可以关掉,因为作业已经在YARN上运行了
c.日志是在终端看不到的,因为日志是在Driver上,只能通过yarn logs -applicationId application_id (命令: yarn logs -applicationId application_1495632775836_0002  需要开通日志聚合功能服务)
也可以在界面上查看结果:

d.命令如:(仅 master 后模式进行改变)
如果要写入数据库数据则需要加上  --jars  ,如果需要引入文件,需要加上 --file
1、该模式操作路径在hdfs上的数据(参数路径不加hdfs://hadoop001:8020 时,默认加上这路径)
spark-submit \
--name SparkSessionApp \
--class com.imooc.spark.SparkSessionApp \
--jars /www/lib/mysql-connector-java-5.1.25.jar  \
--master yarn-cluster \
--executor-memory 1G \
--num-executors 1 \
--conf spark.sql.shuffle.partitions=100 \
--files /www/lib/ipDatabase.csv,/www/lib/ipRegion.xlsx \
/www/lib/sql-1.0-jar-with-dependencies.jar \
hdfs://hadoop001:8020/inputfile/access.log   hdfs://hadoop001:8020/outputfile/clean
2、该模式操作路径在本地数据,需要加上file:// 标识
spark-submit \
--name SparkSessionApp \
--class com.imooc.spark.SparkSessionApp \
--jars /www/lib/mysql-connector-java-5.1.25.jar  \
--masteryarn-cluster \
--executor-memory 1G \
--num-executors 1 \
--conf spark.sql.shuffle.partitions=100 \
--files /www/lib/ipDatabase.csv,/home/hadoop/lib/ipRegion.xlsx \
/www/lib/sql-1.0-jar-with-dependencies.jar \
file:///www/data/outputfile/access.log  file:///www/data/outputfile/clean
3、不参与操作路径资源
spark-submit \
--class org.apache.spark.examples.SparkPi  \
--masteryarn-cluster \
--executor-memory 1G \
--num-executors 1 \
--conf spark.sql.shuffle.partitions=100 \
/www/instl/spark/spark-2.1.0-bin-2.6.0-cdh5.7.0/examples/jars/spark-examples_2.11-2.1.0.jar \
4
三 优化、调整并行度
./bin/spark-submit \
--class com.imooc.log.TopNStatJobYARN \
--name TopNStatJobYARN \
--master yarn \
--executor-memory 1G \
--num-executors 1 \
--conf spark.sql.shuffle.partitions=100 \
/home/hadoop/lib/sql-1.0-jar-with-dependencies.jar \
hdfs://hadoop001:8020/imooc/clean  20170511
注意:不同模式参数路径读取路径位置
在不同的启动模式下,加载文件时的参数路径写法是不一样的,对于local模式下,默认就是读取本地文件,而在standlone或者yarn-client,或者yarn-cluster模式下,默认读的都是hdfs文件系统】, 这几种模式下很难读取本地文件(这是很显然的事情,但你可以通过指定节点的文件服务曲线救国)。
下面的代码在local模式下有效,在其它模式下无效:
var theP1 = sc.textFile("file:///usr/test/people.json")  //读取本地
var theP2 = sc.textFile("hdfs://master.hadoop/user/root/test/test/people.json") //读取hdfs文件
下面的代码在非local模式下,都是读取的hdfs,file://模式无效.
var theP1 = sc.textFile("/usr/test/people.json")  
var theP2 = sc.textFile("/user/root/test/test/people.json")
下面这个语句在几种模式下都有效
var theP2 = sc.textFile("hdfs://master.hadoop/user/root/test/test/people.json") //读取hdfs文件
在非local模式下等同于
var theP2 = sc.textFile("/user/root/test/test/people.json")
报错:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/spark/streaming/kafka/KafkaUtils$
    at com.imooc.spark.project.spark.ImoocStatStreamingApp$.main(ImoocStatStreamingApp.scala:31)
    at com.imooc.spark.project.spark.ImoocStatStreamingApp.main(ImoocStatStreamingApp.scala)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:755)
    at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:180)
    at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:205)
    at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:119)
    at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
Caused by: java.lang.ClassNotFoundException: org.apache.spark.streaming.kafka.KafkaUtils$
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 11 more
修正:把maven中以依赖的org.apache.spark:spark-streaming-kafka-0-8_2.11:2.2.0注释,以package 进行操作
spark-submit --master local[5] \
--class com.imooc.spark.project.spark.ImoocStatStreamingApp \
--packages org.apache.spark:spark-streaming-kafka-0-8_2.11:2.2.0 \
/home/hadoop/lib/sparktrain-1.0.jar \
hadoop000:2181 test streamingtopic 1
报错2
java.lang.NoClassDefFoundError: org/apache/hadoop/hbase/client/HBaseAdmin
    at com.imooc.spark.project.utils.HBaseUtils.<init>(HBaseUtils.java:30)
    at com.imooc.spark.project.utils.HBaseUtils.getInstance(HBaseUtils.java:40)
    at com.imooc.spark.project.dao.CourseClickCountDAO$.save(CourseClickCountDAO.scala:26)
    at com.imooc.spark.project.spark.ImoocStatStreamingApp$$anonfun$main$4$$anonfun$apply$1.a
将Hbase的包全部引入
spark-submit --master local[5] \
--jars $(echo /home/hadoop/app/hbase-1.2.0-cdh5.7.0/lib/*.jar | tr ' ' ',') \
--class com.imooc.spark.project.spark.ImoocStatStreamingApp \
--packages org.apache.spark:spark-streaming-kafka-0-8_2.11:2.2.0 \
/home/hadoop/lib/sparktrain-1.0.jar \
hadoop000:2181 test streamingtopic 1

Spark 作业提交相关推荐

  1. Spark学习(四) -- Spark作业提交

    标签(空格分隔): Spark 作业提交 先回顾一下WordCount的过程: sc.textFile("README.rd").flatMap(line => line.s ...

  2. spark StandAlone模式下的作业提交流程

    spark StandAlone也有两种作业提交模式,client 和 cluster模式,以下以cluster为例说明 提交代码 ./spark-submit \ --class org.apach ...

  3. 【大数据Spark系列】Spark部署模式与作业提交

    文章目录 Spark部署模式与作业提交 一.作业提交 1.1 spark-submit 1.2 deploy-mode 1.3 master-url 二.Local模式 三.Standalone模式 ...

  4. Kettle与Hadoop(九)提交Spark作业

    实验目的: 配置Kettle向Spark集群提交作业. 实验环境: Spark History Server: 172.16.1.126 Spark Gateway: 172.16.1.124 172 ...

  5. Spark任务提交底层原理

    Driver的任务提交过程 1.Driver程序的代码运行到action操作,触发了SparkContext的runJob方法. 2.SparkContext调用DAGScheduler的runJob ...

  6. Spark详解(五):Spark作业执行原理

    Spark的作业和任务调度系统是其核心,它能够有效地进行调度的根本原因是对任务的划分DGG和容错.下面我们介绍一下相关术语: 作业(Job):RDD中由行动操作所生成的一个或者多个调度阶段 调度阶段( ...

  7. 平台搭建---Spark提交应用程序---Spark Submit提交应用程序及yarn

    本部分来源,也可以到spark官网查看英文版. spark-submit 是在spark安装目录中bin目录下的一个shell脚本文件,用于在集群中启动应用程序(如***.py脚本):对于spark支 ...

  8. Spark Submit提交及参数调优

    https://www.cnblogs.com/LHWorldBlog/p/8414342.html https://www.cnblogs.com/haoyy/p/6893943.html spar ...

  9. Maxcompute Spark作业管控利器—Cupid Console

    一.背景 Maxcompute平台目前可以支持运行Spark作业,Spark作业依托于Maxcompute的Cupid平台可以按照社区兼容的方式提交到Maxcompute上运行,支持读写Maxcomp ...

最新文章

  1. Oracle字符串转BooIean,利用Java的多线程技术实现数据库的访问.pdf
  2. 智齿客服Android集成流程,一种基于编程语言接入智齿客服的方法以及电子设备与流程...
  3. 怎么修改服务器上的分数,教资成绩查询服务器爆了?这里有个小技巧教你!
  4. LG卖楼进行时:价值87.7亿元的双子座大厦将出手
  5. GoDaddy Linux主机支持机房的更换
  6. Linux 查看分区大小
  7. 华为手机计算器程序员模式_华为手机的普通拍照模式,你真的会用吗?
  8. php人民币转换,PHP转换,如何实现人民币中文大写与数字相互转换?
  9. 分库分表会带来读扩散问题?怎么解决?
  10. 为什么NFT的头像卖这么贵?这与IPFS/FIL有什么联系
  11. 使用思博伦卫星导航模拟器GSS7000方法
  12. pmp-关键路径图和甘特图
  13. 云原生:打造「阿拉丁神灯式」应用厨房
  14. 如今,我们已经长大,
  15. AI TIME走进深圳大学城
  16. 全国专业技术人员计算机应用能力考试题库word,全国专业技术人员计算机应用能力考试题库ExcelWordXP.docx...
  17. Reverse for 'xxx' not found. 'xxx' is not a valid view function or pattern name.问题的原因以及解决
  18. 『用英语学英语』英文语法为什么要有独立主格?
  19. JD6606S有TID号的硬件PD协议芯片资料
  20. Java CompletableFuture的complete(7)

热门文章

  1. 中基鸿业工薪家庭如何理财
  2. 计算机操作校本培训教材,校本培训教材.doc
  3. 国产源代码扫描工具DMSCA扫描出的报告优秀吗?
  4. Cocos2d游戏源码下载分享
  5. html怎样做成视频代码,如何在网页上插入视频(用html制作)
  6. SQLServer2008的外围配置(图)
  7. 大数据管理平台建立步骤_改善数据管理的7个步骤
  8. Montinz Word-2-CHM
  9. 【海亮DAY6】 分治
  10. 清华学霸讲计算机,清华学霸退学再战高考,疯狂举动只因痴迷这个专业