SparkとHiveの使用

SparkとHiveの使用

  • オーケストレーション
6分で読めます 更新日 Sep 15, 2017

ポイント: Apache SparkとHiveを使用することで、Sparkのインメモリ機能を活用してデータ処理速度が向上します。このガイドには、インストールの前提条件、設定手順、およびSpark上でHiveジョブを実行するための手順が含まれています。

  • 前提条件には、HiveとSparkのインストール、環境変数の設定が含まれます。
  • 手順は、jarファイルのリンク、Sparkの開始、およびHiveコマンドの実行について説明しています。

ここでは、Apache SparkをHiveとどのように使用するかを説明します。これは、HiveがデータをHadoopに保存するのではなく、Sparkに保存することを意味します。人々がHadoopではなくSparkを使用する理由は、全メモリデータベースであるためです。したがって、Hiveジョブはそこでずっと速く実行されます。さらに、会社が主にSparkを実行している場合、プログラマーが共通のデータベースを使用する方向に進むことができます。また、Sparkでプログラムを書いて、それを使用してHiveデータに接続することも可能です。つまり、逆の方向に進むことです。しかし、Sparkを使用している場合は、すでにHadoopの代わりにRDD(Sparkのインメモリストレージ)を使用するという考えに同意しているため、これはあまり起こりそうな使用ケースではありません。とにかく、ここでは最初のオプションについて説明します。

前提条件とインストール

  • Hiveをインストールする必要があります。
  • Hadoopのjarsがすでに含まれていないSparkのバージョンを持つために、ソースコードからApache Sparkをインストールします(下で説明します)。
  • それに応じてHIVE_HOMEとSPARK_HOMEを設定します。
  • Hadoopをインストールします。Yarnリソーススケジューラがそこにあり、jarファイルがあるため、使用しません。しかし、HiveとSparkのクラスターを実行している場合、HDFS(Hadoop分散ファイルシステム)にコピーして作業ノードにjarファイルを配布するためにHadoopを使用できます。

ここでの手順はSpark 2.2.0とHive 2.3.0のものです。下記のディレクトリ名とjarファイル名を、使用しているバージョンに合わせて入れ替えてください。Sparkのjarファイルを探すとき、いくつかのケースでは複数のコピーが存在することがあります。以下に示すようにdistフォルダー内のものを使用してください。)まず、Sparkのソースコードをダウンロードする必要があります。それを次のようにコンパイルします:

    ./dev/make-distribution.sh --name "hadoop2-without-hive" --tgz "-Pyarn,hadoop-provided,hadoop-2.7,parquet-provided"

次に/usr/share/spark/spark-2.2.0/conf/spark-env.shを更新し、次を追加します:

    export SPARK_DIST_CLASSPATH=$(hadoop classpath)

Jarファイルのリンク

Hiveがそれらを見つけられるように、特定のSpark jarファイルへのソフトリンクを作成します:

    ln -s /usr/share/spark/spark-2.2.0/dist/jars/spark-network-common_2.11-2.2.0.jar /usr/local/hive/apache-hive-2.3.0-bin/lib/spark-network-common_2.11-2.2.0.jar
ln -s /usr/share/spark/spark-2.2.0/dist/jars/spark-core_2.11-2.2.0.jar /usr/local/hive/apache-hive-2.3.0-bin/lib/spark-core_2.11-2.2.0.jar
ln -s /usr/share/spark/spark-2.2.0/dist/jars/scala-library-2.11.8.jar /usr/local/hive/apache-hive-2.3.0-bin/lib/scala-library-2.11.8.jar

Sparkのマスターとワーカーを開始:

今、Sparkを開始します。

    $SPARK_HOME/sbin/start-all.sh

ログファイルを含むディレクトリを作成します:

    mkdir /var/log/spark

$HIVE_HOME/conf/hive-site.xmlを編集します:

    hive.execution.engine
spark


spark.master
spark://(your IP address):7077


spark.eventLog.enabled
true


spark.eventLog.dir
/var/log/spark


spark.executor.memory
2048m


spark.serializer
org.apache.spark.serializer.KryoSerializer

Hiveの実行

以下に示すようにHiveを実行します。クラスターを使用するのではなく、ローカルモードで実行しています。何かがうまくいかなかった場合に備えて、Hiveにエラーをコンソールにログ記録させるように指示しています。また、最新のHive CLIであるbeelineではなく、hiveを使用していることにも注意してください。HiveはユーザーにBeelineを使用させたいと考えていますが、必ずしも必要ではありません。(beelineの使用方法についてはこちらに記載しました。)

    hive --hiveconf hive.root.logger=INFO,console

/usr/hadoop/hadoop-2.8.1/etc/hadoop/yarn-site.xmlを編集します。

    yarn.resourcemanager.scheduler.class
org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.
FairScheduler

データの作成

今、テーブルを作成し、いくつかのデータを挿入します。コマンドを入力した後、実行されるまでに数秒待つ必要があります。これはSparkとYarnを使用しているためです。これは、クラスター全体で実行されるように設計されています。

    create table students (student string, age int);
insert into table students values('Walker', 33);

画面はこのようになります:

ジョブが開始されるまでに時間がかかるため、8080ポートのSpark URLを開いて実行中のプログラムを見る時間があります。ジョブが完了すると、Sparkはそれらを削除しますが、Spark Job History Serverを実行している場合を除きます。

これで完了です。

これらの投稿は私自身のものであり、必ずしもBMCの立場、戦略、または意見を表すものではありません。

オーケストレーションの関連記事

BMCからのさらなる情報に興味がありますか?

ザ・ブリーフは、メインフレームとエンタープライズオーケストレーションに関する月刊メールです:研究、顧客ストーリー、製品ニュース、イベント。

このオファーに登録することで、あなたはBMCのプライバシーポリシーを読み、同意したことを確認します。

ザ・ブリーフに登録しました

ザ・ブリーフは、メインフレームとエンタープライズオーケストレーション—BMC AMIおよびControl-M—に関するアナリストの研究、顧客の展開、両者にわたるイベントを網羅しています。