Hadoop >

 これは、主に Hadoop およびその関連アプリケーション管理者向けの運用ガイドです。

目次

構成管理

  1. Chef - 大規模クラスタの場合には、当然運用インフラもスケールアウトする必要があります。
  2. Ansible

クラウド

  1. AmazonWebServices
  2. OpenStack
  3. Eucalyptus

ネットワーク

  1. ネットワークインフラ - クラスタでは南北方向よりも東西方向のトラフィックが格段に増加しますので、従来の外向きのトラフィックに特化したネットワークとは根本的に異なる内部トラフィックに耐えられるネットワークを構成する必要があります。

基盤インフラ

  1. SSH
    1. OpenSSH
    2. PuTTY
  2. 組織内ミラーサイトの構築(リポジトリ管理): 通常、クラスタの構成ノードからインターネットへの直接アクセスは許容されないことに加えて、大規模クラスタを運用する場合にはそのセットアップやアップグレード時に外部のミラーサイトに不要な負荷をかけないためにも、組織内にローカルミラーサイト(またはキャッシュプロキシ)を構築する必要があります。ミラーする必要があるものには以下のようなものが考えられます。
    1. OSディストリビューションパッケージリポジトリ
      1. キャッシュプロキシの構築
      2. Debianアーカイブ
      3. yumリポジトリ
      4. 追加のリポジトリ(EPEL等)
    2. JDK関連プロダクト(Oracle JDK、JCEポリシーファイル等)
    3. Hadoop関連プロダクトのリポジトリ
      1. Apacheアーカイブ
      2. CDHリポジトリ
      3. HDPリポジトリ
  3. OSdebian.pngDebiancentos.pngCentOS
    1. LightweightOS
  4. DNSの運用 - Kerberos認証を利用する場合にはDNSの運用が重要です。
  5. 認証局(CA)の運用 - HttpFS等でSSLを使用する場合に必要となります。
  6. Kerberos - セキュアHadoopの運用では必須です。
    1. Kerberos認証環境の構築
    2. ツール類のKerberos認証(HTTP SPNEGO)対応 - mod_auth_kerb
  7. LDAP - セキュアHadoopの運用では必須です。
    1. LDAP認可環境

運用コマンドの並列分散実行

  1. Ansibleの利用
  2. knife sshの利用
  3. Fabricの利用
  4. dshの利用
  5. pdshの利用

ログ

Comming Soon.

監視

監視インフラ

  1. Nagios
  2. Ganglia

ログ

監査

  1. HDFS

Gateway

  1. GridGateway - Hadoop関連コマンドのセキュアな実行環境
  2. Hoophttpfs?) - HDFSプロキシ機能
  3. Oozie - ジョブワークフロー、コーディネータエンジン

メタデータ管理

  1. HCatalog - Hive 0.11に統合されました。

HDFS

基本

  • クォータ設定を厳格に運用するため、フルアクセスできる /tmp ディレクトリは作成しません。一般ユーザが、PigHive を利用する場合、デフォルトでは /tmp 配下に一時ファイルを書き込みますので、それらの設定を変更して使用するように促します。

ホームディレクトリの作成

  • HDFS のデフォルトホームディレクトリは、/user 配下になります。
    $ sudo -u hdfs hadoop fs -mkdir /user/<username>
    $ sudo -u hdfs hadoop fs -chown <username> /user/<username>

リバランス

  • HDFSに対する書き込みと削除を繰り返すと、時間経過とともに各データノードの領域利用状況にバラつきが発生します。容量に余裕のなくなったノードではその動作に支障が出ますので、あらかじめそのような状態を是正し、各ノードの領域消費状況を平準化する必要があります。この作業をリバンランスといい、Balancerデーモンを起動して行います。
    $ sudo -u hdfs start-balancer.sh
    • note.pngセキュアHadoopにおいては、NameNodeのサービスプリンシパルにて実行する必要があります。そうでない場合には、以下のようなエラーがログに出力されます。
      1. No encryption was performed by peer.
      2. Received an IO exception: User hdfs@LOCALDOMAIN is not authorized for protocol interface org.apache.hadoop.hdfs.server.protocol.NamenodeProtocol,
      3.  expected client Kerberos principal is hdfs/localhost@LOCALDOMAIN . Exiting...
      4. Balancing took 980.0 milliseconds

NameNode

ノードの冗長化

ノードの復旧

DataNode

ノードの復旧

  • DataNodeNameNode に heartbeat を送信することにより自動でクラスタに復帰しますので、DataNodeを再セットアップ*1しデーモンを起動させれば完了です。
    $ sudo -u hdfs hadoop-daemon.sh start datanode
    $ sudo -u mapred hadoop-daemon.sh start tasktracker

