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コマンドは以下の通りです.
    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があります.実行時に本当に必要なものは何ですか?これらのディレクトリとファイルがリストされます.
  • $SPARK_HOME/bin
  • $SPARK_HOME/sbin
  • $SPARK_HOME/lib_managed
  • $SPARK_HOME/conf
  • $SPARK_HOME/assembly/target/scala-2.10

  • 上記のディレクトリの内容を/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に戻ります.
    参考資料
  • Steps to install Hadoop 2.x release (Yarn or Next-Gen) on multi-node cluster