EC2(Windows)にpyspark構築してS3の情報取得するところまでやる機会があったので情報残しておきます。
環境変数設定
設定する環境変数を最初に列挙しておきます。 ソフトウェアのバージョンによって、それぞれ調整します。
| 環境変数 | 値 |
|---|---|
| SPARK_HOME | C:\spark |
| HADOOP_HOME | C:\hadoop |
| JAVA_HOME | C:\Program Files\Amazon Corretto\jdk1.8.0_202 |
| Pathに追加 | %HADOOP_HOME%\bin %SPARK_HOME%\bin %LOCALAPPDATA%\Programs\Python\Python37 %JAVA_HOME%\bin |
各種ランタイムインストール
Javaのインストール
JDKをインストールします。今回はAWSだったので以下の手順でCorrettoをインストールしてみました。 https://docs.aws.amazon.com/ja_jp/corretto/latest/corretto-8-ug/windows-7-install.html
>java -version openjdk version "1.8.0_202" OpenJDK Runtime Environment Corretto-8.202.08.2 (build 1.8.0_202-b08) OpenJDK 64-Bit Server VM Corretto-8.202.08.2 (build 25.202-b08, mixed mode)
Python3.7.2インストール
以下からインストーラをダウンロードします。
https://www.python.org/downloads/release/python-372/
ファイル情報: Windows x86-64 executable installer ff258093f0b3953c886192dec9f52763
>python -V Python 3.7.2
Spark インストール
Sparkダウンロード
以下からPre Builtのパッケージファイルをダウンロードします。 https://spark.apache.org/downloads.html
7zipでgzipを解凍
Sparkのpre builtファイルはgzipで圧縮されているため、以下から7zipをダウンロードして解凍します。 https://sevenzip.osdn.jp/
C:\spark というフォルダに解凍します。
PS > mkdir C:\spark
PS > ls C:\spark\
ディレクトリ: C:\spark
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2018/10/29 6:36 bin
d----- 2018/10/29 6:36 conf
d----- 2018/10/29 6:36 data
d----- 2018/10/29 6:36 examples
d----- 2018/10/29 6:36 jars
d----- 2018/10/29 6:36 kubernetes
d----- 2018/10/29 6:36 licenses
d----- 2018/10/29 6:36 python
d----- 2018/10/29 6:36 R
d----- 2018/10/29 6:36 sbin
d----- 2018/10/29 6:36 yarn
-a---- 2018/10/29 6:36 21357 LICENSE
-a---- 2018/10/29 6:36 42919 NOTICE
-a---- 2018/10/29 6:36 3952 README.md
-a---- 2018/10/29 6:36 156 RELEASE
hadoop-awsのインストール
Mavenリポジトリから直接jarファイルをダウンロードします。
バージョンは C:\spark\jars 配下のhadoop-xxx.jarのバージョンに合わせます。
例えば、Sparkの2.4.0なら hadoop-common-2.7.3.jar なので、以下のファイルをダウンロードします。
https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-aws/2.7.3
hadoo-aws-2.7.3の依存に合わせて以下をダウンロードします。 https://mvnrepository.com/artifact/com.amazonaws/aws-java-sdk/1.7.4
Filesの部分のjarの青文字をクリックしてダウンロードします。

ダウンロードしたjarをC:\spark\jars に配置します。

Hadoop Native Libralyインストール
pysparkを利用するために以下をダウンロードします。
https://github.com/steveloughran/winutils/releases
C:\hadoop\bin のフォルダに配置します。

pysparkの起動確認
pyspark利用の準備ができたので、起動確認しておきます。
コマンドプロンプトから起動
コマンドプロンプトから pyspark が起動できることを確認する。
>pyspark
Python 3.7.2 (tags/v3.7.2:9a3ffc0492, Dec 23 2018, 23:09:28) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
Welcome to
____ __
/ __/__ ___ _____/ /__
_\ \/ _ \/ _ `/ __/ '_/
/__ / .__/\_,_/_/ /_/\_\ version 2.4.0
/_/
Using Python version 3.7.2 (tags/v3.7.2:9a3ffc0492, Dec 23 2018 23:09:28)
SparkSession available as 'spark'.
>>> sc.version
'2.4.0'
Jupyter Notebookからpysparkを利用したい場合
mkdir workspace cd workspace python -m venv venv .\venv\Scripts\activate (venv) pip install jupyter
PYSPARK_DRIVER_PYTHON と PYSPARK_DRIVER_PYTHON_OPTS の環境変数を設定後pysparkを起動するとJupyter notebookでpysparkが起動します。
(venv) set PYSPARK_DRIVER_PYTHON=jupyter (venv) set PYSPARK_DRIVER_PYTHON_OPTS=notebook (venv) pyspark
S3情報取得テスト
以下にIAMロールでS3を利用する場合の例を書いています。細かいオプションはこちらにまとまっています。
from pyspark.sql import SparkSession spark = SparkSession.builder.appName('app').getOrCreate() spark.sparkContext._jsc.hadoopConfiguration().set("fs.s3a.aws.credentials.provider","com.amazonaws.auth.InstanceProfileCredentialsProvider") s3objs = 's3a://your-bucket/path/to/objects/' df = spark.read.json(s3objs)