我正在尝试将Flume(Cloudera CDH-5.11.0中的1.6)代理配置为使用IBM WebSphere MQ 9.1.1.0作为源。
由于没有官方文档,因此我遵循了这些资源(尽管它们来自较早的版本):
我这样进行:
安装了MQ 9.1.1.0客户端并配置了JMSAdmin.conf
INITIAL_CONTEXT_FACTORY=com.sun.jndi.fscontext.RefFSContextFactory
PROVIDER_URL=file:/C:/temp/jmsbindings
SECURITY_AUTHENTICATION=none
创建了.bindings文件:
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 =队列
当我最终启动Flume代理时,出现此错误:
java.lang.ClassCastException:javax.naming.Reference无法转换为javax.jms.ConnectionFactory
接着是这个小的Stacktrace
由于配置期间发生错误,源amq_ibm已被删除 java.lang.ClassCastException:无法将javax.naming.Reference强制转换为javax.jms.ConnectionFactory 在org.apache.flume.source.jms.JMSSource.doConfigure(JMSSource.java:231) 在org.apache.flume.source.BasicSourceSemantics.configure(BasicSourceSemantics.java:65) 在org.apache.flume.source.AbstractPollableSource.configure(AbstractPollableSource.java:65) 在org.apache.flume.conf.Configurables.configure(Configurables.java:41) 在org.apache.flume.node.AbstractConfigurationProvider.loadSources(AbstractConfigurationProvider.java:326) 在org.apache.flume.node.AbstractConfigurationProvider.getConfiguration(AbstractConfigurationProvider.java:101) 在org.apache.flume.node.PollingPropertiesFileConfigurationProvider $ FileWatcherRunnable.run(PollingPropertiesFileConfigurationProvider.java:141) 在java.util.concurrent.Executors $ RunnableAdapter.call(Executors.java:511) 在java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308) 在java.util.concurrent.ScheduledThreadPoolExecutor $ ScheduledFutureTask.access $ 301(ScheduledThreadPoolExecutor.java:180) 在java.util.concurrent.ScheduledThreadPoolExecutor $ ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294) 在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 在java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:617) 在java.lang.Thread.run(Thread.java:745)
检查Flume来源,以下是爆炸线
connectionFactory = (ConnectionFactory) initialContext.lookup(connectionFactoryName);
我试图遵循这个古老的相关问题
但是,由于要从IBM mq v8升级到jms2.0,因此不再建议加载某些jar:
我开始怀疑Flume 1.6中有什么不喜欢JMS2.0
有帮助吗?谢谢
答案 0 :(得分:0)
我不是专家,但是:
test_IBM_MQ.sources.amq_ibm.connectionFactory=flumeConnectionFactory
我认为该参数需要QueueConnectionFactory(QCF)。
删除“ CF”并将QCF添加到您的MQ JDNI:
DEF QCF(flumeConnectionFactory) QMGR(myQueueManager) HOSTNAME(myHostName) PORT(1414) CHANNEL(myChannelName) TRANSPORT(CLIENT)
而且,MQ JNDI(“。bindings”)文件在这里吗?
test_IBM_MQ.sources.amq_ibm.providerURL = file:///etc/flume/conf
根据您上面提到的“ PROVIDER_URL”参数,我认为应该是:
test_IBM_MQ.sources.amq_ibm.providerURL = file:/C:/temp/jmsbindings