美文网首页
Spark 电商应用开发过程中出现的问题汇总

Spark 电商应用开发过程中出现的问题汇总

作者: yosql473 | 来源:发表于2019-04-26 07:54 被阅读0次
    1.java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries.
    报错信息

    描述: 出现这个问题并不妨碍程序继续运行。
    原因: HiveContext的创建依赖于本地的hadoop库。


    Exception具体问题 问题行

    解决:
    这边的null其实是环境变量HADOOP_HOME,也就是依赖于HADOOP_HOME/bin/winutils.exe这个文件。

    可以参考: https://blog.csdn.net/love666666shen/article/details/78812622

    2.Task is not serializable.

    任务不可序列化。
    原因: 一般是随意使用Function外的变量,例如JavaSparkContext等。因为完整main的代码在Driver中执行,而计算分片代码在Spark的worker节点执行,因此最好只保证算子数据的传递只有RDD或者DStream.

    3.HiveContext报空指针

    在Windows本地调试,用HiveContext报空指针。
    这个问题就需要本地的一个测试工具winutils.exe。
    因此 问题3 == 问题1.具体问题可以参照问题1解决。

    参考: https://blog.csdn.net/u011817217/article/details/86593706

    如果出现按以上方法依然无法解决或者还存在其他问题,可以直接把hive-site.xml扔到resources目录,访问虚拟机中的hive.


    如上图解决方法 注意窗口操作在SPARK<=1.6时,只支持HiveContext,不支持SQLContext
    4.ROW_NUMBER() OVER ( PARTITION BY ... ORDER BY ... )
    select province,aid,clickCount from (select 
    date,province,aid,clickCount,ROW_NUMBER() OVER ( 
    PARTITION BY province ORDER BY click_count DESC) as rank 
    from tmp_date_city_aid_clickCount ) as twhere rank <= 10
    
    异常的语法错误 问题操作

    原因:
    https://www.e-learn.cn/content/wangluowenzhang/422390

    Spark >= 2.0 时,HiveContext/SQLContext都支持窗口操作。
    Spark <= 1.6 时,只有HiveContext 支持窗口操作。

    解决:
    我使用的版本为1.6,SQLContext,因此导致了这个问题。因此必须使用HiveContext方能够解决。

    5.SQLContext注册临时表的目录无法删除

    ERROR ShutdownHookManager: Exception while deleting Spark temp dir

    问题
    这是个BUG: [SPAKR-8333] HiveContext创建的临时目录无法删除。可见任何软件都有一定的问题和缺陷,需要我们不断完善,为世界代码业做贡献。
    https://issues.apache.org/jira/browse/SPARK-8333?attachmentSortBy=dateTime
    6.HiveContext : java.lang.RuntimeException: java.lang.RuntimeException: The root scratch dir: /tmp/hive on HDFS should be writable. Current permissions are: ---------

    当指定hive-site.xml时,会使用线上的HDFS集群存储本临时文件,因此需要在resource下放入hdfs的配置文件,还需要将hadoop上/tmp/hive/目录创建并赋好权限。

    image.png
    7.部署问题 Exception in thread "main" java.lang.SecurityException: class "javax.servlet.FilterRegistration"'s signer information does not match signer information of other classes in the same package
    image.png

    原因: javax.servlet.FilterRegistration 在多个包中重复产生,导致冲突。
    一般为这个依赖所致:

      <!-- hadoop相关 -->
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-client</artifactId>
            <version>2.4.1</version>
            <exclusions>
                <exclusion>
                    <groupId>javax.servlet</groupId>
                    <artifactId>*</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    

    解决就是加上如上的:

              <exclusions>
                <exclusion>
                    <groupId>javax.servlet</groupId>
                    <artifactId>*</artifactId>
                </exclusion>
            </exclusions>
    
    8.HiveContext连接元数据库mysql时连接数过多的问题,我测试了一下,发现在DStream的Function中使用DataFrame进行sql查询时候,不断产生于hive元数据所在的mysql的连接。导致抛出“too many connections"异常。
    连接数上限为150.png

    看来默认的mysql的最大连接数max_connections=150,我修改/etc/my.cnf中max_connections为1000.观察这种连接上涨是否有上限。


    image.png

    重启mysqld:


    image.png

    相关文章

      网友评论

          本文标题:Spark 电商应用开发过程中出现的问题汇总

          本文链接:https://www.haomeiwen.com/subject/njpxnqtx.html