解决启动Azkaban报错问题:java.lang.NoSuchMethodError: com.google.common.collect.ImmutableMap.toImmutableMap

 更新时间:2020年05月03日 10:11:09   作者:andyguan01_2  
这篇文章主要介绍了启动Azkaban报错:java.lang.NoSuchMethodError: com.google.common.collect.ImmutableMap.toImmutableMap,需要的朋友可以参考下

问题描述:

启动Azkaban报错:
java.lang.NoSuchMethodError:com.google.common.collect.ImmutableMap.toImmutableMap

解决方法:

从报错信息来看,是找不到toImmutableMap这个方法。首先找到类ImmutableMap对应的Jar包为guava,然后在服务器查找这个Jar包:

find / -name "guava*.jar"

发现除了Azkaban安装目录,其他程序目录下也有guava包。Azkaban里面的guava包版本为guava-21.0.jar,其他程序的版本有11,14,17,18,19,21,25,怀疑是由于有多个guava包,而使用的是低版本的包,里面没有toImmutableMap方法。

接下来,看看azkaban运行时候的classpath是什么样的。查看Web Server启动文件start-web.sh

more /u01/app/azkaban-3.50.0/azkaban-web-server-0.1.0-SNAPSHOT/bin/start-web.sh

内容为:

#!/bin/bash

script_dir=$(dirname $0)

${script_dir}/internal/internal-start-web.sh >webServerLog_`date +%F+%T`.out 2>&1 &

调用的是internal-start-web.sh,于是再查看:

more /u01/app/azkaban-3.50.0/azkaban-web-server-0.1.0-SNAPSHOT/bin/internal/internal-start-web.sh

内容为:

#!/bin/bash

azkaban_dir=$(dirname $0)/../..

# Specifies location of azkaban.properties, log4j.properties files
# Change if necessary
conf=$azkaban_dir/conf

if [[ -z "$tmpdir" ]]; then
tmpdir=/tmp
fi

for file in $azkaban_dir/lib/*.jar;
do
 CLASSPATH=$CLASSPATH:$file
done

for file in $azkaban_dir/extlib/*.jar;
do
 CLASSPATH=$CLASSPATH:$file
done

for file in $azkaban_dir/plugins/*/*.jar;
do
 CLASSPATH=$CLASSPATH:$file
done

if [ "$HADOOP_HOME" != "" ]; then
    echo "Using Hadoop from $HADOOP_HOME"
    CLASSPATH=$CLASSPATH:$HADOOP_HOME/conf:$HADOOP_HOME/*
    JAVA_LIB_PATH="-Djava.library.path=$HADOOP_HOME/lib/native/Linux-amd64-64"
else
    echo "Error: HADOOP_HOME is not set. Hadoop job types will not run properly."
fi

if [ "$HIVE_HOME" != "" ]; then
    echo "Using Hive from $HIVE_HOME"
    CLASSPATH=$CLASSPATH:$HIVE_HOME/conf:$HIVE_HOME/lib/*
fi

echo $azkaban_dir;
echo $CLASSPATH;

executorport=`cat $conf/azkaban.properties | grep executor.port | cut -d = -f 2`
serverpath=`pwd`

if [[ -z "$AZKABAN_OPTS" ]]; then
 AZKABAN_OPTS="-Xmx4G"
fi
# Set the log4j configuration file
if [ -f $conf/log4j.properties ]; then
 AZKABAN_OPTS="$AZKABAN_OPTS -Dlog4j.configuration=file:$conf/log4j.properties -Dlog4j.log.dir=$azkaban_dir/logs"
else
 echo "Exit with error: $conf/log4j.properties file doesn't exist."
 exit 1;
fi
AZKABAN_OPTS="$AZKABAN_OPTS -server -Dcom.sun.management.jmxremote -Djava.io.tmpdir=$tmpdir -Dexecutorport=$executorport -Dserverpat
h=$serverpath"

java $AZKABAN_OPTS $JAVA_LIB_PATH -cp $CLASSPATH azkaban.webapp.AzkabanWebServer -conf $conf $@ &

echo $! > $azkaban_dir/currentpid

可以看到,Azkaban安装目录的jar包是在原$CLASSPATH之后的,如下:

for file in $azkaban_dir/lib/*.jar;
do
 CLASSPATH=$CLASSPATH:$file
done

这样,其他目录下的guava包就会被先找到使用。好了,问题原因找到了,解决方法就很简单了,将CLASSPATH=$CLASSPATH:$file改为CLASSPATH=$file:$CLASSPATH,让Azkaban安装目录下的guava包先被找到使用。另外,Executor Server的启动文件/u01/app/azkaban-3.50.0/azkaban-exec-server-0.1.0-SNAPSHOT/bin/internal/internal-start-executor.sh也需要做同样修改。

修改完成后,再启动服务就正常了。(Executor Server和Web Server都需要重新启动)

完毕。

到此这篇关于启动Azkaban报错:java.lang.NoSuchMethodError: com.google.common.collect.ImmutableMap.toImmutableMap的文章就介绍到这了,更多相关启动Azkaban报错内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Scala 环境搭建及IDEA工具的配置使用教程

    Scala 环境搭建及IDEA工具的配置使用教程

    这篇文章主要介绍了Scala 之 环境搭建 及 工具IDEA的配置使用,本文通过实例图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • Win10环境下 编译 和 运行 x264的详细过程

    Win10环境下 编译 和 运行 x264的详细过程

    这篇文章主要介绍了Win10环境下编译和运行x264的详细过程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-10-10
  • flash 挡住层的解决方法

    flash 挡住层的解决方法

    使用层制作的下拉菜单下正好有FLASH动画,菜单被动画遮挡.
    2009-08-08
  • 关于postman上传文件执行成功而使用collection runner执行失败的问题

    关于postman上传文件执行成功而使用collection runner执行失败的问题

    这篇文章主要介绍了关于postman上传文件执行成功而使用collection runner执行失败的问题,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-12-12
  • VSCode 远程登录开发(带免密)

    VSCode 远程登录开发(带免密)

    这篇文章主要介绍了VSCode 远程登录开发(带免密),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-05-05
  • 浅谈解决360兼容模式浏览器的方法

    浅谈解决360兼容模式浏览器的方法

    这篇文章给大家分享的是关于解决360兼容模式浏览器的方法,对于大家日常开发还是很实用,有需要的可以参考借鉴,下面一起来看看。
    2016-08-08
  • yum安装telnet的步骤

    yum安装telnet的步骤

    Telnet协议是TCP/IP协议族中的一员,是Internet远程登录服务的标准协议和主要方式,Telnet是常用的远程控制Web服务器的方法,本文给大家分享yum安装telnet的步骤,感兴趣的朋友一起看看吧
    2020-05-05
  • git分支或指定文件回退到指定版本命令详解

    git分支或指定文件回退到指定版本命令详解

    作为一名后端开发,相信大家一定遇到过这样的情景,代码开发人员过多,并且开发分支过多,导致代码版本管理困难,这样就难免遇到一些代码合并出错,下面这篇文章主要给大家介绍了关于git分支或指定文件回退到指定版本命令的相关资料,需要的朋友可以参考下
    2023-12-12
  • 一文掌握git push命令

    一文掌握git push命令

    git push就是将本地的更新推送到远程别名,这篇文章主要介绍了git push命令详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-01-01
  • git分支(branch)操作相关命令及分支命令的使用

    git分支(branch)操作相关命令及分支命令的使用

    这篇文章主要介绍了git分支(branch)操作相关命令及分支命令的使用的相关资料,需要的朋友可以参考下
    2017-10-10

最新评论