SparkからS3上のファイルを読み込んでみたので、その手順を残しておきます。

具体的には、
Mac上でローカルモードでspark-shellを動かして、
AWSのS3上のファイルを読み込んでみました。

以下のバージョンで実施した手順です。
Spark 1.5.2
Pre-build for Hadoop 2.6 or later

大きく以下の3つの流れになります。

  • Sparkの導入
  • spark-shellからS3上のファイルへのアクセス
  • sparkRからS3上のファイルへのアクセス

Sparkの導入

ApacheSparkのサイトから以下のファイルをダウンロードします。
※JDKはセットアップ済みの前提です。

Apache Spark
http://spark.apache.org/

対象ファイル:
spark-1.5.2-bin-hadoop2.6.tgz

以下のとおり、/opt配下に展開します。

$ cd /opt
$ sudo tar xf ~/Download/spark-1.5.2-bin-hadoop2.6.tgz

以下のように、環境変数にSPARK_HOMEを指定します。

$ echo "export SPARK_HOME=/opt/spark-1.5.2-bin-hadoop2.6" >> ~/.bash_profile
$ source ~/.bash_profile

以下のようにspark-shellを起動して、バージョンが表示されればOK。

$ $SPARK_HOME/bin/spark-shell --version
Welcome to
      ____              __
     / __/__  ___ _____/ /__
    _\ \/ _ \/ _ `/ __/  '_/
   /___/ .__/\_,_/_/ /_/\_\   version 1.5.2
      /_/

Type --help for more information.

spark-shellからS3上のファイルにアクセス

spark-shellからS3上のファイルにアクセスする場合は、 次の2点が必要になります。

  • spark-shell起動時のawsライブラリの読み込み
  • AWSの認証情報の指定

認証情報をコードで指定するパターンと、
ファイルで指定するパターンの2つの手順を記載します。

認証情報をコード上で指定

以下のようにawsのパッケージを指定してspark-shellを起動します。
起動時には、たくさんメッセージが出てきます。scala>というプロンプトが出てくるまで待ちます。

$ $SPARK_HOME/bin/spark-shell --packages com.amazonaws:aws-java-sdk-pom:1.10.34,org.apache.hadoop:hadoop-aws:2.6.0

以下のように入力して、AWSの認証情報を設定します。

> val hadoopConf = sc.hadoopConfiguration
> hadoopConf.set("fs.s3a.access.key", "※AWSアクセスキー※")
> hadoopConf.set("fs.s3a.secret.key", "※AWSシークレットキー※")

以下のようにして、S3上のファイルを読み込み処理します。
※以下の例は、S3上にある何かのログファイルから「ERROR」を含む行数を数えるという想定です。

> val logFile = sc.textFile("s3a://※バケット名※/※パス※")
> logFile.filter(line => line.contains("ERROR")).count()

認証情報をファイルで指定

ファイル名~/hadoop/etc/hadoop/yarn-site.xmlで、AWSの認証情報を記載した設定ファイルを作成します。

~/hadoop/etc/hadoop/yarn-site.xml

<?xml version="1.0"?>
<configuration>
  <property>
    <name>fs.s3a.impl</name>
    <value>org.apache.hadoop.fs.s3a.S3AFileSystem</value>
  </property>
  <property>
    <name>fs.s3a.access.key</name>
    <value>※AWSアクセスキー※</value>
  </property>
  <property>
    <name>fs.s3a.secret.key</name>
    <value>※AWSシークレットキー※</value>
  </property>
</configuration>

以下のようにawsのパッケージ、先ほどの作成した設定ファイルのパスを指定してspark-shellを起動します。

$ HADOOP_CONF_DIR=~/hadoop/etc/hadoop $SPARK_HOME/bin/spark-shell --packages com.amazonaws:aws-java-sdk-pom:1.10.34,org.apache.hadoop:hadoop-aws:2.6.0

以下のようにして、S3上のファイルを読み込み処理します。

> val logFile = sc.textFile("s3a://※バケット名※/※パス※")
> logFile.filter(line => line.contains("ERROR")).count()

SparkRからS3上のファイルにアクセス

以下のコマンドでSparkRを起動します。 ※前項の「認証情報をファイルで指定」の通り、yarn-site.xmlに、AWSの認証情報を設定済みの前提です。

HADOOP_CONF_DIR=~/hadoop/etc/hadoop $SPARK_HOME/bin/sparkR --packages com.amazonaws:aws-java-sdk-pom:1.10.34,org.apache.hadoop:hadoop-aws:2.6.0

以下のようにして、S3上のファイルを読み込むことができます。

jsonData <- read.df(sqlContext, "s3a://※バケット名※/※パス※", "json")
head(jsonData)

読み込んだデータの扱い方は、以下のドキュメントで。
http://spark.apache.org/docs/latest/sparkr.html