1. HOME
  2. ブログ
  3. IT技術
  4. Amazon EMRのHadoop完全分散モードクラスタ上でApache Sparkを利用したアプリケーションを15円未満で実行してみた

Amazon EMRのHadoop完全分散モードクラスタ上でApache Sparkを利用したアプリケーションを15円未満で実行してみた

Apache Spark を Amazon EMR 上で稼働させて、アプリを実行してみる

前回は、Windows の環境上で Apache Spark をセットアップし、テキスト検索アプリを実行してみました。

前回の記事はこちら

完全分散モードで Apache Spark を使う

今回、Apache Spark を使うのは、ローカルの環境ではありません。

Amazon EMR の Hadoop クラスター上で Apache Spark をセットアップし、wordcount アプリを実行してみましょう!

これは「スタンドアローン」の Apache Spark ではなくて、「完全分散モード」の Apache Spark です。

つまり、本物の Apache Spark というわけです。

完全分散モードで Apache Spark を使うメリット

完全分散モードで Apache Spark を使う場合、ローカル環境に比べて以下のメリットがあります。

  1. コストが安上がり
  2. セットアップの手順が簡単でスピーディー
  3. クラスタのメンテナンスが不要

大まかな流れ

大まかな手順は、以下のようになります。

  1. ローカル環境に Apache Spark をインストール
  2. ローカル環境で作成した Apache Spark を Maven でパッケージング
  3. Amazon S3 へアップロード
  4. Amazon EMR で Hadoop クラスタを構築
  5. クラスタを稼働させて、アプリを実行

今回のローカルとクラウド環境

今回のローカルとクラウド環境は以下の通りです。

  1. OS は macOS Catalina
  2. Java 8 と Homebrew はインストール済み
  3. IDE は、Intellij IDEA 2019.3.3 Community Edition
  4. AWS アカウントはすでに登録済み(本記事では、AWS の S3 及び EMR を利用)

ローカル環境における Apache Spark のインストール

それでは、Spark アプリケーションを作成していきましょう。

まず、以下の手順に従って、macOS Catalina で Apache Spark をインストールしてください。

xcode-select をインストール

ターミナルで、以下のコマンドで「xcode-select」をインストールします。

scala をインストール

Homebrew を用いて、「scala」をインストールしましょう。

Apache Spark をインストール

同じく、Homebrewを用いて、「Apache Spark」をインストールします。

インストール完了

これで、Apache Spark が「/usr/local/Cellar/apache-spark/」ディレクトリーにインストールされました。

ローカル環境で Sparkアプリケーションを作成し、Maven でパッケージング

次は Intellij IDEA を用いて、Spark アプリケーションを作成し、Mavenでパッケージします。

Intellij IDEA で Maven プロジェクトを作る

Intellij IDEA で「新しいプロジェクト」を作り、「Mavenプロジェクト」を選択します。

ここでは、「spark-local-mapred」と名前をつけました。

プロジェクトの構成は、以下のようになっています。

pom.xml ファイルを編集

Maven プロジェクトの pom.xml ファイルを、次のように編集します。

input ディレクトリーを作る

プロジェクトディレクトリー内に input ディレクトリーを作ります。

入力ファイルとして「silicon-valley.txt」を input ディレクトリーに置いておきましょう。

silicon-valley.txt は、下記からダウンロードできます。

【silicon-valley.txt】
https://github.com/wmwijaya/spark-local-mapred/blob/master/input/silicon-valley.txt

resources ディレクトリーへ en_stopwords.txt をコピー

プロジェクトの resources ディレクトリーへ、「en_stopwords.txt」をコピーします。

en_stopwords.txt は、下記からダウンロードして下さい。

【en_stopwords.txt】
https://github.com/wmwijaya/spark-local-mapred/blob/master/src/main/resources/en_stopwords.txt

WordCount.java を作成

「src/main/java/」の「com.teknologibigdata.spark」パッケージで、「WordCount.java」を作成します。

