2017-01-31 9 views
0

fatjarでパックされ、EMR Hadoopクラスタで実行されているスケーリングジョブがあります。最近、マップ内にDynamoDB接続が必要な新機能が追加されました。しかし、すぐにマッパーがDynamoDBの初期化に達すると、それは次の例外スロー:EMRジョブ内でAWS Java SDKを使用

Error in configuring object 
    at org.apache.hadoop.util.ReflectionUtils.setJobConf(ReflectionUtils.java:112) 
    at org.apache.hadoop.util.ReflectionUtils.setConf(ReflectionUtils.java:78) 
    at org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:136) 
    at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:450) 
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:344) 
    at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:172) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at javax.security.auth.Subject.doAs(Subject.java:415) 
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1657) 
    at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:166) 
Caused by: java.lang.reflect.InvocationTargetException 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at org.apache.hadoop.util.ReflectionUtils.setJobConf(ReflectionUtils.java:109) 
    ... 9 more 
Caused by: cascading.flow.FlowException: internal error during mapper configuration 
    at cascading.flow.hadoop.FlowMapper.configure(FlowMapper.java:102) 
    ... 14 more 
Caused by: com.esotericsoftware.kryo.KryoException: Unable to find class: com.amazonaws.http.conn.$Proxy7 
Serialization trace: 
connManager (com.amazonaws.http.impl.client.SdkHttpClient) 
httpClient (com.amazonaws.http.AmazonHttpClient) 
client (awscala.dynamodbv2.DynamoDBClient) 
client (me.chuwy.enrich.hadoop.DuplicateStorage$DynamoDbStorage) 
duplicateStorage (me.chuwy.enrich.hadoop.ShredJob) 
$outer (me.chuwy.enrich.hadoop.ShredJob$$anonfun$11) 
    at com.esotericsoftware.kryo.util.DefaultClassResolver.readName(DefaultClassResolver.java:138) 
    at com.esotericsoftware.kryo.util.DefaultClassResolver.readClass(DefaultClassResolver.java:115) 
    at com.esotericsoftware.kryo.Kryo.readClass(Kryo.java:610) 
    at com.esotericsoftware.kryo.serializers.FieldSerializer$ObjectField.read(FieldSerializer.java:599) 
    at com.esotericsoftware.kryo.serializers.FieldSerializer.read(FieldSerializer.java:221) 
    at com.esotericsoftware.kryo.Kryo.readObject(Kryo.java:648) 
    at com.esotericsoftware.kryo.serializers.FieldSerializer$ObjectField.read(FieldSerializer.java:605) 
    at com.esotericsoftware.kryo.serializers.FieldSerializer.read(FieldSerializer.java:221) 
    at com.esotericsoftware.kryo.Kryo.readObject(Kryo.java:648) 
    at com.esotericsoftware.kryo.serializers.FieldSerializer$ObjectField.read(FieldSerializer.java:605) 
    at com.esotericsoftware.kryo.serializers.FieldSerializer.read(FieldSerializer.java:221) 
    at com.esotericsoftware.kryo.Kryo.readObject(Kryo.java:648) 
    at com.esotericsoftware.kryo.serializers.FieldSerializer$ObjectField.read(FieldSerializer.java:605) 
    at com.esotericsoftware.kryo.serializers.FieldSerializer.read(FieldSerializer.java:221) 
    at com.esotericsoftware.kryo.Kryo.readClassAndObject(Kryo.java:729) 
    at com.twitter.chill.SomeSerializer.read(SomeSerializer.scala:25) 
    at com.twitter.chill.SomeSerializer.read(SomeSerializer.scala:19) 
    at com.esotericsoftware.kryo.Kryo.readObject(Kryo.java:648) 
    at com.esotericsoftware.kryo.serializers.FieldSerializer$ObjectField.read(FieldSerializer.java:605) 
    at com.esotericsoftware.kryo.serializers.FieldSerializer.read(FieldSerializer.java:221) 
    at com.esotericsoftware.kryo.Kryo.readObject(Kryo.java:648) 
    at com.esotericsoftware.kryo.serializers.FieldSerializer$ObjectField.read(FieldSerializer.java:605) 
    at com.esotericsoftware.kryo.serializers.FieldSerializer.read(FieldSerializer.java:221) 
    at com.esotericsoftware.kryo.Kryo.readClassAndObject(Kryo.java:729) 
    at com.twitter.chill.SomeSerializer.read(SomeSerializer.scala:25) 
    at com.twitter.chill.SomeSerializer.read(SomeSerializer.scala:19) 
    at com.esotericsoftware.kryo.Kryo.readClassAndObject(Kryo.java:729) 
    at com.twitter.chill.SerDeState.readClassAndObject(SerDeState.java:61) 
    at com.twitter.chill.KryoPool.fromBytes(KryoPool.java:94) 
    at com.twitter.chill.Externalizer.fromBytes(Externalizer.scala:145) 
    at com.twitter.chill.Externalizer.maybeReadJavaKryo(Externalizer.scala:158) 
    at com.twitter.chill.Externalizer.readExternal(Externalizer.scala:148) 
    at java.io.ObjectInputStream.readExternalData(ObjectInputStream.java:1839) 
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1796) 
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350) 
    at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1997) 
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1921) 
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1798) 
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350) 
    at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1997) 
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1921) 
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1798) 
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350) 
    at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1997) 
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1921) 
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1798) 
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350) 
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:370) 
    at java.util.HashMap.readObject(HashMap.java:1180) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1058) 
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1897) 
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1798) 
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350) 
    at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1997) 
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1921) 
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1798) 
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350) 
    at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1997) 
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1921) 
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1798) 
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350) 
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:370) 
    at cascading.flow.hadoop.util.JavaObjectSerializer.deserialize(JavaObjectSerializer.java:101) 
    at cascading.flow.hadoop.util.HadoopUtil.deserializeBase64(HadoopUtil.java:312) 
    at cascading.flow.hadoop.util.HadoopUtil.deserializeBase64(HadoopUtil.java:293) 
    at cascading.flow.hadoop.FlowMapper.configure(FlowMapper.java:81) 
    ... 14 more 
