0

Guice 4.0 を利用する社内フレームワークを使用して、HBase テーブルに対して map reduce を実行しようとしています。

糸がバージョン 3.0 を使用しているようで、型の不一致が発生しています。

2016-03-25 08:19:45,784 ERROR [main] org.apache.hadoop.mapred.YarnChild: Error running child : java.lang.NoSuchMethodError: com.google.inject.multibindings.MultibindingsScanner$1.binder()Lcom/shaded/google/inject/Binder; at com.google.inject.multibindings.MultibindingsScanner$1.configure(MultibindingsScanner.java:53) at com.google.inject.AbstractModule.configure(AbstractModule.java:59) at com.google.inject.spi.Elements$RecordingBinder.install(Elements.java:223) at com.google.inject.AbstractModule.install(AbstractModule.java:118) at my.packagename.client.KafkaModule.configure(KafkaModule.java:36) at com.google.inject.AbstractModule.configure(AbstractModule.java:59) at com.google.inject.spi.Elements$RecordingBinder.install(Elements.java:223) at com.google.inject.spi.Elements.getElements(Elements.java:101) at com.google.inject.internal.InjectorShell$Builder.build(InjectorShell.java:133) at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:103) at com.google.inject.Guice.createInjector(Guice.java:95) at com.google.inject.Guice.createInjector(Guice.java:72) at com.google.inject.Guice.createInjector(Guice.java:62) at my.packagename.hbase_fix.CleanerMapper.setup(CleanerMapper.java:82) at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:143) at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:787) at org.apache.hadoop.mapred.MapTask.run(MapTask.java:341) at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:164) at java.security.AccessController.doPrivileged(Native Method) at javax.security.auth.Subject.doAs(Subject.java:422) at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1657) at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158)

同じ作業で、fasterxml と同様の不一致があったため、を使用しmaven-shade-pluginて再配置を成功させましたが、com.google.inject ではあまり成功していません。

<relocations> <relocation> <pattern>com.fasterxml</pattern> <shadedPattern>com.shaded.fasterxml</shadedPattern> <excludes> <exclude>com.fasterxml.*</exclude> </excludes> </relocation> <relocation> <pattern>org.apache.commons.lang</pattern> <shadedPattern>org.shaded.apache.commons.lang</shadedPattern> <excludes> <exclude>org.apache.commons.lang.*</exclude> </excludes> </relocation> <relocation> <pattern>com.google.inject.Binder</pattern> <shadedPattern>com.shaded.google.inject.Binder</shadedPattern> </relocation> <relocation> <pattern>com.google.inject.multibindings</pattern> <shadedPattern>com.shaded.google.inject.multibindings</shadedPattern> </relocation> </relocations>

特に google.inject を使用して MapReduce ジョブでラウンド タイプの不一致を取得する方法に関する提案はありますか?

4

1 に答える 1

0

これに対する簡単な解決策はないと思います。結局、コードが実行されるように、mapreduce クラスパスに guice4 のコピーを最初に配置するよう強制することになりました。

理想的ではありませんが、見つかった唯一の解決策

于 2016-04-27T09:38:27.247 に答える