CDH版本Flume報錯:java.lang.NoSuchMethodError

問題:

用Flume同步mysql數據到kafka的時候,會導入一個flume-ng-sql-souce.jar的插件。但開源社區的插件是apache flume版本的,與CDH版本的不兼容,會報如下錯誤:

java.lang.NoSuchMethodError:

           org.apache.flume.Context.getSubProperties(Ljava/lang/String;)Lcom/google/common/collect/ImmutableMap;

 


20/4/16 15:40:23 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)

解決方案:

1、導入和CDH版本的Flume的包:不想自己弄的可自行下載已經編譯好的jar

      CDH6.2,CDH6.3只要flume版本是1.9的通用:https://download.csdn.net/download/molidiyi/12337364

2、自己編譯:下載地址:https://github.com/keedio/flume-ng-sql-source

操作步驟:

1)導入項目至idea:

2)修改maven的settings.xml文件,修改數據源,在mirritOf裏面添加!cloudera

	<mirror>
		<id>aliyunmaven</id>
		<mirrorOf>*,!cloudera</mirrorOf>
		<name>阿里雲公共倉庫</name>
		<url>https://maven.aliyun.com/repository/public</url>
	</mirror>

3)查看idea的是不是修改後的xml文件。file->Settings->build,Execution,Deployment->build Tools->Maven

4)修改pom.xml

添加CDH官方數據源

    <repositories>
        <!-- 添加CDH官方庫 -->
        <repository>
            <id>cloudera</id>
            <url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
        </repository>
    </repositories>

 導入flume版本包

        <dependency>
            <groupId>org.apache.flume</groupId>
            <artifactId>flume-ng-core</artifactId>
            <version>1.9.0-cdh6.2.0</version>
            <scope>provided</scope>
        </dependency>

5)maven打包,將target下的jar包導入到flume的lib庫即可:有強迫症的同學包名可自行修改。

到此結束!!!

有嫌麻煩的小夥伴,也可以在文章上面直接下載,目前CDH安裝的只要是1.9版本的都理論上都可以使用,本人CDH6.2.0。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章