Apache Sparkソース走読の12--Hive on Spark運行環境構築
9343 ワード
転載を歓迎します.転載は出典を明記してください.徽沪一郎.
くさび
HiveはHadoopベースのオープンソース・データ・ウェアハウス・ツールで、SQLのようなHiveQL言語を提供しており、上位レベルのデータ・アナリストがMapReduceの知識をあまり知らずにHdfsに格納されている大量のデータを分析できるようにしています.この特性により広く歓迎されている.
Hiveの全体フレームワークの1つの重要なモジュールは実行モジュールであり,この部分はHadoopにおけるMapReduce計算フレームワークで実現されるため,処理速度において非常に満足できない.Sparkの優れた処理速度のため、HiveQLの実行をSparkで実行することに成功した人もいます.これはすでに有名なSharkオープンソースプロジェクトです.
Spark 1.0では、Spark自身がHiveをサポートしています.本稿では,SparkがどのようにHiveのサポートを提供するかを分析するつもりはなく,Hive On Sparkのテスト環境をどのように構築するかに重点を置く.
インストールの概要
全体のインストール手順は以下のステップに分けられます. Hadoopクラスタ(cluster全体が3台のマシンからなり、1台がMaster、2台がSlave) を構築 Spark 1.0をコンパイルし、Hadoop 2.4.0とHive をサポートします. Hive on Sparkを実行するテストケース(SparkとHadoop Namenodeは同じマシンで実行) Hadoopクラスタ構築
仮想マシンの作成
kvmベースの仮想マシンを作成し、libvirtが提供するグラフィック管理インタフェースを利用して3台の仮想マシンを作成するのは便利です.メモリとipアドレスの割り当ては以下の通りです. master 2G 192.168.122.102 slave1 4G 192.168.122.103 slave2 4G 192.168.122.104
仮想マシンにosをインストールする手順は省略しました.arch linuxを使用しています.osのインストールが完了したら、以下のソフトウェアもインストールされていることを確認します. jdk openssh
ユーザー・グループとユーザーの作成
各マシンにhadoopという名前のユーザーグループを作成し、hduserという名前のユーザーを追加します.具体的なbashコマンドは以下の通りです.
パスワードなしでログイン
slaveマシン上のdatanodeまたはnodemanagerを起動するときは、ユーザー名パスワードを入力する必要があります.毎回パスワードを入力しないように、次のコマンドでパスワードなしログインを作成できます.注意はmasterからslaveマシンへの一方向パスワードなしです.
id_dsa.pubをauthorized_にコピーkeys、そしてslave 1とslave 2の$HOME/.sshディレクトリ
各マシンの/etc/hostsを変更
クラスタを構成するmaster,slave 1,slave 2で、/etc/hostsファイルに次の内容を追加します.
変更が完了したら、masterでssh slave 1を実行してテストできます.パスワードを入力しないプロセスでslave 1に直接ログインすると、上記の構成が成功します.
ダウンロードhadoop 2.4.0
hduserとしてmasterにログインし、次のコマンドを実行します.
hadoopプロファイルの変更
以下に追加する.bashrc
修正$HADOOP_HOME/libexec/hadoop-config.sh
hadoop-config.shファイルの先頭に次の内容を追加します.
$HADOOP_CONF_DIR/yarn-env.sh
yarn-env.sh先頭に以下の内容を追加する
xmlプロファイルの変更
ファイル1:$HADOOP_CONF_DIR/core-site.xml
ファイル2:$HADOOP_CONF_DIR/hdfs-site.xml
ファイル3:$HADOOP_CONF_DIR/mapred-site.xml
ファイル4:$HADOOP_CONF_DIR/yarn-site.xml
ファイル5:$HADOOP_CONF_DIR/slaves
ファイルに次の内容を追加します.
tmpディレクトリの作成
$HADOOP_でHOMEでtmpディレクトリを作成する
yarnディレクトリをslave 1とslave 2にコピー
さっき行ったプロファイルの変更はmasterマシンで発生し、変更した内容全体をslave 1とslave 2にコピーします.
ロット処理はさっぱりしていますか?
名前の書式設定
masterマシンでnamenodeをフォーマットする
clusterクラスタの起動
注意:daemon.shは本機のみで動作することを示す、daemons.shは、すべてのclusterノードで実行されることを示す.
hadoopクラスタのインストールが正しいかどうかを確認します.
wordcountの例を走って、具体的なステップはもうリストしないで、本シリーズの第11編を参考にすることができます
コンパイルSpark 1.0
Sparkのコンパイルは簡単で、すべての失敗の原因の大部分は依存するjarパッケージが正常にダウンロードできないことに帰結することができます.
Spark 1.0でhadoop 2.4.0とhiveをサポートするには、次のコマンドを使用してコンパイルします.
すべてがうまくいけばassemblyディレクトリの下でspark-assembly-1.0.0-SNAPSHOT-hadoop 2を生成します.4.0.jar
実行パッケージの作成
コンパイル後の$SPARK_全体HOMEディレクトリの下のすべてのファイルの体積はまだ大きくて、大体2つ以上のGがあります.実行時に本当に必要なものは何ですか?これらのディレクトリとファイルがリストされます. $SPARK_HOME/bin $SPARK_HOME/sbin $SPARK_HOME/lib_managed $SPARK_HOME/conf $SPARK_HOME/assembly/target/scala-2.10
上記のディレクトリの内容を/tmp/spark-distにコピーし、圧縮パッケージを作成します.
運転パッケージをmasterマシンにアップロード
生成された実行パケットをmasterに転送する(192.168.122.102)
hive on sparkテストの実行例
このような苦しみを経て、ついに最も緊張した時になった.
hduserとしてmaster機にログインしspark-1.0-dist.tar.を解凍する.gz
conf/spark-envを変更します.sh
最も簡単なexampleの実行
bin/spark-shell命令でshellを起動した後、次のscalaコードを実行します.
すべてがうまくいけば、最後のhqlはkeyとvalueに戻ります.
参考資料 Steps to install Hadoop 2.x release (Yarn or Next-Gen) on multi-node cluster
くさび
HiveはHadoopベースのオープンソース・データ・ウェアハウス・ツールで、SQLのようなHiveQL言語を提供しており、上位レベルのデータ・アナリストがMapReduceの知識をあまり知らずにHdfsに格納されている大量のデータを分析できるようにしています.この特性により広く歓迎されている.
Hiveの全体フレームワークの1つの重要なモジュールは実行モジュールであり,この部分はHadoopにおけるMapReduce計算フレームワークで実現されるため,処理速度において非常に満足できない.Sparkの優れた処理速度のため、HiveQLの実行をSparkで実行することに成功した人もいます.これはすでに有名なSharkオープンソースプロジェクトです.
Spark 1.0では、Spark自身がHiveをサポートしています.本稿では,SparkがどのようにHiveのサポートを提供するかを分析するつもりはなく,Hive On Sparkのテスト環境をどのように構築するかに重点を置く.
インストールの概要
全体のインストール手順は以下のステップに分けられます.
仮想マシンの作成
kvmベースの仮想マシンを作成し、libvirtが提供するグラフィック管理インタフェースを利用して3台の仮想マシンを作成するのは便利です.メモリとipアドレスの割り当ては以下の通りです.
仮想マシンにosをインストールする手順は省略しました.arch linuxを使用しています.osのインストールが完了したら、以下のソフトウェアもインストールされていることを確認します.
ユーザー・グループとユーザーの作成
各マシンにhadoopという名前のユーザーグループを作成し、hduserという名前のユーザーを追加します.具体的なbashコマンドは以下の通りです.
groupadd hadoop
useradd -b /home -m -g hadoop hduser
passwd hduser
パスワードなしでログイン
slaveマシン上のdatanodeまたはnodemanagerを起動するときは、ユーザー名パスワードを入力する必要があります.毎回パスワードを入力しないように、次のコマンドでパスワードなしログインを作成できます.注意はmasterからslaveマシンへの一方向パスワードなしです.
cd $HOME/.ssh
ssh-keygen -t dsa
id_dsa.pubをauthorized_にコピーkeys、そしてslave 1とslave 2の$HOME/.sshディレクトリ
cp id_dsa.pub authorized_keys
# slave1 slave2 ,hduser $HOME .ssh
scp authorized_keys slave1:$HOME/.ssh
scp authorized_keys slave2:$HOME/.ssh
各マシンの/etc/hostsを変更
クラスタを構成するmaster,slave 1,slave 2で、/etc/hostsファイルに次の内容を追加します.
192.168.122.102 master
192.168.122.103 slave1
192.168.122.104 slave2
変更が完了したら、masterでssh slave 1を実行してテストできます.パスワードを入力しないプロセスでslave 1に直接ログインすると、上記の構成が成功します.
ダウンロードhadoop 2.4.0
hduserとしてmasterにログインし、次のコマンドを実行します.
cd /home/hduser
wget http://mirror.esocc.com/apache/hadoop/common/hadoop-2.4.0/hadoop-2.4.0.tar.gz
mkdir yarn
tar zvxf hadoop-2.4.0.tar.gz -C yarn
hadoopプロファイルの変更
以下に追加する.bashrc
export HADOOP_HOME=/home/hduser/yarn/hadoop-2.4.0
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop
修正$HADOOP_HOME/libexec/hadoop-config.sh
hadoop-config.shファイルの先頭に次の内容を追加します.
export JAVA_HOME=/opt/java
$HADOOP_CONF_DIR/yarn-env.sh
yarn-env.sh先頭に以下の内容を追加する
export JAVA_HOME=/opt/java
export HADOOP_HOME=/home/hduser/yarn/hadoop-2.4.0
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop
xmlプロファイルの変更
ファイル1:$HADOOP_CONF_DIR/core-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hduser/yarn/hadoop-2.4.0/tmp</value>
</property>
</configuration>
ファイル2:$HADOOP_CONF_DIR/hdfs-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
</configuration>
ファイル3:$HADOOP_CONF_DIR/mapred-site.xml
<?xml version="1.0"?>
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
ファイル4:$HADOOP_CONF_DIR/yarn-site.xml
<?xml version="1.0"?>
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master:8025</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>master:8030</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>master:8040</value>
</property>
</configuration>
ファイル5:$HADOOP_CONF_DIR/slaves
ファイルに次の内容を追加します.
slave1
slave2
tmpディレクトリの作成
$HADOOP_でHOMEでtmpディレクトリを作成する
mkdir $HADOOP_HOME/tmp
yarnディレクトリをslave 1とslave 2にコピー
さっき行ったプロファイルの変更はmasterマシンで発生し、変更した内容全体をslave 1とslave 2にコピーします.
for target in slave1 slave2
do
scp -r yarn $target:~/
scp $HOME/.bashrc $target:~/
done
ロット処理はさっぱりしていますか?
名前の書式設定
masterマシンでnamenodeをフォーマットする
bin/hadoop namenode -format
clusterクラスタの起動
sbin/hadoop-daemon.sh start namenode
sbin/hadoop-daemons.sh start datanode
sbin/yarn-daemon.sh start resourcemanager
sbin/yarn-daemons.sh start nodemanager
sbin/mr-jobhistory-daemon.sh start historyserver
注意:daemon.shは本機のみで動作することを示す、daemons.shは、すべてのclusterノードで実行されることを示す.
hadoopクラスタのインストールが正しいかどうかを確認します.
wordcountの例を走って、具体的なステップはもうリストしないで、本シリーズの第11編を参考にすることができます
コンパイルSpark 1.0
Sparkのコンパイルは簡単で、すべての失敗の原因の大部分は依存するjarパッケージが正常にダウンロードできないことに帰結することができます.
Spark 1.0でhadoop 2.4.0とhiveをサポートするには、次のコマンドを使用してコンパイルします.
SPARK_HADOOP_VERSION=2.4.0 SPARK_YARN=true SPARK_HIVE=true sbt/sbt assembly
すべてがうまくいけばassemblyディレクトリの下でspark-assembly-1.0.0-SNAPSHOT-hadoop 2を生成します.4.0.jar
実行パッケージの作成
コンパイル後の$SPARK_全体HOMEディレクトリの下のすべてのファイルの体積はまだ大きくて、大体2つ以上のGがあります.実行時に本当に必要なものは何ですか?これらのディレクトリとファイルがリストされます.
上記のディレクトリの内容を/tmp/spark-distにコピーし、圧縮パッケージを作成します.
mkdir /tmp/spark-dist
for i in $SPARK_HOME/{bin,sbin,lib_managed,conf,assembly/target/scala-2.10}
do
cp -r $i /tmp/spark-dist
done
cd /tmp/
tar czvf spark-1.0-dist.tar.gz spark-dist
運転パッケージをmasterマシンにアップロード
生成された実行パケットをmasterに転送する(192.168.122.102)
scp spark-1.0-dist.tar.gz [email protected]:~/
hive on sparkテストの実行例
このような苦しみを経て、ついに最も緊張した時になった.
hduserとしてmaster機にログインしspark-1.0-dist.tar.を解凍する.gz
#after login into the master as hduser
tar zxvf spark-1.0-dist.tar.gz
cd spark-dist
conf/spark-envを変更します.sh
export SPARK_LOCAL_IP=127.0.0.1
export SPARK_MASTER_IP=127.0.0.1
最も簡単なexampleの実行
bin/spark-shell命令でshellを起動した後、次のscalaコードを実行します.
val sc: SparkContext // An existing SparkContext.
val hiveContext = new org.apache.spark.sql.hive.HiveContext(sc)
// Importing the SQL context gives access to all the public SQL functions and implicit conversions.
import hiveContext._
hql("CREATE TABLE IF NOT EXISTS src (key INT, value STRING)")
hql("LOAD DATA LOCAL INPATH 'examples/src/main/resources/kv1.txt' INTO TABLE src")
// Queries are expressed in HiveQL
hql("FROM src SELECT key, value").collect().foreach(println)
すべてがうまくいけば、最後のhqlはkeyとvalueに戻ります.
参考資料