教育

ビッグデータの解析におすすめ!「Apache Spark」について解説

ビッグデータの解析におすすめ!「Apache Spark」について解説

近年ではAI(人工知能)技術の発達によってビッグデータに大きな関心が集まっていますよね。実際、有名なIT企業では当たり前のように利用されており、DXを達成するためにはビッグデータは避けて通れません。

そこでこのビッグデータの解析におすすめなのが「Apache Spark」。Apache Sparkとは高速でデータを分散できるフレームワークのことです。

Apache Spark

それではそんなApache Sparkの基本や同じ用途のフレームワーク「Hadoop」との違い。また、Apache Sparkで使えるコマンドやApache Sparkでデータ処理を行う方法、注意点などを説明します。最後にはApache Sparkでデータ処理をより効率的に行える方法も紹介していきましょう。

ぜひ、Apache Sparkでビッグデータの解析を行い、それをみなさんのビジネスに生かしてみてはどうでしょうか。

Apache Sparkとは

パソコンのイメージ

それでは、Apache Sparkがどのようなものなのかを以下で説明していきます。

並列分散処理に特化したフレームワーク

まず、Apache Sparkは並列分散処理に特化したフレームワークです。
なお、フレームワークとはシステム開発に必要なツールの集まりのこと。Apache Sparkの場合では並列分散処理のためのアプリケーションがまとまっており、これを導入すれば大量のデータを簡単に解析できます。

近年ではビッグデータの活用や機械学習などでこの種のフレームワークの重要性が高まっており、その中で2010年にApache Sparkはリリースされました。ちなみにApache Sparkと関連しているものとして「Hadoop」というフレームワークもあります。こちらについては次の章で説明していきましょう。

プログラミング言語に対応したAPIがある

次に、このApache Sparkというフレームワークは、機械学習やデータ解析を行う際に利用される、PythonやJavaなどのプログラミング言語に対応しています。
より具体的には各言語のAPI「Application Programming Interface」があり、これによって複数の言語をベースとしてApache Sparkのデータ解析が可能です。

なお、Apache Sparkの対応言語は以下のようになっています。

  • Java
  • Python
  • R言語
  • SQL

以上がApache Sparkの基本情報。

これを踏まえて以下ではApache SparkとHadoopとの違いを説明していきましょう。

Apache SparkとHadoopとの違い

チェックのイメージ

まず最初に理解してほしいのがHadoopについてです。

こちらはApache Sparkと同様に並列分散処理を行うフレームワークであり、2005年にビッグデータ解析の先駆けとしてリリースされました。現在でも広く利用されており、Apache Sparkはこちらを土台として開発された経緯があります。

ただし、両者には以下のような違いもあるのです。

  1. Apache Sparkはインメモリ、Hadoopは外部記憶装置で処理を行う
  2. RAMに収まる範囲であればHadoopよりもApache Sparkの方が高速で処理できる
  3. 大規模な処理を行う際にはApache SparkよりもHadoopの方が費用面で勝っている
まず、1にあるように処理方式がApache Sparkはインメモリ、Hadoopは外部記憶装置で処理を行う大きな違いがあります。簡単に説明していくとApache SparkのインメモリとはRAMで計算処理を行うという意味。

一方でHadoopの外部記憶装置とはHDDやSSDを介して処理するということです。そのため、両者では処理速度やコスト面などで利害が生まれています。

例えば、2にあるように解析するデータがRAMに収まる範囲であれば、HadoopよりもApache Sparkの方が高速で処理可能。これはApache Sparkが直接RAMで処理を行えるからです。

上でも説明したようにHadoopでは外部記憶装置を介しますが、この際には読み取りを複数回行うので処理速度が劣ります。ただし、データ量があまりにも多い場合にはRAMの処理能力を超えてしまうため、その場合にはHadoopの方が速く並列処理できることも。

そして、3にあるように大規模なデータ処理を行う際にはApache Sparkよりも、Hadoopの方が費用面で勝っている違いがあります。これはデバイスに掛かる費用と人件費を加味して、費用面を検討した場合の話です。

なお、デバイスに関しての費用は処理するデータ量によります。

データ量が少なければ、処理速度が高いApache Sparkの方がクラウドでのお金が掛かります。一方でデータ量が多ければHDDなどを利用するHadoopの方が安いです。
しかし、人件費で比較していくとどちらも人員不足であることは否めず、先発のHadoopのほうが関連するサービスによってその問題を解決しやすくなっています。

ですので、費用では大規模な処理を行う際にはApache SparkよりもHadoopの方が勝るのです。

以上がApache SparkとHadoopとの違いです。これらはあくまでも一例になりますが、やはりフレームワークとしての処理方法の違いによるところが大きいでしょう。現在ではビッグデータの解析では両者の長所を生かしながら、共存して利用されているのが実情です。

これを踏まえて以下ではApache Sparkで使えるコマンドをご紹介しましょう。

Apache Sparkで使えるコマンド

キーボードのイメージ

Apache Sparkは複数のプログラミング言語に対応したAPIが用意されています。ですから、Apache Sparkでデータの分散処理を行うには、それらを利用して行けばよいです。

具体的にはコマンドプロンプトなどのCUIを起動し、そこで以下のコマンドを使えば利用できます。

spark-shell

spark-shellは対話型でデータ処理を行えるコマンド。Apache Sparkを利用していくにあたりもっとも基本的なもの。

ちなみにこちらで導入ができているのかを確かめたり、他のコマンドを入力してデータ処理を行うことも可能です。

pyspark

次に、pysparkはPython環境でApache Sparkを利用できるコマンド。設定をあらかじめ行っておくことでjupyter notebookが起動し、それからデータ処理を行うことができます。

Pythonに慣れているならこちらを利用した方がわかりやすいでしょう。

