相关文章推荐
高大的板栗  ·  为什么go语言的hello ...·  1 月前    · 
知识渊博的硬币  ·  VB中 ...·  3 天前    · 
逃跑的键盘  ·  编译器 - ...·  1 年前    · 
善良的刺猬  ·  Gson常用方法-CSDN博客·  1 年前    · 
逃课的筷子  ·  Nvidia Jetson Xavier ...·  2 年前    · 
高大的毛衣  ·  windows 2008 ...·  2 年前    · 

Mvn编译打包见 Maven命令行编译Git源码 & flume-ng-sql-source源码编译打包

使用CDH中的flume监听sql数据时,需要打一个 flume-ng-sql-souce.jar 的插件,将其编译打包后,运行flume任务会出现如下的报错:
java.lang.NoSuchMethodError:
org.apache.flume.Context.getSubProperties(Ljava/lang/String;)Lcom/google/common/collect/ImmutableMap;

19/12/26 18:42:43 ERROR node.PollingPropertiesFileConfigurationProvider: Unhandled error
java.lang.NoSuchMethodError: org.apache.flume.Context.getSubProperties(Ljava/lang/String;)Lcom/google/common/collect/ImmutableMap;
	at org.keedio.flume.source.HibernateHelper.<init>(HibernateHelper.java:49)
	at org.keedio.flume.source.SQLSource.configure(SQLSource.java:85)
	at org.apache.flume.conf.Configurables.configure(Configurables.java:41)
	at org.apache.flume.node.AbstractConfigurationProvider.loadSources(AbstractConfigurationProvider.java:325)
	at org.apache.flume.node.AbstractConfigurationProvider.getConfiguration(AbstractConfigurationProvider.java:105)
	at org.apache.flume.node.PollingPropertiesFileConfigurationProvider$FileWatcherRunnable.run(PollingPropertiesFileConfigurationProvider.java:145)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
	at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)
^C19/12/26 18:47:46 INFO lifecycle.LifecycleSupervisor: Stopping lifecycle supervisor 11

GitHub上给出的解释是:
in flume-1.8.0-cdh6.0.1, org.apache.flume.Context.getSubProperties return java.util.Map, not com.google.common.collect.ImmutableMap.
即CDH中Flume返回类型getSubProperties不匹配:
org.apache.flume.context类在方法flume-ng-configuration-1.9.0-cdh6.2.0.jar、flume-ng-configuration.jar包里面
查看这个两个jar包,里面都是有方法:public Map<String, String> getSubProperties(String prefix)
放进去的flume-ng-sql-source-1.5.2.jar也有这个方法,但是返回值类型不一样,本身的Jar包里面返回值类型是Map,而新增的这个包里面的方法返回值类型是ImmutableMap