WordCount.java は、英文から単語の出現頻度を計算する Spark プログラムです。

引数を設定する

プログラムの引数を「input/silicon-valley.txt output」と設定し、実行してみましょう。

エラーがなければ、以下のような結果になります。

これで、WordCount.java が正常に動作することを確認しました。

パッケージング

次は、「mvn clean package」コマンドでパッケージしましょう。

生成された jar ファイルが、プロジェクトの「target」ディレクトリーに格納されます。

この jar ファイルの名前を編集してください。

ここでは、「spark-wordcount-1.0.jar」としておきます。

これで、Spark アプリケーションのパッケージングは完了です。

Amazon S3 への Spark アプリケーションのアップロード

Maven でパッケージングした Spark アプリケーションを実行するには、Amazon S3 へアップロードしなければなりません。

アプリの実行結果も、「Amazon S3」 へ書き込まれます。

新しいバケットを作成

まず、Amazon S3 のコンソールで、新しいバケットを作成します。

ここでは、「tekbig-spark」としておきます。

「apps」「input」フォルダーを作成

次に、「tekbig-spark」のバケット内に「apps」及び「input」というフォルダーを作ります。

アプリとテキストファイルをアップロード

Spark アプリケーション「spark-wordcount-1.0.jar」を、「apps」フォルダーにアップロードします。

入力テキストファイル「silicon-valley.txt」は、「input」フォルダーにアップロードしましょう。

Amazon EMR クラスタの構築及び Spark アプリケーションの実行

続いて、Amazon EMR で Hadoop クラスタを構築していきます。

ローカル環境での Hadoop クラスタの構築に比べたら、非常にシンプルです。

新しいクラスタを作成

Amazon EMR のコンソールで「Create cluster」をクリックして、新しいクラスタを作成しましょう。

ソフトウェアの設定

「Go to advanced options」をクリックし、ソフトウェアの設定を行います。

ここでは、「Hadoop」と「Spark」のみ選択します。

Step type を設定

「Step type」のドロップダウンメニューから「Spark application」を選択し、「Add step」をクリックします。

Spark application の設定

新しくダイアログボックスが表示されるので、「Spark application」の設定を行います。

Name

わかりやすい名前をつけましょう。

ここでは、「Spark application」としました。

Deploy mode

Cluster」と入力します。

Spark-submit options

Spark アプリケーションの main 関数を含むパッケージ及びクラス名を指定します。

ここでは「–class com.teknologibigdata.spark.WordCount」となります。

Application location

Amazon S3 にアップロードした spark-wordcount-1.0.jar の path を選択します。

Arguments

プログラムの引数を入力します。

この場合は、Amazon S3 における入力ファイル「silicon-valley.txt」と出力フォルダ「output」の pathを入力します。

つまり、「s3://tekbig-spark/input/silicon-valley.txt と s3://tekbig-spark/output」です。

output フォルダは、プログラムによって自動的に生成されます。

Action on failure

Terminate cluser」を選択します。

設定完了

最後に、「Add」をクリックしてから、「Next」をクリックします。

ハードウェアの設定

ハードウェア設定で、利用したいマシーンのスペックが選べます。

今回は「m4.large (4 vCore、8 GiB RAM、32 GiB Storage) 」タイプのマシーンを3台利用します。

つまり、構築するクラスタは「マスターノード」1台と「コアノード」2台から成り立っています。

General Cluster Settings を編集

続いて、General Cluster Settings を編集します。

Cluster name

クラスタの名前を入力します。

ここでは、「TekbigSparkCluster」としました。

Logging

Logging チェックボックスをチェックし、「Amazon S3 バケット」を選択します。

これで、Amazon S3 バケットにクラスタのログが記録されます。

他の設定はデフォルトのままいじらず、「Next」をクリックします。

Security Options の設定

次に、Security Options を設定します。

EC2 key pair

Proceed without an EC2 key pair」を選択します。

残りの設定は、デフォルトのままいじらず、「Create cluster」をクリックします。

