netty版本冲突?

6yjfywim  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(680)

我有一个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)
trnvg8h3

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 * 这是一种罕见的情况,但您可以应用此方法来克服库不兼容的情况。确保程序仍在运行。如果以这种方式更改基础库,则原始程序将无法运行某些更改。一个设计良好的图书馆应该不知道这些变化。

相关问题