public Map<String, String> getSubProperties(String prefix) {
        Preconditions.checkArgument(prefix.endsWith("."),
                "The given prefix does not end with a period (" + prefix + ")");
        Map<String, String> result = Maps.newHashMap();
        synchronized (parameters) {
            for (String key : parameters.keySet()) {
                if (key.startsWith(prefix)) {
                    String name = key.substring(prefix.length());
                    result.put(name, parameters.get(key));
        return ImmutableMap.copyOf(result);

如果问题相同,可以直接使用我的编译好的jar包

一、下载并解压

  1. 从Git开源项目flume-ng-sql-source上下载源码zip包
    在这里插入图片描述
  2. 解压此zip包:(unzip flume-ng-sql-source-develop.zip)
    在这里插入图片描述
  3. 进入解压后的文件夹(cd flume-ng-sql-source-develop),也就是进入到pom.xml所在的文件夹

二、配置Pom.xml文件

修改源码中的pom.xml文件:

  1. 添加CDH官方库:Maven中央仓库中缺少CDH的相关依赖包
    <repositories>
      <!-- 添加CDH官方库 -->
      <repository>
        <id>cloudera</id>
        <url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
      </repository>
    </repositories>
  1. 修改flume-ng-core的版本:需要使用CDH版本的flume,请从CDH仓库找到你所需要的版本,并修改下面的<version>。
        <!-- 原本是1.8.0 
	        <dependency>
	            <groupId>org.apache.flume</groupId>
	            <artifactId>flume-ng-core</artifactId>
	            <version>1.8.0</version>
	            <scope>provided</scope>
	        </dependency> 
        <dependency>
            <groupId>org.apache.flume</groupId>
            <artifactId>flume-ng-core</artifactId>
            <version>1.9.0-cdh6.2.1</version>
            <scope>provided</scope>
        </dependency>

三、编译得到jar包

  1. 在此文件夹下运行mvn package命令,maven将自动下载依赖jar包,并最终将此项目编译成一个jar
    在这里插入图片描述
    在这里插入图片描述

  2. 根据编译结果可知,编译后的jar包在target文件夹下
    在这里插入图片描述

  3. 这里的jar包就是编译后可供使用的jar包了,你可以自行修改 名字(当然可以在使用Eclipse编译指定jar包名字)。

四、将jar包放入flume/lib中

  1. 我的具体的目录的是:/opt/cloudera/parcels/CDH/lib/flume-ng/lib

依次执行命令:

删除原来存在的flume-ng-sql-source-1.5.3.jar
	cd /opt/cloudera/parcels/CDH/lib/flume-ng/lib
	rm flume-ng-sql-source-1.5.3.jar
添加新编译的flume-ng-sql-source-1.5.3.jar
	sudo cp ”你的jar路径“ /opt/cloudera/parcels/CDH/lib/flume-ng/lib
	sudo chmod -R 777 flume-ng-sql-source-1.5.3.jar

五、重新执行flume任务

我经过以上修改编译之后没有问题。

CDH-Flume报错:org.apache.flume.Context.getSubPropertiesLcom/google/common/collect/ImmutableMap; 前言Mvn编译打包见Maven命令行编译Git源码 &amp; flume-ng-sql-source源码编译打包问题使用CDH中的flume监听sql数据时,需要打一个 flume-ng-sql-souce.jar 的插件,将其编译打包后,运行flume任务会出现如下的报错:java.lang.NoSuchMethodError:   org.apache.flume.Context....
一、问题描述 报错信息为: java.lang.NoClassDefFoundError: com/google/common/collect/ImmutableMap 二、问题解决 将划框的问价全部导入到目。问题解决。 原因分析: java.lang.NoClassDefFoundError: com/google/common/collect/ImmutableMap 这边可能存在着两个原因: 第一就是maven的问题, 第二就是目结构添加库的问题。 解决方案: 首先检查目结构添加库 有没有出现错误 打开目结构 分别添加上面两个库 添加完成后,运行程序 这样就测试成功了。 如果这样还是不行的话,
一、前言: 现在需要经mysql的数据定时同步到kafka,一开始用的canal但是不知道为啥没成功,启动起来了但就是数据过去不,查看log也不报错,所以转到flume。发现flume挺好用的,而且灵活。 二、同步原理: Flume原理就不多介绍了,文章一大把,我说一下,连接sql的原理。我调的是网上的开源插件,看了一下log日志,特意分享一下原理,有错误的希望指出,大...
sink: elasticsearch (es) 偶尔会发生,数据无法写入Elasticsearch的问题,channel中堆积的数据达到预设值,但是sink到es却停止了,一条数据也不进行写入。查询日志发现: ERROR org.apache.flume.source.kafka.KafkaSource: KafkaSource EXCE 1、Flume 的安装非常简单,只需要解压即可,当然,前提是已有 Hadoop 环境上传安装包到 数据源所在节点上 然后解压 tar -zxvf apache-flume-1.8.0-bin.tar.gz 然后进入 flume 的目录,修改 conf 下的 flume-env.sh,在里面配置 JAVA_HOME 2、根据数据采集的需求配置采集方案,描述在配置文件中(...
Flume启动时报错如下: (SinkRunner-PollingRunner-DefaultSinkProcessor) [ERROR - org.apache.flume.sink.hdfs.HDFSEventSink.process(HDFSEventSink.java:459)] process failed java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang/Stri
错误java.lang.ClassNotFoundException: com.google.common.collect.ImmutableMap,巨坑
今天打算玩一玩hystrix。添加了POM依赖以后,启动程序,发现报错: java.lang.ClassNotFoundException: com.google.common.collect.ImmutableMap 咦?莫名其妙,仔细检查了一下发现是HystrixCommandAspect引用的一个guava包中的一个类...