我正在尝试将Flume(来自Cloudera CDH-5.11.0的1.6)代理配置为使用IBM WebSphere MQ 9.1.1.0作为源。
由于没有官方文档,我遵循这些资源(尽管它们来自旧版本):
我这样做了:
INITIAL_CONTEXT_FACTORY=com.sun.jndi.fscontext.RefFSContextFactory
PROVIDER_URL=file:/C:/temp/jmsbindings
SECURITY_AUTHENTICATION=none
test_IBM_MQ.sources.amq_ibm.type = jms test_IBM_MQ.sources.amq_ibm.initialContextFactory = com.sun.jndi.fscontext.RefFSContextFactory test_IBM_MQ.sources.amq_ibm.connectionFactory = flumeConnectionFactory test_IBM_MQ.sources.amq_ibm.providerURL = file:/// etc / flume / conf test_IBM_MQ.sources.amq_ibm.destinationName = myDestination test_IBM_MQ.sources.amq_ibm.destinationType = QUEUE
当我最终启动我的Flume代理时,我收到此错误:
java.lang.ClassCastException:javax.naming.Reference无法强制转换为javax.jms.ConnectionFactory
接下来是这个小Stacktrace
由于配置java.lang.ClassCastException期间的错误,源amq_ibm已被删除:javax.naming.Reference无法转换为org.apache.flume.source.jms.JMSSource.doConfigure中的javax.jms.ConnectionFactory(JMSSource.java: 231)org.apache.flume.source.BasicSourceSemantics.configure(BasicSourceSemantics.java:65)atg.apache.flume.source.AbstractPollableSource.configure(AbstractPollableSource.java:65)at org.apache.flume.conf.Configurables位于org.apache.flume.node.AbstractConfigurationProvider.loadSources(AbstractConfigurationProvider.java:326)的.configure(Configurables.java:41)atg.apache.flume.node.AbstractConfigurationProvider.getConfiguration(AbstractConfigurationProvider.java:101)。 java.util.concurrent.Executors上的apache.flume.node.PollingPropertiesFileConfigurationProvider $ FileWatcherRunnable.run(PollingPropertiesFileConfigurationProvider.java:141)java.util.concurrent.FutureTask.runAndReset上的$ RunnableAdapter.call(Executors.java:511)(FutureTask。的java:308)在java.util.concurrent.ThreadPoolExecutor.runWorker的java.util.concurrent.ScheduledThreadPoolExecutor $ ScheduledFutureTask.access $ 301(ScheduledThreadPoolExecutor.java:180)java.util.concurrent.ScheduledThreadPoolExecutor $ ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294) ThreadPoolExecutor.java:1142)java.lang.Thread.run上的java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:617)(Thread.java:745)
检查Flume源,爆炸线如下
connectionFactory = (ConnectionFactory) initialContext.lookup(connectionFactoryName);
我试图遵循这个旧的相关问题
但是,由于从IBM mq v8升级到jms2.0,因此建议加载的一些jar不再存在:
我开始怀疑是否有一些不喜欢JMS2.0的Flume 1.6
有帮助吗?谢谢
我不是专家但是:
test_IBM_MQ.sources.amq_ibm.connectionFactory=flumeConnectionFactory
我相信该参数期待QueueConnectionFactory(QCF)。
删除“CF”并将QCF添加到MQ JNDI:
DEF QCF(flumeConnectionFactory) QMGR(myQueueManager) HOSTNAME(myHostName) PORT(1414) CHANNEL(myChannelName) TRANSPORT(CLIENT)
此外,MQ JNDI(“。binddings”)文件所在的位置是?
test_IBM_MQ.sources.amq_ibm.providerURL = file:///etc/flume/conf
基于您上面提到的“PROVIDER_URL”参数,我认为它应该是:
test_IBM_MQ.sources.amq_ibm.providerURL = file:/C:/temp/jmsbindings