• Spark Jar包问题


    通常我们将spark任务编写后打包成jar包,使用spark-submit进行提交,因为spark是分布式任务,如果运行机器上没有对应的依赖jar文件就会报ClassNotFound的错误。 

    下面有二个解决方法:

    方法一:spark-submit –jars

    根据spark官网,在提交任务的时候指定–jars,用逗号分开。这样做的缺点是每次都要指定jar包,如果jar包少的话可以这么做,但是如果多的话会很麻烦。

    spark-submit --master yarn-client --jars ***.jar,***.jar(你的jar包,用逗号分隔) mysparksubmit.jar

    如果还不行,使用driver-class-path但是这种方法task执行会报错,必须保证driver和jar在同一台机器。

    spark1.4之前有诡异的这种问题,据说是spark修复了。另外可以尝试-conf。

    方法二:extraClassPath

    提交时在spark-default中设定参数,将所有需要的jar包考到一个文件里,然后在参数中指定该目录就可以了,较上一个方便很多:

    spark.executor.extraClassPath=/home/lib/*
    
    spark.driver.extraClassPath=/home/lib/*

    需要注意的是,你要在所有可能运行spark任务的机器上保证该目录存在,并且将jar包考到所有机器上。这样做的好处是提交代码的时候不用再写一长串jar了,缺点是要把所有的jar包都拷一遍

    Spark应用程序第三方jar文件依赖解决方案

    第一种方式

    操作:将第三方jar文件打包到最终形成的spark应用程序jar文件中

    应用场景:第三方jar文件比较小,应用的地方比较少

    第二种方式

    操作:使用spark-submit提交命令的参数: --jars

    要求:

    1、使用spark-submit命令的机器上存在对应的jar文件

    2、至于集群中其他机器上的服务需要该jar文件的时候,通过driver提供的一个http接口来获取该jar文件的(例如:http://192.168.187.146:50206/jars/mysql-connector-java-5.1.27-bin.jar Added By User)

    ## 配置参数:--jars JARS

    如下示例:

    $ bin/spark-shell --jars /opt/cdh-5.3.6/hive/lib/mysql-connector-java-5.1.27-bin.jar

    应用场景:要求本地必须要有对应的jar文件

    第三种方式

    操作:使用spark-submit提交命令的参数: --packages

    ## 配置参数:--packages  jar包的maven地址

    如下示例:

    $ bin/spark-shell --packages  mysql:mysql-connector-java:5.1.27--repositories http://maven.aliyun.com/nexus/content/groups/public/

    ## --repositories 为mysql-connector-java包的maven地址,若不给定,则会使用该机器安装的maven默认源中下载

    ## 若依赖多个包,则重复上述jar包写法,中间以逗号分隔

    ## 默认下载的包位于当前用户根目录下的.ivy/jars文件夹中

    应用场景:本地可以没有,集群中服务需要该包的的时候,都是从给定的maven地址,直接下载

    第四种方式

    操作:更改Spark的配置信息:SPARK_CLASSPATH, 将第三方的jar文件添加到SPARK_CLASSPATH环境变量中

    注意事项:要求Spark应用运行的所有机器上必须存在被添加的第三方jar文件

    A.创建一个保存第三方jar文件的文件夹:

    命令:$ mkdir external_jars

    B.修改Spark配置信息 命令:$ vim conf

    /spark-env.sh修改内容:

    SPARK_CLASSPATH=$SPARK_CLASSPATH:/opt/cdh-5.3.6/spark/external_jars/*

    C.将依赖的jar文件copy到新建的文件夹中

    命令:

    $ cp /opt/cdh-5.3.6/hive/lib/mysql-connector-java-5.1.27-bin.jar ./external_jars/

    应用场景:依赖的jar包特别多,写命令方式比较繁琐,被依赖包应用的场景也多的情况下

    备注:(只针对spark on yarn(cluster)模式)

    spark on yarn(cluster),如果应用依赖第三方jar文件

    最终解决方案:将第三方的jar文件copy到${HADOOP_HOME}/share/hadoop/common/lib文件夹中(Hadoop集群中所有机器均要求copy)

    针对Hive出现的问题,请将hive所需的jar *的形式添加到yarn classpath中。

  • 相关阅读:
    mac os x 之通过远程主机在nginx上部署web静态页面
    基于jQuery UI的调色板插件推荐colorpicker
    Mac 访问隐藏文件方法! 网上方法在我电脑上都不可用!
    JavaScript设计模式学习之单例模式
    由一篇博文做出的代码,不用Math.round()如何实现其功能
    mac os x之解决npm安装包失败,或者nodejs工程缺少依赖
    用nginx的反向代理机制解决前端跨域问题
    mac之os x系统下搭建nodejs+express4.x+mongodb+gruntjs整套前端工程
    sourcetree window10 闪退
    滚动条自定义样式
  • 原文地址:https://www.cnblogs.com/itboys/p/12744850.html
Copyright © 2020-2023  润新知