2017-01-19 1 views
0

、私はDynamoDBのためにパイプデータに火花を使用するAWS EMRクラスタを作成するとき、私はラインと前置きする必要があります。emotr-5.2.1でdynamodbに書き込むためにどのようにしてsparkを得ることができますか? <a href="https://aws.amazon.com/blogs/big-data/analyze-your-data-on-amazon-dynamodb-with-apache-spark/" rel="nofollow noreferrer">this article here</a>によると

spark-shell --jars /usr/share/aws/emr/ddb/lib/emr-ddb-hadoop.jar 

この行はfrom the amazon devs themselvesを含む多数の文献に表示されます。しかし、私は追加--jarsフラグでcreate-clusterを実行すると、私はこのエラーを取得:

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) 
... 

あり、ライブラリは、EMR-5.2.1に含まれるべきであることをthis SO questionの答えですので、私はそれなしで私のコードを実行してみました余分な--jarsフラグ:

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) 

ちょうどにやにや笑いのために、私は私のステップへ--driver-class-path,/usr/share/aws/emr/ddb/lib/emr-ddb-hadoop.jar,に追加することによって、その質問へのそのほかの回答によって提案された代替案を試してみました、と言われました:

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) 

s3a.S3AFileSystemは大きなもののようですが、特にs3から読み込んだ他のジョブがありますが、明らかにs3から読み込んでダイナモに書き込むのは難しいです。どのようにこの問題を解決するための任意のアイデアですか?

更新:私は、私はクラスパスをオーバーライドし、他のすべてのライブラリを落としたためにそのS3が発見されていなかったので、私はそうのようにクラスパスを更新考え出し:

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/*" 

そして今、私はこのエラーを取得します:

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/ 

ライブラリは、AWSのドキュメントで指定された場所ではないようなので、それが見えます。誰かがこれを働かせてくれましたか?

答えて

1

OKこれはわかりました。私はこの問題を尋ねるために次の誰かが来るのを忘れてしまいます。

これらのメソッドが失敗する理由は、AWSユーザーによって指定されたパスがemr 5.2.1クラスタに存在しないことです(emr 5.0クラスタにはまったく存在しない可能性があります)。

代わりに、emr-dynamodb-hadoop jar from Mavenの4.2バージョンをダウンロードしました。

jarがemrクラスタにないため、jarファイルをjarファイルに含める必要があります。 sbtを使用している場合は、sbt assemblyを使用できます。このようなモノリシックなjarファイルを作成したくない場合(また、バージョン1.7と1.8のnetbeansの間の競合解消を把握する必要がある場合)、ビルドプロセスの一部としてjust merge jarsを実行することもできます。このように、em3ステップには1つのjarがあり、オンデマンドスパークジョブに基づいて簡単に0123a2に入れることができます。create-cluster

関連する問題

 関連する問題