Sparkの資産展開・設定方法について説明します。
資産展開・設定項目 | 導入環境 | |||
---|---|---|---|---|
マスタサーバ | スレーブ | 開発実行 | データ | |
○ | × | × | × | |
× | × | × | ◯ | |
○ | ○ | ○ | × | |
○ | ◯ | ○ | × | |
○ | × | ○ | × |
○:実施する必要があります。
×:実施は不要です。
Hiveのインストール
Hiveをインストールする方法について説明します。
マスタサーバ(セカンダリ)に、root 権限でログインします。
本製品の開発実行環境サーバにあるHive資産を、マスタサーバ(セカンダリ)に格納します。
# scp root@develop:/opt/FJSVbdpp/products/HADOOP/PKG/apache-hive-0.13.1-bin.tar.gz /tmp <Enter>
Hive資産を展開します。
# cd /tmp <Enter> # tar zxvf apache-hive-0.13.1-bin.tar.gz <Enter>
Hive資産を移動します。
# mv apache-hive-0.13.1-bin /usr/local <Enter>
Hive資産の所有者をSpark実行ユーザーに変更します。
# chown spark:bdppgroup -R /usr/local/apache-hive-0.13.1-bin <Enter>
HiveのlibディレクトリにJDBCドライバーをコピーします。
# cp {JDBCドライバーのjarファイル} /usr/local/apache-hive-0.13.1-bin/lib <Enter>
コピーしたJDBCドライバーの所有者を変更します。
# chown spark:bdppgroup /usr/local/apache-hive-0.13.1-bin/lib/{JDBCドライバーのjarファイル} <Enter>
メタデータ格納用データベースの作成
Sparkのメタデータを格納するためのデータベース(以降、メタストアデータベースと記載)の作成方法について説明します。
メタストアデータベースの作成はデータベースサーバで実施します。
Sparkがメタストアデータベースへの接続に利用するDBユーザーには、以下が設定されている必要があります。
パスワードが設定されていること
メタストアデータベースに対して以下の権限が設定されていること
SELECT権限
INSERT権限
UPDATE権限
DELETE権限
CREATE権限
DROP権限
LOCK TABLES権限
EXECUTE権限
Master、Hive Metastoreを実行するサーバからの接続が許可されていること
ワイルドカード(%)による許可ではなく、ホストを個別に指定して接続を許可する必要があります。
マスタサーバ(セカンダリ)上に格納されているデータベース作成用DDLファイルをデータベースサーバ上の任意のディレクトリにコピーします。
# scp -p root@master2:/usr/local/apache-hive-0.13.1-bin/scripts/metastore/upgrade/mysql/hive-schema-0.13.0.mysql.sql /tmp/hive-schema-0.13.0.mysql.sql <Enter>
MySQLに接続します。
# mysql -u root -p <Enter> Enter password: (MySQLの管理者パスワード)
データベースとスキーマを作成します。
mysql> CREATE DATABASE metastore_spark; <Enter> mysql> USE metastore_spark; <Enter> mysql> SOURCE /tmp/hive-schema-0.13.0.mysql.sql; <Enter> ・・・
マスタサーバ(セカンダリ)からメタストアデータベースに接続するためのDBユーザーを作成します。
mysql> CREATE USER 'hive'@'master2' IDENTIFIED BY 'hive_password'; <Enter> mysql> REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'hive'@'master2'; <Enter> mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,LOCK TABLES,EXECUTE ON metastore_spark.* TO 'hive'@'master2'; <Enter> mysql> FLUSH PRIVILEGES; <Enter>
Sparkのインストール
Sparkをインストールする方法について説明します。
ポイント
Sparkの公式HP(http://spark.apache.org)から、Hadoop1用のSpark資産(spark-1.4.1-bin-hadoop1.tgz)をダウンロードして利用してください。
マスタサーバ(セカンダリ)に、root 権限でログインします。
ダウンロードしたSpark資産(spark-1.4.1-bin-hadoop1.tgz)をサーバに配置します。以降の手順では、/tmp配下に配置した場合の実行例で説明します。
Spark資産を展開します。
# cd /tmp <Enter> # tar zxvf spark-1.4.1-bin-hadoop1.tgz <Enter>
Spark資産を移動します。
# mv spark-1.4.1-bin-hadoop1 /usr/local <Enter>
Spark資産の所有者をSpark実行ユーザーに変更します。
# chown spark:bdppgroup -R /usr/local/spark-1.4.1-bin-hadoop1 <Enter>
SparkのPIDファイルを格納するディレクトリを作成します
# mkdir {PIDファイルを格納するディレクトリ} <Enter>
PIDファイルを格納するディレクトリの所有者を変更します
# chown spark:bdppgroup {PIDファイルを格納するディレクトリ} <Enter>
SparkのlibディレクトリにJDBCドライバーをコピーします
# cp {JDBCドライバーのjarファイル} /usr/local/spark-1.4.1-bin-hadoop1/lib <Enter>
コピーしたJDBCドライバーの所有者を変更します。
# chown spark:bdppgroup /usr/local/spark-1.4.1-bin-hadoop1/lib/{JDBCドライバーのjarファイル} <Enter>
Workerを実行するサーバを定義ファイル/usr/local/spark-1.4.1-bin-hadoop1/conf/slavesを編集して定義します。
# vi /usr/local/spark-1.4.1-bin-hadoop1/conf/slaves <Enter> # cat /usr/local/spark-1.4.1-bin-hadoop1/conf/slaves <Enter> slave6 slave7 slave8 slave9 slave10
注意
CPU・メモリなどのチューニングをしない場合は、TaskTrackerを実行するスレーブサーバと、Workerを実行するサーバは分けて運用してください。
同じスレーブサーバでTaskTrackerとWorkerを実行した場合、CPU・メモリなどのリソースが競合するためパフォーマンスが低下します。
Workerを実行するサーバでTaskTrackerが実行されないようにスレーブサーバ定義ファイル/etc/opt/FJSVbdpp/conf/slavesを編集および反映してください。
編集および反映の方法については、「13.2.3 スレーブサーバ定義ファイルの編集および反映」を参照してください。
スレーブサーバに、root 権限でログインします。
ダウンロードしたSpark資産(spark-1.4.1-bin-hadoop1.tgz)をサーバに配置します。以降の手順では、/tmp配下に配置した場合の実行例で説明します。
Spark資産を展開します。
# cd /tmp <Enter> # tar zxvf spark-1.4.1-bin-hadoop1.tgz <Enter>
Spark資産を移動します。
# mv spark-1.4.1-bin-hadoop1 /usr/local <Enter>
Spark資産の所有者をSpark実行ユーザーに変更します。
# chown spark:bdppgroup -R /usr/local/spark-1.4.1-bin-hadoop1 <Enter>
SparkのPIDファイルを格納するディレクトリを作成します
# mkdir {PIDファイルを格納するディレクトリ} <Enter>
PIDファイルを格納するディレクトリの所有者を変更します
# chown spark:bdppgroup {PIDファイルを格納するディレクトリ} <Enter>
開発実行環境サーバに、root 権限でログインします。
ダウンロードしたSpark資産(spark-1.4.1-bin-hadoop1.tgz)をサーバに配置します。以降の手順では、/tmp配下に配置した場合の実行例で説明します。
Spark資産を展開します。
# cd /tmp # tar zxvf spark-1.4.1-bin-hadoop1.tgz <Enter>
Spark資産を移動します。
# mv spark-1.4.1-bin-hadoop1 /usr/local <Enter>
Spark資産の所有者をSpark利用ユーザーに変更します。
# chown sparkuser1:bdppgroup -R /usr/local/spark-1.4.1-bin-hadoop1 <Enter>
設定ファイルの編集
環境に合わせてSparkの設定ファイルを作成・編集する必要があります。
各サーバで作成・編集が必要な設定ファイルは以下のとおりです。
設定ファイル | 導入環境 | 格納ディレクトリ | |||
---|---|---|---|---|---|
マスタサーバ | スレーブ | 開発実行 | データ | ||
spark-env.sh | ○ | ◯ | ◯ | × | /usr/local/spark-1.4.1-bin-hadoop1/conf |
core-site.xml(*1) | ◯ | ◯ | ◯ | × | /etc/hadoop_spark |
hive-site.xml | ◯ | × | ◯ | × | ■マスタサーバ(セカンダリ) /usr/local/apache-hive-0.13.1-bin ■開発実行環境サーバ /usr/local/spark-1.4.1-bin-hadoop1/conf |
○:設定する必要があります。
×:設定は不要です。
*1:Hadoop用のcore-site.xmlとは別に、Spark用のcore-site.xmlを作成する必要があります。
参照
各設定ファイルの設定項目については「I.2.6 設定ファイル」を参照してください。
動作確認
Sparkが正常に動作することを確認します。
Hive Metastoreが正常に起動することを確認します。
マスタサーバ(セカンダリ)に、root 権限でログインします。
Spark実行ユーザーに切り替えます。
# su - spark <Enter>
環境変数HADOOP_CONF_DIRにSpark用のHadoop設定ファイル(core-site.xml)が格納されているディレクトリを指定します。
$ export HADOOP_CONF_DIR=/etc/hadoop_spark
Hive Metastoreを起動します。
$ nohup /usr/local/apache-hive-0.13.1-bin/bin/hive --service metastore & <Enter> [1] {HievのPID} nohup: ignoring input and appending output to `nohup.out'
Hive Metastoreが正常に起動していることを確認します。
$ ps u --pid {HievのPID} <Enter> USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND spark {HiveのPID} 35.6 3.2 677112 128424 pts/0 Sl 17:19 0:06 /usr/lib/jre-fj
ポイント
psコマンドでHive Metastoreが表示されなかった場合は、Hiveのログ(デフォルトでは/tmp/{Spark実行ユーザー}/hive.log)を参照して対処を行ってからもう一度起動してください。
注意
Hive Metastoreの起動時は、環境変数HADOOP_CONF_DIRにSpark用のHadoop設定ファイル(core-site.xml)が格納されたディレクトリを設定してください。
マスタサーバ(セカンダリ)でSpark用のHive Metastoreとは別にHive Metastoreを起動している場合、それぞれのHive Metastoreで使用するポート番号は異なるものを指定してください。Hive Metastoreの起動時に「p」オプションを使用することでポート番号を指定できます。
hive --service metastore -p {Hiveメタストアポート番号} <Enter>
Sparkが正常に起動することを確認します。
マスタサーバ(セカンダリ)に、root 権限でログインします。
Spark実行ユーザーに切り替えます。
# su - spark <Enter>
Sparkを起動します。
$ /usr/local/spark-1.4.1-bin-hadoop1/sbin/start-all.sh <Enter> starting org.apache.spark.deploy.master.Master, logging to /usr/local/spark-1.4.1-bin-hadoop1/sbin/../logs/spark-spark-org.apache.spark.deploy.master.Master-1-master2.out slave6: starting org.apache.spark.deploy.worker.Worker, logging to /usr/local/spark-1.4.1-bin-hadoop1/sbin/../logs/spark-spark-org.apache.spark.deploy.worker.Worker-1-slave6.out …
Spark web UI(http://{マスタサーバ(セカンダリ)の業務LANのIP}:8080)にアクセスし、MasterとWorkerが起動していることを確認します。
URL: http://10.10.10.12:8080
spark-submitが正常に動作することを確認します。
開発実行環境サーバに、root 権限でログインします。
Spark利用ユーザーに切り替えます。
# su - sparkuser1 <Enter>
Sparkのインストールディレクトリに移動します。
$ cd /usr/local/spark-1.4.1-bin-hadoop1 <Enter>
sampleプログラムを実行し、標準出力に"Pi is roughly {数値}"が表示されることを確認します({数値}は実行毎に異なります)。
$ ./bin/spark-submit --class org.apache.spark.examples.SparkPi --master spark://10.10.10.12:7077 ./lib/spark-examples-1.4.1-hadoop1.0.4.jar 1000 <Enter> Pi is roughly 3.14173448
spark-sqlが正常に動作することを確認します。
開発実行環境サーバに、root 権限でログインします。
Spark利用ユーザーに切り替えます。
# su - sparkuser1 <Enter>
Sparkのインストールディレクトリに移動します。
$ cd /usr/local/spark-1.4.1-bin-hadoop1 <Enter>
spark-sqlを起動します。
$ ./bin/spark-sql --master spark://10.10.10.12:7077 <Enter>
テーブル1を作成し、データを格納します。
> CREATE TABLE IF NOT EXISTS src1 (key INT, value STRING); <Enter> Time taken: 1.46 seconds > LOAD DATA LOCAL INPATH 'examples/src/main/resources/kv1.txt' INTO TABLE src1; <Enter> Copying data from file:/usr/local/spark-1.4.1-bin-hadoop1/examples/src/main/resources/kv1.txt Copying file: file:/usr/local/spark-1.4.1-bin-hadoop1/examples/src/main/resources/kv1.txt Loading data to table default.src1 Table default.src1 stats: [numFiles=1, numRows=0, totalSize=5812, rawDataSize=0] OK Time taken: 2.06 seconds > SELECT COUNT(*) FROM src1; 500 Time taken: 6.75 seconds, Fetched 1 row(s)
テーブル2を新規に作成し、データを格納します。
> CREATE TABLE IF NOT EXISTS src2 (key INT, value STRING); <Enter> Time taken: 1.46 seconds > LOAD DATA LOCAL INPATH 'examples/src/main/resources/kv1.txt' INTO TABLE src2; <Enter> Copying data from file:/usr/local/spark-1.4.1-bin-hadoop1/examples/src/main/resources/kv1.txt Copying file: file:/usr/local/spark-1.4.1-bin-hadoop1/examples/src/main/resources/kv1.txt Loading data to table default.src2 Table default.src2 stats: [numFiles=1, numRows=0, totalSize=5812, rawDataSize=0] OK Time taken: 2.06 seconds > SELECT COUNT(*) FROM src2; 500 Time taken: 6.75 seconds, Fetched 1 row(s)
テーブル1にテーブル2のデータを追加します。
> INSERT INTO TABLE src1 SELECT * FROM src2; <Enter> Time taken: 1.558 seconds > SELECT COUNT(*) FROM src1; <Enter> 1000 Time taken: 0.931 seconds, Fetched 1 row(s)
テーブル1のデータを削除します。
> TRUNCATE TABLE src1; <Enter> > SELECT COUNT(*) FROM src1; <Enter> 0 Time taken: 0.564 seconds, Fetched 1 row(s)
テーブル1を削除します。
> DROP TABLE src1; <Enter> OK Time taken: 0.319 seconds > SHOW TABLES; <Enter> src2 false Time taken: 0.152 seconds, Fetched 1 row(s)