sparkR

さらに、sparkRは統計言語として有名なRでApache Sparkを利用できるコマンド。統計に関する知識を持っており、Rに触れたことがある場合にはこちらの利用をおすすめします。

以上がApache Sparkで使えるコマンドの紹介です。

今回は抜粋してお伝えしましたが、他にも利用できるコマンドはあります。興味があれば公式サイトなどからみてみましょう。

Apache Sparkでデータ処理を行う方法

データのイメージ

今度はApache Sparkでデータ処理を行う方法を簡単に説明していきます。

Apache Sparkでは以下のような手順を踏めばデータ処理が可能です。なお、こちらはもっとも簡単なネットを介さないローカルでの方法。

1.処理を行うデータを用意する

まず、データ処理を行うには対象となるデータが必要です。

こちら初心者向きの方法としては以下のように名前や年齢、住所などを記入して、リストにしたテキストファイルを作成すればOK。(適当なデータセット利用するのもよいです)
  • ken,18,tokyo
  • hime,16,fukuoka
  • akira,21,kyoto

この際に名前は「name.csv」とでもしておきましょう。

2.上で紹介したコマンドを入力して対話モードを起動する

次に、上で紹介したコマンドを利用して、対話モードを起動してください。

こちらはコマンドプロントなどから起動を行えば問題なくできるはずです。例としてはここではspark-shellを利用してください。

3.データを読み込み、関数を使って処理を行う

そして、データを読み込み、関数を使って処理を行っていきましょう。

ちなみにこの作業に関してはどのコマンドを利用するかによって変わります。今回はspark-shellを利用する例で説明していますが、PythonのAPIであるpysparkでは以下のようにいきません。より詳しく知りたい場合には公式のプログラミングガイドをみてください。

データの読み込みについては以下のように入力すればよいです。
val file = sc.textFile("./name.csv")
file: org.apache.spark.rdd.RDD[String] = ./name.csv MapPartitionsRDD[1] at textFile at :24

これでデータの読み込みができています。

今回はこの作成したデータから、最初の行を抜き出す処理を行ってみましょう。それでは、以下のように入力してください。
file.first()

こちらはfirst関数というもので先頭の行を取得できるものです。そうすると以下のように表示されます。

res0: String = ken,18,tokyo

以上のように先頭行を抜き出す処理が行えました。

以上がApache Sparkを利用した簡単なデータ処理です。より深く学んでいけば大量なデータを複雑に処理することもできます。

よろしければ一度インストールして使ってみましょう。ただし、Apache Sparkを使うときには注意点もあるので、次の章でそれを説明していきます。

Apache Sparkを使うときの注意点

注意のイメージ

Apache Sparkを使うときには以下に注意しましょう。

環境構築を行う必要がある

まず、環境構築を行う必要があります。

こちらはApache Sparkのインストールもそうですが、使用するAPIに応じてPython環境なども必要です。そのため、公式などからどのような環境構築が必要であるのかを調べ、しっかりと導入を行ってください。

環境変数を設定する

次に、環境構築に併せて環境変数を設定する必要があります。こちらはデバイスのOS上でしっかりと機能するために行う必要があるものです。他の言い方としてパスを通すともいわれています。

ちなみに設定方法はWindows10であれば以下の手順を踏みましょう。

  • コントロールパネルを開く
  • コントロールパネルよりシステムを選択
  • システムから詳細設定のタブを選択する

そうすると「環境変数」のボタンがあるので、それをクリックすれば設定が行えます。あとは「新規」のボタンから適切な変数名と変数値を記入していけばOK。

詳しくは割愛しますが、それぞれの環境に合わせて調べれは詳細はすぐみつかります。

以上がApache Sparkを使うときの注意点です。詳しくは公式サイト、もしくは解説しているサイトなどをみながらやっていくとよいでしょう。そうすれば導入からプログラミングなどをしっかり学ぶことができます。

 

プログラマーのイメージ

今回Apache Sparkについてお話をしました。

  • Apache Sparkとは並列分散処理に特化したフレームワークである
  • Apache Sparkはインメモリ、Hadoopは外部記憶装置で処理を行うという違いがある
  • Apache Sparkでは基本のspark-shell、Python環境のAPIであるpysparkなどのコマンドが利用できる
  • Apache Sparkはデータを用意し、コマンド入力を行って、関数で処理する
  • 注意点としてApache Sparkでは環境構築、環境変数の設定を行う必要がある

これを踏まえてApache Sparkでデータ処理をより効率的に行える方法をお伝えしていきましょう。

  • 「Spark shell application UI」を利用して効率的に処理を行う

こちらはspark-shellを利用した際に起動するWebUIであり、ネット上からApache Sparkのデータ処理を確認できるサービスです。例えば、どのような設定で処理が行われたのか。また、実行にどれくらいの時間が掛かったのかなどを詳しくみることができます。

将来的にApache Sparkで大量のデータを並列分散処理していきたいのなら、ぜひともこちらを使いこなせるようになるとよいでしょう。そうすればよりApache Sparkで効率的なデータ処理を行えます。

Apache SparkでビッグデータやAI(人工知能)技術などを活用し、ぜひみなさんのビジネスでDXを実現させましょう。

【お知らせ】

当メディア(AIZINE)を運営しているAI(人工知能)/DX(デジタルトランスフォーメーション)開発会社お多福ラボでは「福をふりまく」をミッションに、スピード、提案内容、価格、全てにおいて期待を上回り、徹底的な顧客志向で小規模から大規模ソリューションまで幅広く対応しています。

御社の悩みを強みに変える仕組みづくりのお手伝いを致しますので、ぜひご相談ください。

お多福ラボコーポレートサイトへのバナー

トップへ戻る
タイトルとURLをコピーしました