問題:
用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。