ノードの就役(commission)

※include、excludeファイルは、HDFS、MapReduce?両クラスタで共有しているものとします。

  1. 新しい DataNodeNameNode への接続を許可するために、include ファイルにその新しいノードを追加し、以下のコマンドで、NameNode のノード情報を更新します。
    [@namenode]$ sudo -u hdfs hadoop dfsadmin -refreshNodes
  2. Hadoop の制御スクリプトでコントロールする場合には、新しいノードを slaves ファイルに追加します。
  3. 追加ノードの DataNode デーモンを起動します。
    [@newnode]$ sudo -u hdfs hadoop-daemon.sh start datanode
  4. 以下のコマンドで、JobTracker の ノード情報を更新します。
    [@jobtracker]$ sudo -u mapred hadoop mradmin -refreshNodes
  5. 追加ノードの TaskTracker デーモンを起動します。
    [@newnode]$ sudo -u mapred hadoop-daemon.sh start tasktracker
  6. Web UI から新ノードが追加されたことを確認します。
  7. 必要に応じて、データブロックをバランスさせます。
    [@namenode]$ sudo -u hdfs start-balancer.sh

ノードの退役(decommission)

※include、excludeファイルは、HDFS、MapReduce?両クラスタで共有しているものとします。

  1. exclude ファイルにのみ退役するノードを追加し、MapReduce? クラスタを再起動します。TaskTracker は、include ファイルにエントリされ、exclude ファイルにない場合にのみ、JobTracker に接続を許可されますので、この時点で退役ノードの TaskTrackerMapReduce? クラスタから除去されます。
    [hadoop@name]$ bin/stop-mapred.sh
    [hadoop@name]$ bin/start-mapred.sh
  2. NameNode のノード情報を更新します。DataNode は、include、exclude 両ファイルにエントリがある場合、NameNode に接続できるが、退役対象となりますので、この時点で退役処理が開始され、退役ノードが保持するデータブロックが他のノードに分散されます。Web UI で確認すると、Admin State が Decommission In Progress と表示されます。
    [hadoop@name]$ bin/hadoop dfsadmin -refreshNodes
  3. すべての退役ノードの Admin State が Decommissioned*2 となったのを確認してから、退役ノードを停止させます。
    [hadoop@decommissionednode]$ bin/hadoop-daemon.sh stop tasktracker
    [hadoop@decommissionednode]$ bin/hadoop-daemon.sh stop datanode
  4. 最後に include ファイルから退役ノードを削除し、NameNode のノード情報を更新します。slaves ファイルからも退役ノードを削除します。
    [hadoop@name]$ bin/hadoop dfsadmin -refreshNodes

Hive

  1. 一般ユーザが Hive を使用する場合には、HDFS上の一時作業領域(デフォルトは、/tmp)を適切に設定することを促します。Hiveの設定ファイル(conf/hive-site.xml)で、hive.exec.scratchdir の設定値を /user/${user.name} 以下に切り替えておくとよいでしょう。
    1. <property>
    2.   <name>hive.exec.scratchdir</name>
    3.   <value>/user/${user.name}/hive-scratch</value>
    4.   <description>Scratch space for Hive jobs</description>
    5. </property>
  2. 一般ユーザ向けに、MetaStore?をサービスとして提供するとよいでしょう。

Pig

  1. 一般ユーザが Pig を使用する場合には、HDFS上の一時作業領域(デフォルトは、/tmp)を適切に設定することを促します。プロパティ pig.temp.dir で設定できます。
  2. 一般ユーザでも問題なく Hadoop 環境に接続できるように、${PIG_HOME}/conf/pig-env.sh に以下のような設定を追加しておきます。
    1. # 適切なJDKを
    2. export JAVA_HOME=/usr/lib/jvm/java-6-openjdk
    3. # HADOOP_HOMEは、hadoopコマンドの検索に使用されます。
    4. export HADOOP_HOME_WARN_SUPPRESS=true
    5. export HADOOP_HOME=/grid/usr/hadoop
    6. export HADOOP_CONF_DIR=${HADOOP_HOME}/conf

*1 データ破損の恐れが高い場合には、そのノードのデータをすべて削除して再起動した方がよいでしょう。
*2 レプリケーション数とノード数が少ないためか、ログからデータブロックの再分散完了は確認できましたが、このステータスへの移行は確認できませんでした。

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-08-01 (月) 21:38:00 (414d)