Caused by: java.lang.ClassNotFoundException: com.amazonaws.http.conn.$Proxy7 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
    at java.lang.ClassLoader.loadClass 

を私はという問題がEMR AMIは/usr/share/aws/aws-java-sdk/に、独自のjarファイルで出荷されている点であることができ、彼らは私が脂肪に含まLIBSと矛盾だと思うjar、私はそれらを削除しようとしましたが、他のEMRの手順は失敗しています。

+0

あなたのファットジャーにはどのようなAWS Java SDKの依存関係(およびバージョン)が含まれていますか?あなたが言及したように、EMRには現在、/ usr/share/aws/aws-java-sdkにAWS Java SDK 1.10.xが含まれているため、実行時に問題の原因となるAWS Java SDKのバージョンが異なります。あなたがあなたのjarファイルにインクルードしているバージョンをシェード/再配置できるかもしれません(Mavenを使用している場合はmaven-shade-pluginを参照してください)が、他の問題の原因となることがあります。 –

+0

ありがとう@JonathanKelly。私は推移的な依存関係として1.10.77を使用しますが、〜1.10.56〜1.11.30までの異なるバージョンを試しました。私はまた、ファットジャーからそれらを除外し、ファットジャーと同じバージョンでEMRジャーをオーバーライドしようとしました。結果は変わりません。今私はEMR上でjarを実行する方法であるOpenJDKに問題があると考えます。 – chuwy

+0

EMRはAWS Java SDK 1.10.75.1をしばらく使用していますが、まだ1.11.xにアップグレードしていないため、アプリに1.11.xをバンドルすると問題が発生する可能性があります。 1.10.75.1を "提供された"依存関係として使用すると(あなたのアプリはこのバージョンに対してコンパイルされますが、それはファットjarには含まれません)、何か助けになりますか? –

答えて

0

問題は、私が最初に疑ったように、バイナリの非互換性ではなく、シリアル化をスケーリングすることにあります。 DynamodDBクライアントは、ハンドラ、スレッドプールなどが含まれているため、直列化可能なエンティティではありません。したがって、ジョブlazy valとして宣言してください。

関連する問題