问题一
java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;)
原因:
- [ 1 ] hadoop进入了安全模式导致代码无法正常运行。
- [ 2 ] 还有可能是尝试调用 Google Guava 库中的 Preconditions.checkArgument 方法时出现了问题。flume和kafka的lib下面的guava.jar版本不一致造成的。
解决办法:
[ 1 ] 执行以下命令来检查Hadoop是否处于安全模式:
hdfs dfsadmin -safemode get
或者
bin/hadoop dfsadmin -safemode get
该命令将返回当前安全模式的状态,可能的状态包括ON和OFF。
如果Hadoop处于安全模式,执行以下命令来退出安全模式:
hdfs dfsadmin -safemode leave
或者
bin/hadoop dfsadmin -safemode leave
该命令将使集群退出安全模式,允许正常的读写操作。
[ 2 ] 只需要删除flume的lib下面的guava包,然后拷贝kafka下面的guava包给flume即可。
位置:/usr/local/src/flume/lib
flume的lib下面的为guava-11.0.2.jar
位置:/usr/local/src/kafka/libs
kafka下面的为guava-20.0.jar
cp guava-20.0.jar /usr/local/src/flume/lib
问题二
Call From master/192.168.6.45 to master:9000 failed on connection exception: java.net.ConnectException: 拒绝连接; For more details see: http://wiki.apache.org/hadoop/ConnectionRefuse
原因:
是由于flume文件与hadoop配置的文件端口不一致导致的
解决办法:
去查看flume配置文件中的端口是否与hadoop配置文件core-site.xml的端口是否保持一致
hadoop配置文件
flume配置文件
修改完后记得保存分发到其他节点,然后重新启动集群
启动配置文件:
flume-ng agent -n a2 -f /usr/local/src/flume/conf/flume-hdfs.conf -Dflume.root.logger=INFO,console