byClassmethod検索AWSAlexaモバイルビッグデータサーバーレスTableauAlteryxイベントEMRのステップ実行でPySparkを使ってRedshiftに出力するSparkHadoopEMR2017年10月03日じょんすみす(131)21この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。こんにちは、小澤です。Sparkにはspark-redshiftというライブラリがあります。Spark今回は、このライブラリを使って、EMRのステップ実行からPySparkを呼び出して、Redshiftに結果を出力する方法を解説します。SparkのDataFrameとデータベースSparkのDataFrameは入出力としてHDFSなどに置かれているファイルやHiveのメタストアを利用するの他にデータベースの利用も可能です。これは適切にドライバの設定を行えば、入出力先としてRedshiftも利用可能であるということになります。それを補助してくれるライブラリがspark-redshiftになります。SQLなどの各種言語からの利用方法や動作原理についての記載があります。ここではmavenやsbtを使ったライブラリの利用方法は記載してありますが、PySparkからの利用に関してはソースコードのみとなっています。そのため、まずは必要なライブラリと利用方法について解説します。EMRで利用する際に必要となるライブラリは以下の3つになります。spark-redshift_2.11-3.0.0-preview1.jar(spark-redshift本体)RedshiftJDBC41-1.1.17.1017.jarspark-avro_2.11-3.2.0.jarまた、利用しているEMRの構成は以下のようになっています。2.1.0こちらは2017/10/02現在の情報となりますので、EMR及びライブラリのバージョンが異なる場合、他の必要となるライブラリのバージョンも異なる可能性がありますのでご注意ください。Pythonのバージョンに関しては、EMRには2.7と3.4がインストールされていますが、今回は3.4を利用しています。3.4を利用するためにクラスタ作成時に以下の設定をしています。続いて、これらのライブラリをPySpark実行時に指定する方法を紹介します。言ってもこれは通常通りPySparkで依存するJarファイルを指定するのと同じ方法になります。EMRにsshでログインしてPySparkの対話シェルから利用する場合は、pysparkコマンドの--jarsオプションでjarファイルをカンマ区切りで指定します。/path/to/spark-redshift.jar,/path/to/spark-avro.jar,/path/to/redshift-odbc.jar他のライブラリも利用したい場合は同様にカンマ区切りで指定します。スクリプトを作成して実行する場合はshark-submitで同様のオプションを指定します。ステップ実行時のオプション指定EMRでステップ実行をする際のオプション指定の方法も同様になります。「spark-submitのオプション」に--jarオプションを指定し、「アプリケーションの場所」で実行するpythonのファイルを選択するのみとなります。その他のオプションを指定する際は同様に並べていけば問題ありません。awscliやboto3などからステップの追加を行う際も同様です。最初に取り上げたREADMEにも記載がありますが、実際にSparkのDataFrameをRedshiftに出力する方法を見ていきましょう。使い方としては、DataFrameのwriteでDataFrameWriterを取得してオプションなどを指定していきます。.save()formatでは、spark-redshiftで定義されているものを指定しています。対象となるRedshiftのエンドポイント対象となるテーブルcopyコマンド実行の際に利用するS3のパスcopyコマンドのクレデンシャルで利用するIAMのロールを指定しています。その他のオプションで指定しできるものはREADMEのParametersに記載してありますので参考にしてください。modeは通常のDataFrameWriterのmodeと同じものが選択可能です。いずれのmodeでも、テーブルが存在していない場合は新規で作成されるので、あらかじめテーブルを作成していないことによるエラーは発生しません(既存のテーブルに対してerrorやignoreを選択した場合はデータの挿入が実行されません)。その際の各列の型はDataFrameのスキーマに応じて作成されます。keyは無しとなりますので必要に応じてそれらを適切な値に設定しておくといいでしょう。例外としては既存のテーブルに対してmodeをappendにした場合のみテーブルの設定が反映されたものとなります。最後にsaveを呼び出すことでRedshiftへのcopyが実行されます。おわりに今回はSparkのDataFrameを使った処理の結果を直接Redshiftに出力できるspark-redshiftを紹介しました。EMRのステップ実行を活用すれば、Hadoopで前処理やETLを行った後にRedshiftにデータをロードするといったシーンでもそれらの処理フローを制御するためのプログラムや実行環境も必要なくなるため役立つ場面も多いのではないかと思います。ACEの人やってます。機械学習をしたりHadoopをいじったりしてるエンジニア。リモート】クラスメソッドの会社説明会を開催しますクラスメソッドでは、AWS・AI・ビッグデータ・モバイルなどの技術職や営業のメンバーとして一緒にお仕事をする仲間を大募集しています。#cmdevio新型コロナウイルスの感染拡大を受け、本イベントを延期させていただくことになりました(開催時期未定)。お申し込みいただいた皆様には大変申し訳ございませんが、何卒ご理解いただけますようよろしくお願いいたします。AWSについてライトに色んな情報交換をしましょう。CAFEの他、NTTデータとセブンイレブンの取り組みや、サインポスト、Zippinなどの各社と流通・小売業との連携を業界マップに作成してみました。PolicyのConditionにaws:CalledViaというキーが追加されました。いったキーなのかご説明します。和樹31こんにちは植木和樹@上越オフィスです。Terminalの機能確定版がリリースされたので試してみました。夏目祐樹403こんにちは、CX事業本部の夏目です。MacのタッチバーのタッチIDが非常に便利なのですが、Terminalでsudoを叩かないと行けないときに使えたらなぁと思ったので、情報を共有します。臼田佳祐295ワークフロー自動化OSSのn8nをAWS環境で建てて検証してみました。非常に期待できるサービスです。Fargateの勉強をしています。使ってみたい方は参考にしてください。洋介256SnowflakeがAWSの東京リージョン上で稼働するようになりました。データを日本に置けます。芳賀健233こんにちは!猫様の忠実なるしもべ、芳賀健です。Tokyoで開催されました。クラスメソッド株式会社が運営するAWS・iOS・HTML5に関する技術情報サイトです。