このドキュメントでは、数ノードから数千ノードの非常に大規模なクラスタに至るまでのHadoopクラスタをインストールおよび構成する方法について説明します。Hadoopを試すには、まず単一のマシンにインストールすることをお勧めします(シングルノードの設定を参照)。
このドキュメントでは、高可用性などの高度なトピックは扱いません。
重要:すべての本番環境のHadoopクラスタは、Kerberosを使用して呼び出し元を認証し、HDFSデータへのアクセスを保護し、計算サービス(YARNなど)へのアクセスを制限します。
これらの手順は、Kerberosサービスとの統合については説明していません。本番環境のクラスタを立ち上げるすべての人は、組織のKerberosインフラストラクチャへの接続をデプロイメントの重要な一部として含める必要があります。
クラスタを保護する方法の詳細については、セキュリティを参照してください。
Hadoopクラスタのインストールには、通常、クラスタ内のすべてのマシンにソフトウェアを解凍するか、オペレーティングシステムに応じてパッケージングシステムを介してインストールすることが含まれます。ハードウェアを機能ごとに分割することが重要です。
通常、クラスタ内の1つのマシンがNameNodeとして、別のマシンがResourceManagerとして排他的に指定されます。これらがマスターです。その他のサービス(WebアプリプロキシサーバーやMapReduceジョブヒストリーサーバーなど)は通常、負荷に応じて専用ハードウェアまたは共有インフラストラクチャのいずれかで実行されます。
クラスタ内の残りのマシンは、DataNodeとNodeManagerの両方として機能します。これらはワーカーです。
HadoopのJava構成は、2種類の重要な構成ファイルによって駆動されます。
読み取り専用のデフォルト構成 - core-default.xml
、hdfs-default.xml
、yarn-default.xml
、および mapred-default.xml
。
サイト固有の構成 - etc/hadoop/core-site.xml
、etc/hadoop/hdfs-site.xml
、etc/hadoop/yarn-site.xml
、および etc/hadoop/mapred-site.xml
。
さらに、etc/hadoop/hadoop-env.sh
および etc/hadoop/yarn-env.sh
を介してサイト固有の値を設定することにより、ディストリビューションの bin/ ディレクトリにあるHadoopスクリプトを制御できます。
Hadoopクラスタを構成するには、Hadoopデーモンが実行される environment
と、Hadoopデーモンの configuration parameters
を構成する必要があります。
HDFSデーモンは、NameNode、SecondaryNameNode、およびDataNodeです。YARNデーモンは、ResourceManager、NodeManager、およびWebAppProxyです。MapReduceを使用する場合は、MapReduceジョブヒストリーサーバーも実行されます。大規模なインストールでは、これらは通常、別々のホストで実行されます。
管理者は、etc/hadoop/hadoop-env.sh
およびオプションで etc/hadoop/mapred-env.sh
および etc/hadoop/yarn-env.sh
スクリプトを使用して、Hadoopデーモンのプロセス環境をサイト固有にカスタマイズする必要があります。
少なくとも、リモートノードごとに正しく定義されるように、JAVA_HOME
を指定する必要があります。
管理者は、テーブルに示されている以下の構成オプションを使用して、個々のデーモンを構成できます。
デーモン | 環境変数 |
---|---|
NameNode | HDFS_NAMENODE_OPTS |
DataNode | HDFS_DATANODE_OPTS |
Secondary NameNode | HDFS_SECONDARYNAMENODE_OPTS |
ResourceManager | YARN_RESOURCEMANAGER_OPTS |
NodeManager | YARN_NODEMANAGER_OPTS |
WebAppProxy | YARN_PROXYSERVER_OPTS |
MapReduceジョブヒストリーサーバー | MAPRED_HISTORYSERVER_OPTS |
たとえば、NameNodeでparallelGCと4GBのJavaヒープを使用するように構成するには、hadoop-env.shに次のステートメントを追加する必要があります。
export HDFS_NAMENODE_OPTS="-XX:+UseParallelGC -Xmx4g"
その他の例については、etc/hadoop/hadoop-env.sh
を参照してください。
カスタマイズできるその他の便利な構成パラメーターには、以下が含まれます。
HADOOP_PID_DIR
- デーモンのプロセスIDファイルが格納されるディレクトリ。HADOOP_LOG_DIR
- デーモンのログファイルが格納されるディレクトリ。ログファイルが存在しない場合は自動的に作成されます。HADOOP_HEAPSIZE_MAX
- Javaヒープサイズに使用する最大メモリ量。JVMでサポートされているユニットもここでサポートされます。ユニットが存在しない場合、数値はメガバイト単位であるとみなされます。デフォルトでは、HadoopはJVMに使用量を決定させます。この値は、上記の適切な _OPTS
変数を使用して、デーモンごとにオーバーライドできます。たとえば、HADOOP_HEAPSIZE_MAX=1g
および HADOOP_NAMENODE_OPTS="-Xmx5g"
を設定すると、NameNodeが5GBのヒープで構成されます。ほとんどの場合、HADOOP_PID_DIR
および HADOOP_LOG_DIR
ディレクトリは、hadoopデーモンを実行するユーザーのみが書き込めるように指定する必要があります。そうしないと、シンボリックリンク攻撃の可能性があります。
また、HADOOP_HOME
をシステム全体のシェル環境構成で構成するのが慣例です。たとえば、/etc/profile.d
内の単純なスクリプト。
HADOOP_HOME=/path/to/hadoop export HADOOP_HOME
このセクションでは、指定された構成ファイルで指定する重要なパラメーターについて説明します。
etc/hadoop/core-site.xml
パラメーター | 値 | 注釈 |
---|---|---|
fs.defaultFS |
NameNode URI | hdfs://ホスト:ポート/ |
io.file.buffer.size |
131072 | SequenceFilesで使用される読み取り/書き込みバッファーのサイズ。 |
etc/hadoop/hdfs-site.xml
NameNodeの構成
パラメーター | 値 | 注釈 |
---|---|---|
dfs.namenode.name.dir |
NameNodeが名前空間とトランザクションログを永続的に格納するローカルファイルシステム上のパス。 | これがディレクトリのカンマ区切りリストである場合、名前テーブルは冗長性のためにすべてのディレクトリに複製されます。 |
dfs.hosts / dfs.hosts.exclude |
許可/除外されたDataNodeのリスト。 | 必要に応じて、これらのファイルを使用して、許可されるデータノードのリストを制御します。 |
dfs.blocksize |
268435456 | 大規模なファイルシステムのHDFSブロックサイズは256MB。 |
dfs.namenode.handler.count |
100 | 多数のDataNodeからのRPCを処理するためのNameNodeサーバーのスレッド数を増やします。 |
パラメーター | 値 | 注釈 |
---|---|---|
dfs.datanode.data.dir |
DataNode がそのブロックを格納するローカルファイルシステム上のパスのカンマ区切りリスト。 |
これがディレクトリのカンマ区切りリストである場合、データは通常異なるデバイス上のすべての名前付きディレクトリに格納されます。 |
etc/hadoop/yarn-site.xml
ResourceManagerとNodeManagerの構成
パラメーター | 値 | 注釈 |
---|---|---|
yarn.acl.enable |
true / false |
ACLを有効にするかどうか。デフォルトはfalseです。 |
yarn.admin.acl |
管理者ACL | クラスターの管理者を設定するためのACL。ACLは、カンマ区切りのユーザー、カンマ区切りのグループの形式です。デフォルトは特別な値である*で、これは誰でもアクセスできることを意味します。特別な値のスペースのみは、誰もアクセスできないことを意味します。 |
yarn.log-aggregation-enable |
false | ログ集約を有効または無効にするための設定 |
パラメーター | 値 | 注釈 |
---|---|---|
yarn.resourcemanager.address |
ジョブを送信するクライアント向けのResourceManager ホスト:ポート。 |
host:port 設定されている場合、yarn.resourcemanager.hostname で設定されたホスト名をオーバーライドします。 |
yarn.resourcemanager.scheduler.address |
リソースを取得するためにApplicationMastersがSchedulerと通信するためのResourceManager ホスト:ポート。 |
host:port 設定されている場合、yarn.resourcemanager.hostname で設定されたホスト名をオーバーライドします。 |
yarn.resourcemanager.resource-tracker.address |
NodeManager向けのResourceManager ホスト:ポート。 |
host:port 設定されている場合、yarn.resourcemanager.hostname で設定されたホスト名をオーバーライドします。 |
yarn.resourcemanager.admin.address |
管理コマンド向けのResourceManager ホスト:ポート。 |
host:port 設定されている場合、yarn.resourcemanager.hostname で設定されたホスト名をオーバーライドします。 |
yarn.resourcemanager.webapp.address |
ResourceManager Web UIホスト:ポート。 |
host:port 設定されている場合、yarn.resourcemanager.hostname で設定されたホスト名をオーバーライドします。 |
yarn.resourcemanager.hostname |
ResourceManager ホスト。 |
host すべてのyarn.resourcemanager*address リソースを設定する代わりに設定できる単一のホスト名。ResourceManagerコンポーネントのデフォルトポートになります。 |
yarn.resourcemanager.scheduler.class |
ResourceManager スケジューラークラス。 |
CapacityScheduler (推奨)、FairScheduler (こちらも推奨)、またはFifoScheduler 。完全修飾クラス名(例:org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler )を使用します。 |
yarn.scheduler.minimum-allocation-mb |
ResourceManager で各コンテナリクエストに割り当てるメモリの最小制限。 |
MB単位 |
yarn.scheduler.maximum-allocation-mb |
ResourceManager で各コンテナリクエストに割り当てるメモリの最大制限。 |
MB単位 |
yarn.resourcemanager.nodes.include-path / yarn.resourcemanager.nodes.exclude-path |
許可/除外されるNodeManagerのリスト。 | 必要に応じて、これらのファイルを使用して、許可されるNodeManagerのリストを制御します。 |
パラメーター | 値 | 注釈 |
---|---|---|
yarn.nodemanager.resource.memory-mb |
指定されたNodeManager で利用可能な物理メモリ(MB単位)のリソース。 |
実行中のコンテナで利用可能になるNodeManager の利用可能なリソースの合計を定義します |
yarn.nodemanager.vmem-pmem-ratio |
タスクの仮想メモリ使用量が物理メモリを超えてもよい最大比率 | 各タスクの仮想メモリ使用量は、この比率で物理メモリ制限を超える場合があります。NodeManager上のタスクで使用される仮想メモリの合計量は、この比率で物理メモリ使用量を超える場合があります。 |
yarn.nodemanager.local-dirs |
中間データが書き込まれるローカルファイルシステムのパスのカンマ区切りリスト。 | 複数のパスは、ディスクI/Oの分散に役立ちます。 |
yarn.nodemanager.log-dirs |
ログが書き込まれるローカルファイルシステムのパスのカンマ区切りリスト。 | 複数のパスは、ディスクI/Oの分散に役立ちます。 |
yarn.nodemanager.log.retain-seconds |
10800 | NodeManagerでログファイルを保持するデフォルト時間(秒単位)。ログ集約が無効になっている場合にのみ適用されます。 |
yarn.nodemanager.remote-app-log-dir |
/logs | アプリケーションの完了時にアプリケーションログが移動されるHDFSディレクトリ。適切な権限を設定する必要があります。ログ集約が有効になっている場合にのみ適用されます。 |
yarn.nodemanager.remote-app-log-dir-suffix |
logs | リモートログディレクトリに追加されるサフィックス。ログは${yarn.nodemanager.remote-app-log-dir}/${user}/${thisParam}に集約されます。ログ集約が有効になっている場合にのみ適用されます。 |
yarn.nodemanager.aux-services |
mapreduce_shuffle | Map Reduceアプリケーション用に設定する必要があるシャッフルサービス。 |
yarn.nodemanager.env-whitelist |
コンテナがNodeManagerから継承する環境プロパティ | mapreduceアプリケーションの場合、デフォルト値に加えて、HADOOP_MAPRED_HOMEを追加する必要があります。プロパティ値は、JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_HOME,PATH,LANG,TZ,HADOOP_MAPRED_HOMEである必要があります |
パラメーター | 値 | 注釈 |
---|---|---|
yarn.log-aggregation.retain-seconds |
-1 | 集約ログを削除する前に保持する時間。-1は無効にします。注意して、これを小さく設定しすぎると、ネームノードをスパムすることになります。 |
yarn.log-aggregation.retain-check-interval-seconds |
-1 | 集約されたログ保持のチェック間隔。0または負の値に設定すると、値は集約されたログ保持時間の1/10として計算されます。注意して、これを小さく設定しすぎると、ネームノードをスパムすることになります。 |
etc/hadoop/mapred-site.xml
MapReduceアプリケーションの設定
パラメーター | 値 | 注釈 |
---|---|---|
mapreduce.framework.name |
yarn | Hadoop YARNに設定された実行フレームワーク。 |
mapreduce.map.memory.mb |
1536 | マップのより大きなリソース制限。 |
mapreduce.map.java.opts |
-Xmx1024M | マップの子JVMのより大きなヒープサイズ。 |
mapreduce.reduce.memory.mb |
3072 | リデュースのより大きなリソース制限。 |
mapreduce.reduce.java.opts |
-Xmx2560M | リデュースの子JVMのより大きなヒープサイズ。 |
mapreduce.task.io.sort.mb |
512 | 効率のためにデータをソートする際のより高いメモリ制限。 |
mapreduce.task.io.sort.factor |
100 | ファイルをソートする際に一度にマージされるストリームを増やします。 |
mapreduce.reduce.shuffle.parallelcopies |
50 | 非常に多数のマップから出力をフェッチするためにリデュースによって実行される並列コピーの数を増やします。 |
パラメーター | 値 | 注釈 |
---|---|---|
mapreduce.jobhistory.address |
MapReduce JobHistory Serverホスト:ポート | デフォルトポートは10020です。 |
mapreduce.jobhistory.webapp.address |
MapReduce JobHistory Server Web UIホスト:ポート | デフォルトポートは19888です。 |
mapreduce.jobhistory.intermediate-done-dir |
/mr-history/tmp | 履歴ファイルがMapReduceジョブによって書き込まれるディレクトリ。 |
mapreduce.jobhistory.done-dir |
/mr-history/done | 履歴ファイルがMR JobHistory Serverによって管理されるディレクトリ。 |
Hadoopは、管理者がNodeManagerを構成して、ノードが正常かどうかを判断するために管理者提供のスクリプトを定期的に実行するメカニズムを提供します。
管理者は、スクリプトで任意のチェックを実行することにより、ノードが正常な状態にあるかどうかを判断できます。スクリプトがノードが異常な状態にあることを検出した場合、標準出力に文字列ERRORで始まる行を出力する必要があります。NodeManagerはスクリプトを定期的にスポーンし、その出力をチェックします。スクリプトの出力に上記の文字列ERRORが含まれている場合、ノードのステータスは異常
として報告され、ノードはResourceManagerによってブラックリストに登録されます。これ以上のタスクはこのノードに割り当てられません。ただし、NodeManagerはスクリプトの実行を継続するため、ノードが再び正常になった場合、ResourceManagerのブラックリストから自動的に削除されます。ノードのヘルス状態は、異常な場合はスクリプトの出力とともに、ResourceManager Webインターフェースで管理者が利用できます。ノードが正常になってからの時間もWebインターフェースに表示されます。
次のパラメータを使用して、etc/hadoop/yarn-site.xml
でノードヘルス監視スクリプトを制御できます。
パラメーター | 値 | 注釈 |
---|---|---|
yarn.nodemanager.health-checker.script.path |
ノードヘルススクリプト | ノードのヘルス状態をチェックするスクリプト。 |
yarn.nodemanager.health-checker.script.opts |
ノードヘルススクリプトオプション | ノードのヘルス状態をチェックするスクリプトのオプション。 |
yarn.nodemanager.health-checker.interval-ms |
ノードヘルススクリプトの間隔 | ヘルススクリプトを実行する時間間隔。 |
yarn.nodemanager.health-checker.script.timeout-ms |
ノードヘルススクリプトのタイムアウト間隔 | ヘルススクリプトの実行のタイムアウト。 |
ローカルディスクの一部のみが不良になった場合、ヘルスチェッカースクリプトはERRORを出力するべきではありません。NodeManagerには、ローカルディスク(特にnodemanager-local-dirsおよびnodemanager-log-dirsをチェック)のヘルス状態を定期的にチェックする機能があり、設定プロパティyarn.nodemanager.disk-health-checker.min-healthy-disksに設定された値に基づいて不良ディレクトリの数しきい値に達した後、ノード全体が異常としてマークされ、この情報もリソースマネージャーに送信されます。ブートディスクはRAIDされるか、ブートディスクの障害はヘルスチェッカースクリプトによって識別されます。
etc/hadoop/workers
ファイルに、すべてのワーカーホスト名またはIPアドレスを1行に1つずつリストします。ヘルパースクリプト(下記を参照)は、etc/hadoop/workers
ファイルを使用して、一度に多くのホストでコマンドを実行します。これは、JavaベースのHadoop構成には使用されません。この機能を使用するには、Hadoopの実行に使用されるアカウントに対して、sshトラスト(パスフレーズなしのsshまたはKerberosなどの他の手段)を確立する必要があります。
多くのHadoopコンポーネントはラックを認識しており、パフォーマンスと安全のためにネットワークトポロジを利用します。Hadoopデーモンは、管理者が構成したモジュールを呼び出すことによって、クラスター内のワーカーのラック情報を取得します。詳細については、ラック認識のドキュメントを参照してください。
HDFSを起動する前に、ラック認識を構成することを強くお勧めします。
Hadoopは、ロギングにApache Commons Loggingフレームワークを介してApache log4jを使用します。etc/hadoop/log4j.properties
ファイルを編集して、Hadoopデーモンのロギング構成(ログ形式など)をカスタマイズします。
必要なすべての構成が完了したら、ファイルをすべてのマシン上のHADOOP_CONF_DIR
ディレクトリに配布します。これは、すべてのマシンで同じディレクトリである必要があります。
一般に、HDFSとYARNは別々のユーザーとして実行することをお勧めします。ほとんどのインストールでは、HDFSプロセスは「hdfs」として実行されます。YARNは通常、「yarn」アカウントを使用しています。
Hadoopクラスターを起動するには、HDFSとYARNクラスターの両方を起動する必要があります。
HDFSを初めて起動するときは、フォーマットする必要があります。新しい分散ファイルシステムをhdfsとしてフォーマットします
[hdfs]$ $HADOOP_HOME/bin/hdfs namenode -format
指定されたノードでhdfsとして次のコマンドを使用して、HDFS NameNodeを起動します
[hdfs]$ $HADOOP_HOME/bin/hdfs --daemon start namenode
指定された各ノードでhdfsとして次のコマンドを使用して、HDFS DataNodeを起動します
[hdfs]$ $HADOOP_HOME/bin/hdfs --daemon start datanode
etc/hadoop/workers
とsshの信頼されたアクセスが構成されている場合(シングルノードセットアップを参照)、すべてのHDFSプロセスをユーティリティスクリプトで起動できます。hdfsとして
[hdfs]$ $HADOOP_HOME/sbin/start-dfs.sh
指定されたResourceManagerでyarnとして実行される次のコマンドを使用して、YARNを起動します
[yarn]$ $HADOOP_HOME/bin/yarn --daemon start resourcemanager
指定された各ホストでyarnとしてNodeManagerを起動するスクリプトを実行します
[yarn]$ $HADOOP_HOME/bin/yarn --daemon start nodemanager
スタンドアロンWebAppProxyサーバーを起動します。WebAppProxyサーバーでyarnとして実行します。ロードバランシングで複数のサーバーが使用されている場合は、それらの各サーバーで実行する必要があります
[yarn]$ $HADOOP_HOME/bin/yarn --daemon start proxyserver
etc/hadoop/workers
が設定され、SSH信頼アクセスが構成されている場合(シングルノードセットアップを参照)、すべてのYARNプロセスはユーティリティスクリプトで開始できます。yarn として実行します。
[yarn]$ $HADOOP_HOME/sbin/start-yarn.sh
MapReduce JobHistory Server を開始するには、指定されたサーバーで mapred として次のコマンドを実行します。
[mapred]$ $HADOOP_HOME/bin/mapred --daemon start historyserver
NameNode を停止するには、指定された NameNode で hdfs として次のコマンドを実行します。
[hdfs]$ $HADOOP_HOME/bin/hdfs --daemon stop namenode
DataNode を停止するスクリプトを hdfs として実行します。
[hdfs]$ $HADOOP_HOME/bin/hdfs --daemon stop datanode
etc/hadoop/workers
が設定され、SSH信頼アクセスが構成されている場合(シングルノードセットアップを参照)、すべてのHDFSプロセスはユーティリティスクリプトで停止できます。hdfs として実行します。
[hdfs]$ $HADOOP_HOME/sbin/stop-dfs.sh
ResourceManager を停止するには、指定された ResourceManager で yarn として次のコマンドを実行します。
[yarn]$ $HADOOP_HOME/bin/yarn --daemon stop resourcemanager
ワーカー上の NodeManager を停止するスクリプトを yarn として実行します。
[yarn]$ $HADOOP_HOME/bin/yarn --daemon stop nodemanager
etc/hadoop/workers
が設定され、SSH信頼アクセスが構成されている場合(シングルノードセットアップを参照)、すべてのYARNプロセスはユーティリティスクリプトで停止できます。yarn として実行します。
[yarn]$ $HADOOP_HOME/sbin/stop-yarn.sh
WebAppProxyサーバーを停止します。WebAppProxyサーバー上で yarn として実行します。ロードバランシングで複数のサーバーを使用している場合は、それぞれのサーバーで実行する必要があります。
[yarn]$ $HADOOP_HOME/bin/yarn stop proxyserver
MapReduce JobHistory Server を停止するには、指定されたサーバーで mapred として次のコマンドを実行します。
[mapred]$ $HADOOP_HOME/bin/mapred --daemon stop historyserver
Hadoopクラスタが起動して実行されたら、以下に説明するようにコンポーネントのWeb UIを確認してください。
デーモン | Webインターフェース | 注釈 |
---|---|---|
NameNode | http://nn_host:port/ | デフォルトのHTTPポートは9870です。 |
ResourceManager | http://rm_host:port/ | デフォルトのHTTPポートは8088です。 |
MapReduce JobHistory Server | http://jhs_host:port/ | デフォルトのHTTPポートは19888です。 |