クラスタのステータスを確認

Starting

しばらくしたら、クラスタの構築が完成し、自動的にスタートします。

ここで、「Starting」というステータスが表示されます。

Running

その次が、「Running」状態です。

この時に、Spark アプリケーションが実行され、入力ファイルが処理されます。

Waiting

上記の処理が完了したら、クラスタは「Waiting」状態に移ります。

この状態になったら、「Terminate」をクリックしましょう。

Terminate

Terminate」をクリックすると、クラスタが停止します。

クラスタを停止させない限り、料金がかかるので注意してください。

処理結果を確認

Spark アプリケーションの処理結果を見てみましょう。

Amazon S3 の「tekbig-spark」バケットを確認します。

現在、「tekbig-spark」バケットには3つのフォルダがあります。

すなわち、「apps」「input」「output」フォルダです。

output フォルダを確認

output」フォルダは、Spark アプリケーションの処理結果を格納するため、自動的に生成されます。

この output フォルダを開くと、多数の CSV ファイルが存在します。

これらのファイルには、入力テキストファイルに含まれている「全ての単語」と「出現頻度」が書き込まれています。

さいごに

わずか10円で Spark アプリケーションが実行できる

これで、Spark アプリケーションを EMR の Hadoop 完全分散モードクラスタ上で実行できました。

AWS のアカウントページで、利用料金を確認したところ、なんとたったの10.8円でした!

Apache Spark への注目が高まっている

今、Apache Spark はビッグデータ分析エンジンとして非常に注目されています。

「Infoworld.com」によれば、Apache Sparkは、今や主要なプラットフォームとなっています。

また、「Databricks.com」によると、現在、世界で250以上の企業において、1000人以上が Apache Spark プロジェクトに携わっているとのことです。

【What is Apache Spark? The big data platform that crushed Hadoop】
https://www.infoworld.com/article/3236869/what-is-apache-spark-the-big-data-platform-that-crushed-hadoop.html

【5 Reasons to Become an Apache Spark Expert】
https://databricks.com/blog/2019/01/15/5-reasons-to-become-an-apache-spark-expert.html

Apache Spark のメリット

では、なぜ Apache Spark は、こんなにも盛んに採用されているのでしょうか?

それは、Apache Spark が以下のようなメリットを持っているからです。

  1. 開発者にとって使いやすい
  2. 高速
  3. 柔軟性がある

あなたも Spark アプリケーションを作ってみませんか?

Apache Spark は非常に優れた分析ツールです。

今回紹介した Spark アプリケーションは、比較的シンプルな上、低コストで作れます。

ぜひ、あなたも Spark アプリケーションに挑戦してみてください!

ライトコードよりお知らせ

にゃんこ師匠にゃんこ師匠
システム開発のご相談やご依頼はこちら
ミツオカミツオカ
ライトコードの採用募集はこちら
にゃんこ師匠にゃんこ師匠
社長と一杯飲みながらお話してみたい方はこちら
ミツオカミツオカ
フリーランスエンジニア様の募集はこちら
にゃんこ師匠にゃんこ師匠
その他、お問い合わせはこちら
ミツオカミツオカ
   
お気軽にお問い合わせください!せっかくなので、別の記事もぜひ読んでいって下さいね!

一緒に働いてくれる仲間を募集しております!

ライトコードでは、仲間を募集しております!

当社のモットーは「好きなことを仕事にするエンジニア集団」「エンジニアによるエンジニアのための会社」。エンジニアであるあなたの「やってみたいこと」を全力で応援する会社です。

また、ライトコードは現在、急成長中!だからこそ、あなたにお任せしたいやりがいのあるお仕事は沢山あります。「コアメンバー」として活躍してくれる、あなたからのご応募をお待ちしております!

なお、ご応募の前に、「話しだけ聞いてみたい」「社内の雰囲気を知りたい」という方はこちらをご覧ください。

ライトコードでは一緒に働いていただける方を募集しております!

採用情報はこちら

関連記事