问题描述:
启动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都需要重新启动)
完毕。
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?
更新日志
- 《哈迪斯2》发售被骂,你认为发售日需要提前公布吗?
- 潘活活(TiffanyPoon)《日记舒曼DiariesSchumann》(2024)[Hi-Res96kHz_24bitFLAC]
- 林一峰2012-家课新曲+精选2CD[引进版][WAV+CUE]
- 叶蕴仪1990-S.O.S[日本版][WAV+CUE]
- 《塔瑞斯世界》正式定档6.19!九大职业先行登场
- 《地平线:零之曙光》确认登陆WeGame!5.31上线
- 育碧《渡神纪》官宣登陆Wegame!包含全部DLC内容
- 陈慧娴《极品之选》环球SACD天碟[DFF][1.9G]
- 沈媛《沈媛 国家大剧院管风琴》[320K/MP3][229.22MB]
- 沈媛《沈媛 国家大剧院管风琴》[FLAC/分轨][368.14MB]
- ECHO.1990-GOODBYE.SUMMER【丰艺】【WAV+CUE】
- 林宇中.2008-干物世界(引进版)【海蝶】【WAV+CUE】
- 二手玫瑰.2003-二手玫瑰【国际文化】【WAV+CUE】
- 半永恒统辖矩阵隐藏成就怎么做?成就攻略
- 托马邀约任务怎么做?全结局完成攻略分享