解决启动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报错内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Azkaban报错-azkaban.executor.ExecutorManagerException: No active executors found

    Issue 2019/05/09 21:50:07.380 +0800 ERROR [ExecutorManager] [Azkaban] No active executors found 2019/05/09 21:50:07.380 +0800 ERROR [StdOutErrRedirect] [Azkaban] Exception in thread "main" 2019/05/09 21:50:07.380 +0800 ERROR [StdOutErrRedirect]

  • Azkaban3.81.x部署过程及遇到的坑

     Azkaban是什么? Azkaban是由Linkedin公司推出的一个批量工作流任务调度器,主要用于在一个工作流内以一个特定的顺序运行一组工作和流程,它的配置是通过简单的key:value对的方式,通过配置中的dependencies 来设置依赖关系,这个依赖关系必须是无环的,否则会被视为无效的工作流.Azkaban使用job配置文件建立任务之间的依赖关系,并提供一个易于使用的web用户界面维护和跟踪你的工作流. 一.前提安装 1.1 Java1.8环境搭建 1) 下载jdk1.8并解压:

  • 解决启动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包.Az

  • 快速解决VS Code报错:Java 11 or more recent is required to run. Please download and install a recent JDK

    VS Code确实不是最好的Java编译器(好吧,它或许都不该算是个编译器),在使用的过程完全依赖咱们自己写一些配置或者使用一些插件,但是因为它外观好看,我还是比较喜欢用这个.哪怕遇到的问题比别的编译器多得多.排查错误原因的过程中也能学到不少东西. 近期遇到这个问题,每次打开VS Code的时候,右下角会弹出一个弹框,上面写着: Java 11 or more recent is required to run. Please download and install a recent JDK.

  • 永久解决 Intellij idea 报错:Error :java 不支持发行版本5的问题

    初次在IDEA使用maven的时候遇到的问题 搜索之后得到解决方案 idea 报错:Error : java 不支持发行版本5 实际测试后该博主提供的方法可以解决. 但是每次创建新项目的时候都要设置一次. 这里提供一个 一劳永逸的方法 在 maven地址\conf\setting.xml 中设置默认jdk版本- 把图中代码添加到-中 我使用的是jdk11 复制代码时需要修改成自己的jkd版本 例如jkd8 code: <profile> <id>development</id

  • Tomcat启动时报错:java.lang.UnsatisfiedLinkError的解决

    问题 之前tomcat启动老是报错,虽然不影响项目的启动运行,但是有强迫症的程序员会心里不爽: 如下: 问题分析 由于本机安装的jdk版本与tomcat中使用的jdk版本不一致导致的. 解决方法 后面我把原先tomcat启动环境用的jdk1.7改为了本机安装的jdk1.8就不在报错. 具体过程: 在myeclipse中点击window→preference→在搜索框中输入Tomcat→选择安装的tomcat版本,我这里是选择Tomcat 7.x→点击JDK→在Tomcat 7.x JDK nam

  • SpringBoot启动yaml报错的解决

    SpringBoot启动yaml报错 报错找不到org.yaml里的一个方法 10:45:54.742 [main] ERROR org.springframework.boot.SpringApplication - Application run failed java.lang.NoSuchMethodError: org.yaml.snakeyaml.nodes.ScalarNode.getScalarStyle()Lorg/yaml/snakeyaml/DumperOptions$Sc

  • 解决idea导入ssm项目启动tomcat报错404的问题

    用idea写ssm项目,基于之前一直在用spring boot 对于idea如何运行ssm花费了一番功夫 启动Tom act一直在报404 我搜了网上各种解决办法都不行,花费一天多的时间解决不了 就是在pom中添加下面代码 <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin<

  • Spring Boot 2.6.x整合Swagger启动失败报错问题的完美解决办法

    目录 问题 原因 解决方案 方案一(治标) 方案二(治本) 总结 问题 Spring Boot 2.6.x版本引入依赖 springfox-boot-starter (Swagger 3.0) 后,启动容器会报错: Failed to start bean ‘ documentationPluginsBootstrapper ‘ ; nested exception… 原因 Springfox 假设 Spring MVC 的路径匹配策略是 ant-path-matcher,而 Spring Bo

  • 解决Maven 项目报错 java.httpservlet和synchronized使用方法

    使用java8 的lanmbe表达式时,使用java1.8编译,则会报错 需要在pom.xml的<bulid></build>中添加 <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.3.2</versi

  • django启动uwsgi报错的解决方法

    uwsgi介绍 uWSGI是一个Web服务器,它实现了WSGI协议.uwsgi.http等协议.Nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换. 要注意 WSGI / uwsgi / uWSGI 这三个概念的区分. WSGI是一种Web服务器网关接口.它是一个Web服务器(如nginx,uWSGI等服务器)与web应用(如用Flask框架写的程序)通信的一种规范. uwsgi是一种线路协议而不是通信协议,在此常用于在uWSGI服务器与其他网络服务器的数据通信. 而u

  • 解决MAC上启动mongod报错exiting with code 1的问题

    今天启动mongod数据库时遇到问题: [js] Error: couldn't connect to server 127.0.0.1:27017, connection attempt failed: SocketException: Error connecting to 127.0.0.1:27017 :: caused by :: Connection refused : connect@src/mongo/shell/mongo.js:341:17 @(connect):2:6 F

随机推荐