Mark:Hive実行エンジンとしてSpark on Yarnを使用

2319 ワード

原文:http://lxw1234.com/archives/2016/05/673.htm
Hiveは1.1以降、実行エンジンとしてSparkを使用することをサポートし、Hiveの実行エンジンとしてSpark On Yarnを使用することを構成します.まず、次の2つの問題に注意してください.
HiveのバージョンとSparkのバージョンを一致させます.
具体的には、あなたが使用しているHiveバージョンのコンパイル時にどのバージョンのSparkを使用するかは、同じバージョンのSparkを使用する必要があります.Hiveのpom.xmlでspark.versionを表示して決定することができます.
Hive root pom.xml’s defines what version of Spark it was built/tested with.
Sparkが使用するjarパッケージは、Hiveを統合していない必要があります.
つまり、コンパイル時には指定されていません.
一般的に公式に提供されているコンパイルされたSparkダウンロードは、Hiveが統合されているため、これは別途コンパイルする必要があります.
Note that you must have a version of Spark which does not include the Hive jars. Meaning one which was not built with the Hive profile.
バージョンの問題に注意しないと、次のようなエラーが発生します.
Caused by: java.lang.NoClassDefFoundError: org/apache/hive/spark/client/Job
Caused by: java.lang.ClassNotFoundException: org.apache.hive.spark.client.Job
ここで使用する環境情報は次のとおりです.
hadoop-2.3.0-cdh5.0.0
apache-hive-2.0.0-bin
spark-1.5.0-bin-hadoop2.3
ここでSparkは,別途コンパイルされたspark−assembly−1.5.0−hadoop 2.3.0.jarを用いた.コンパイルは簡単で、spark-1.5.0のソースコードをダウンロードして、コマンドを使用します:
mvn -Pyarn -Phadoop-2.3 -Dhadoop.version=2.3.0-cdh5.0.0 -DskipTests -Dscala-2.10 clean package
 
まずhive-site.xmlにspark.homeを追加します.
spark.home
/usr/local/spark/spark-1.5.0-bin-hadoop2.3
環境変数も設定
export SPARK_HOME=/usr/local/spark/spark-1.5.0-bin-hadoop2.3
この2つは1つだけ構成すればいいはずです.
hive-cliコマンドラインに入り、setを使用して次のパラメータを設定します.
set spark.master=yarn-cluster;//デフォルトはyarn-clusterモードで、このパラメータはを構成しないことができます.
set hive.execution.engine=spark;
set spark.eventLog.enabled=true;
set spark.eventLog.dir=hdfs://cdh5/tmp/sparkeventlog;
set spark.executor.memory=1g;
set spark.executor.instances=50;//executor数、デフォルトは2つのしかないようです
set spark.driver.memory=1g;
set spark.serializer=org.apache.spark.serializer.KryoSerializer;
もちろん、これらのパラメータはhive-site.xmlにも構成できます.
次に、HQLクエリを実行してみます.
実行エンジンとしてSparkが使用されていることがわかります.
YarnのWEBページでも対応アプリを見ました.
hive-cliコマンドラインに入り、クエリーを最初に実行した後、Hiveはパラメータspark.executor.instancesで指定した数のContainerリソースをYarnに申請し、Driverで使用するContainerを追加します.このアプリケーションはhive-cliを終了するまで実行され、クラスタリソースが自動的に解放され、回収されません.hive-cliでexecutorに関連するパラメータを変更し、再度クエリーを実行すると、Hiveは前回Yarnで実行したApplicationを終了し、リソースコミット実行を再申請します.