Nach this article here, wenn ich eine aws emr Cluster erstellen, die Funken Rohrdaten verwenden, um DynamoDB, muss ich mit der Linie Vorwort:Wie kann ich Funken auf emr-5.2.1 auf Dynamodb schreiben?
spark-shell --jars /usr/share/aws/emr/ddb/lib/emr-ddb-hadoop.jar
Diese Zeile erscheint in zahlreichen Referenzen, einschließlich from the amazon devs themselves. Allerdings, wenn ich create-cluster
mit einer zusätzlichen --jars
Flagge laufen, bekomme ich diesen Fehler:
Exception in thread "main" java.io.FileNotFoundException: File file:/usr/share/aws/emr/ddb/lib/emr-ddb-hadoop.jar does not exist
at org.apache.hadoop.fs.RawLocalFileSystem.deprecatedGetFileStatus(RawLocalFileSystem.java:616)
at org.apache.hadoop.fs.RawLocalFileSystem.getFileLinkStatusInternal(RawLocalFileSystem.java:829)
at org.apache.hadoop.fs.RawLocalFileSystem.getFileStatus(RawLocalFileSystem.java:606)
at org.apache.hadoop.fs.FilterFileSystem.getFileStatus(FilterFileSystem.java:431)
at org.apache.hadoop.fs.FileUtil.copy(FileUtil.java:337)
at org.apache.hadoop.fs.FileUtil.copy(FileUtil.java:289)
...
Es gibt eine Antwort auf this SO question, dass die Bibliothek sollte in emr-5.2.1 enthalten sein, so habe ich versucht, meinen Code ausgeführt wird, ohne dass Extra --jars
Flagge:
ERROR ApplicationMaster: User class threw exception: java.lang.NoClassDefFoundError: org/apache/hadoop/dynamodb/DynamoDBItemWritable
java.lang.NoClassDefFoundError: org/apache/hadoop/dynamodb/DynamoDBItemWritable
at CopyS3ToDynamoApp$.main(CopyS3ToDynamo.scala:113)
at CopyS3ToDynamoApp.main(CopyS3ToDynamo.scala)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.spark.deploy.yarn.ApplicationMaster$$anon$2.run(ApplicationMaster.scala:627)
Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.dynamodb.DynamoDBItemWritable
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
Nur für grins, habe ich versucht, die Alternative zu dieser Frage, die die anderen Antwort Vorschlag in --driver-class-path,/usr/share/aws/emr/ddb/lib/emr-ddb-hadoop.jar,
zu meinem Schritt hinzufügen und bekam gesagt:
Exception in thread "main" java.lang.RuntimeException: java.lang.ClassNotFoundException: Class org.apache.hadoop.fs.s3a.S3AFileSystem not found
at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:2195)
at org.apache.hadoop.fs.FileSystem.getFileSystemClass(FileSystem.java:2702)
at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2715)
at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:93)
Nicht in der Lage s3a.S3AFileSystem
zu finden scheint wie ein großer, vor allem, da ich andere Jobs, die aus s3 lesen, gut, aber anscheinend von s3 lesen und Dynamo schreiben ist knifflig. Irgendeine Idee, wie man dieses Problem löst?
aktualisieren: dachte ich, dass s3 nicht gefunden wurde, weil ich den Classpath deshalb überwiegend sei und alle anderen Bibliotheken fallen, so dass ich Classpath aktualisiert wie folgt:
class_path = "/usr/lib/hadoop-lzo/lib/*:/usr/lib/hadoop/hadoop-aws.jar:" \
"/usr/share/aws/aws-java-sdk/*:/usr/share/aws/emr/emrfs/conf:" \
"/usr/share/aws/emr/emrfs/lib/*:/usr/share/aws/emr/emrfs/auxlib/*:" \
"/usr/share/aws/emr/security/conf:/usr/share/aws/emr/security/lib/*:" \
"/usr/share/aws/emr/ddb/lib/*"
Und ich bekomme jetzt diesen Fehler :
diagnostics: User class threw exception: java.lang.NoClassDefFoundError: org/apache/hadoop/dynamodb/DynamoDBItemWritable
ApplicationMaster host: 10.178.146.133
ApplicationMaster RPC port: 0
queue: default
start time: 1484852731196
final status: FAILED
tracking URL: http://ip-10-178-146-68.syseng.tmcs:20888/proxy/application_1484852606881_0001/
Es sieht also so aus, als ob die Bibliothek sich nicht an der von der AWS-Dokumentation angegebenen Stelle befindet. Hat jemand das zur Arbeit gebracht?