我有一个hadoop map reduce类,它在amazonemr上运行,并输出到hdfs平面文件。一切都很好,但现在我需要输出到一个Cassandra数据库,也在aws上运行。我构建并运行了一个本地客户机,并使其正常工作,然后将cassandra编写代码转移到我的hadoop项目中。问题是,亚马逊似乎在吸引人 /home/hadoop/lib/netty-3.2.4.Final.jar
对于hadoop1.0.3,但是在aws上运行的cassandra是1.2.6,使用 netty-3.5.9.Final.jar
.
我能做些什么来防止或避免这种冲突?我可以在亚马逊emr的旁边画我的新版netty吗?
在emr上运行jar时出现的错误如下:
Exception in thread "main" java.lang.NoSuchMethodError: org.jboss.netty.handler.codec.frame.LengthFieldBasedFrameDecoder.<init>(IIIIIZ)V
at org.apache.cassandra.transport.Frame$Decoder.<init>(Frame.java:147)
at com.datastax.driver.core.Connection$PipelineFactory.getPipeline(Connection.java:616)
at org.jboss.netty.bootstrap.ClientBootstrap.connect(ClientBootstrap.java:212)
at org.jboss.netty.bootstrap.ClientBootstrap.connect(ClientBootstrap.java:188)
at com.datastax.driver.core.Connection.<init>(Connection.java:111)
at com.datastax.driver.core.Connection.<init>(Connection.java:56)
at com.datastax.driver.core.Connection$Factory.open(Connection.java:387)
at com.datastax.driver.core.ControlConnection.tryConnect(ControlConnection.java:211)
at com.datastax.driver.core.ControlConnection.reconnectInternal(ControlConnection.java:174)
at com.datastax.driver.core.ControlConnection.connect(ControlConnection.java:87)
at com.datastax.driver.core.Cluster$Manager.init(Cluster.java:609)
at com.datastax.driver.core.Cluster$Manager.access$100(Cluster.java:553)
at com.datastax.driver.core.Cluster.<init>(Cluster.java:67)
at com.datastax.driver.core.Cluster.buildFrom(Cluster.java:94)
at com.datastax.driver.core.Cluster$Builder.build(Cluster.java:534)
at GraphAnalysis.MatrixBuilder.compileOutput(MatrixBuilder.java:282)
at GraphAnalysis.MatrixBuilder.main(MatrixBuilder.java:205)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.hadoop.util.RunJar.main(RunJar.java:187)
1条答案
按热度按时间trnvg8h31#
我在使用netty-3.2.4.jar的一个内部模块中遇到了类似的问题,它缺少一个函数。
最终我不得不对jar文件做心脏直视手术。
使用展开嵌入旧netty库的jar文件
jar -xvf oldlibrary.jar
删除文件夹org/jboss/netty。然后将新的nettyjar文件扩展到一个单独的文件夹中
将新org/jboss/netty文件夹及其内容复制到旧位置
cp -prf netty .
创建新的jar包jar -cvf ../new_jarfile.jar *
这是一种罕见的情况,但您可以应用此方法来克服库不兼容的情况。确保程序仍在运行。如果以这种方式更改基础库,则原始程序将无法运行某些更改。一个设计良好的图书馆应该不知道这些变化。