From 50ad8ec90452afd0b8784b08ce1daf0284f339d8 Mon Sep 17 00:00:00 2001 From: Suresh Srinivas Date: Thu, 20 Oct 2011 00:29:12 +0000 Subject: [PATCH] HDFS-2471. Add documentation for HDFS federation feature. Contributed by Suresh Srinivas. git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/branch-0.23@1186579 13f79535-47bb-0310-9956-ffa450edef68 --- hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt | 2 + .../src/site/apt/ClusterSetup.apt.vm | 22 +- .../src/site/apt/Federation.apt.vm | 343 ++++++++++++++++++ .../src/site/apt/index.apt.vm | 2 + .../site/resources/federation-background.gif | Bin 0 -> 13420 bytes .../src/site/resources/federation.gif | Bin 0 -> 18355 bytes 6 files changed, 358 insertions(+), 11 deletions(-) create mode 100644 hadoop-mapreduce-project/hadoop-yarn/hadoop-yarn-site/src/site/apt/Federation.apt.vm create mode 100644 hadoop-mapreduce-project/hadoop-yarn/hadoop-yarn-site/src/site/resources/federation-background.gif create mode 100644 hadoop-mapreduce-project/hadoop-yarn/hadoop-yarn-site/src/site/resources/federation.gif diff --git a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt index 1dee9c80873..fcaabc6a166 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt +++ b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt @@ -702,6 +702,8 @@ Release 0.23.0 - Unreleased HDFS-2401. Running a set of methods in a Single Test Class. (Jonathan Eagles via mahadev) + HDFS-2471. Add federation documentation. (suresh) + OPTIMIZATIONS HDFS-1458. Improve checkpoint performance by avoiding unnecessary image diff --git a/hadoop-mapreduce-project/hadoop-yarn/hadoop-yarn-site/src/site/apt/ClusterSetup.apt.vm b/hadoop-mapreduce-project/hadoop-yarn/hadoop-yarn-site/src/site/apt/ClusterSetup.apt.vm index 73c856a8d94..e8969c516d9 100644 --- a/hadoop-mapreduce-project/hadoop-yarn/hadoop-yarn-site/src/site/apt/ClusterSetup.apt.vm +++ b/hadoop-mapreduce-project/hadoop-yarn/hadoop-yarn-site/src/site/apt/ClusterSetup.apt.vm @@ -394,19 +394,19 @@ Hadoop MapReduce Next Generation - Cluster Setup Format a new distributed filesystem: ---- - $ $HADOOP_HDFS_HOME/bin/hdfs namenode -format + $ $HADOOP_PREFIX_HOME/bin/hdfs namenode -format ---- Start the HDFS with the following command, run on the designated NameNode: ---- - $ $HADOOP_HDFS_HOME/bin/hdfs start namenode --config $HADOOP_CONF_DIR + $ $HADOOP_PREFIX_HOME/bin/hdfs start namenode --config $HADOOP_CONF_DIR ---- Run a script to start DataNodes on all slaves: ---- - $ $HADOOP_HDFS_HOME/bin/hdfs start datanode --config $HADOOP_CONF_DIR + $ $HADOOP_PREFIX_HOME/bin/hdfs start datanode --config $HADOOP_CONF_DIR ---- Start the YARN with the following command, run on the designated @@ -435,13 +435,13 @@ Hadoop MapReduce Next Generation - Cluster Setup NameNode: ---- - $ $HADOOP_HDFS_HOME/bin/hdfs stop namenode --config $HADOOP_CONF_DIR + $ $HADOOP_PREFIX_HOME/bin/hdfs stop namenode --config $HADOOP_CONF_DIR ---- Run a script to stop DataNodes on all slaves: ---- - $ $HADOOP_HDFS_HOME/bin/hdfs stop datanode --config $HADOOP_CONF_DIR + $ $HADOOP_PREFIX_HOME/bin/hdfs stop datanode --config $HADOOP_CONF_DIR ---- Stop the ResourceManager with the following command, run on the designated @@ -910,21 +910,21 @@ KVNO Timestamp Principal Format a new distributed filesystem as : ---- -[hdfs]$ $HADOOP_HDFS_HOME/bin/hdfs namenode -format +[hdfs]$ $HADOOP_PREFIX_HOME/bin/hdfs namenode -format ---- Start the HDFS with the following command, run on the designated NameNode as : ---- -[hdfs]$ $HADOOP_HDFS_HOME/bin/hdfs start namenode --config $HADOOP_CONF_DIR +[hdfs]$ $HADOOP_PREFIX_HOME/bin/hdfs start namenode --config $HADOOP_CONF_DIR ---- Run a script to start DataNodes on all slaves as with a special environment variable <<>> set to : ---- -[root]$ HADOOP_SECURE_DN_USER=hdfs $HADOOP_HDFS_HOME/bin/hdfs start datanode --config $HADOOP_CONF_DIR +[root]$ HADOOP_SECURE_DN_USER=hdfs $HADOOP_PREFIX_HOME/bin/hdfs start datanode --config $HADOOP_CONF_DIR ---- Start the YARN with the following command, run on the designated @@ -953,13 +953,13 @@ KVNO Timestamp Principal as : ---- -[hdfs]$ $HADOOP_HDFS_HOME/bin/hdfs stop namenode --config $HADOOP_CONF_DIR +[hdfs]$ $HADOOP_PREFIX_HOME/bin/hdfs stop namenode --config $HADOOP_CONF_DIR ---- Run a script to stop DataNodes on all slaves as : ---- -[root]$ $HADOOP_HDFS_HOME/bin/hdfs stop datanode --config $HADOOP_CONF_DIR +[root]$ $HADOOP_PREFIX_HOME/bin/hdfs stop datanode --config $HADOOP_CONF_DIR ---- Stop the ResourceManager with the following command, run on the designated @@ -998,4 +998,4 @@ KVNO Timestamp Principal | | | Default HTTP port is 19888. | *-------------------------+-------------------------+------------------------+ - \ No newline at end of file + diff --git a/hadoop-mapreduce-project/hadoop-yarn/hadoop-yarn-site/src/site/apt/Federation.apt.vm b/hadoop-mapreduce-project/hadoop-yarn/hadoop-yarn-site/src/site/apt/Federation.apt.vm new file mode 100644 index 00000000000..7208fc7ed8a --- /dev/null +++ b/hadoop-mapreduce-project/hadoop-yarn/hadoop-yarn-site/src/site/apt/Federation.apt.vm @@ -0,0 +1,343 @@ + +~~ Licensed under the Apache License, Version 2.0 (the "License"); +~~ you may not use this file except in compliance with the License. +~~ You may obtain a copy of the License at +~~ +~~ http://www.apache.org/licenses/LICENSE-2.0 +~~ +~~ Unless required by applicable law or agreed to in writing, software +~~ distributed under the License is distributed on an "AS IS" BASIS, +~~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +~~ See the License for the specific language governing permissions and +~~ limitations under the License. See accompanying LICENSE file. + + --- + Hadoop Map Reduce Next Generation-${project.version} - Cluster Setup + --- + --- + ${maven.build.timestamp} + +HDFS Federation + + \[ {{{./index.html}Go Back}} \] + +%{toc|section=1|fromDepth=0} + + This guide provides an overview of the HDFS Federation feature and + how to configure and manage the federated cluster. + +* {Background} + +[./federation-background.gif] HDFS Layers + + HDFS has two main layers: + + * <> + + * Consists of directories, files and blocks + + * It supports all the namespace related file system operations such as + create, delete, modify and list files and directories. + + * <> has two parts + + * Block Management (which is done in Namenode) + + * Provides datanode cluster membership by handling registrations, and + periodic heart beats. + + * Processes block reports and maintains location of blocks. + + * Supports block related operations such as create, delete, modify and + get block location. + + * Manages replica placement and replication of a block for under + replicated blocks and deletes blocks that are over replicated. + + * Storage - is provided by datanodes by storing blocks on the local file + system and allows read/write access. + + The current HDFS architecture allows only a single namespace for the + entire cluster. A single Namenode manages this namespace. HDFS + Federation addresses limitation of current architecture by adding + support multiple Namenodes/namespaces to HDFS file system. + +* {HDFS Federation} + + In order to scale the name service horizontally, federation uses multiple + independent Namenodes/namespaces. The Namenodes are federated, that is, the + Namenodes are independent and don’t require coordination with each other. + The datanodes are used as common storage for blocks by all the Namenodes. + Each datanode registers with all the Namenodes in the cluster. Datanodes + send periodic heartbeats and block reports and handles commands from the + Namenodes. + +[./federation.gif] HDFS Federation Architecture + + + <> + + A Block Pool is a set of blocks that belong to a single namespace. + Datanodes store blocks for all the block pools in the cluster. + It is managed independently of other block pools. This allows a namespace + to generate Block IDs for new blocks without the need for coordination + with the other namespaces. The failure of a Namenode does not prevent + the datanode from serving other Namenodes in the cluster. + + A Namespace and its block pool together are called Namespace Volume. + It is a self-contained unit of management. When a Namenode/namespace + is deleted, the corresponding block pool at the datanodes is deleted. + Each namespace volume is upgraded as a unit, during cluster upgrade. + + <> + + A new identifier <> is added to identify all the nodes in + the cluster. When a Namenode is formatted, this identifier is provided + or auto generated. This ID should be used for formatting the other + Namenodes into the cluster. + +** Key Benefits + + * Namespace Scalability - HDFS cluster storage scales horizontally but + the namespace does not. Large deployments or deployments using lot + of small files benefit from scaling the namespace by adding more + Namenodes to the cluster + + * Performance - File system operation throughput is currently limited + by a single Namenode. Adding more Namenodes to the cluster scales the + file system read/write operations throughput. + + * Isolation - A single Namenode offers no isolation in multi user + environment. An experimental application can overload the Namenode + and slow down production critical applications. With multiple Namenodes, + different categories of applications and users can be isolated to + different namespaces. + +* {Federation Configuration} + + Federation configuration is <> and allows existing + single Namenode configuration to work without any change. The new + configuration is designed such that all the nodes in the cluster have + same configuration without the need for deploying different configuration + based on the type of the node in the cluster. + + A new abstraction called <<>> is added with + federation. The Namenode and its corresponding secondary/backup/checkpointer + nodes belong to this. To support single configuration file, the Namenode and + secondary/backup/checkpointer configuration parameters are suffixed with + <<>> and are added to the same configuration file. + + +** Configuration: + + <>: Add the following parameters to your configuration: + <<>>: Configure with list of comma separated + NameServiceIDs. This will be used by Datanodes to determine all the + Namenodes in the cluster. + + <>: For each Namenode and Secondary Namenode/BackupNode/Checkpointer + add the following configuration suffixed with the corresponding + <<>> into the common configuration file. + +*---------------------+--------------------------------------------+ +|| Daemon || Configuration Parameter | +*---------------------+--------------------------------------------+ +| Namenode | <<>> | +| | <<>> | +| | <<>> | +| | <<>> | +| | <<>> | +| | <<>> | +| | <<>> | +| | <<>> | +| | <<>> | +*---------------------+--------------------------------------------+ +| Secondary Namenode | <<>> | +| | <<>> | +*---------------------+--------------------------------------------+ +| BackupNode | <<>> | +| | <<>> | +*---------------------+--------------------------------------------+ + + Here is an example configuration with two namenodes: + +---- + + + dfs.federation.nameservices + ns1,ns2 + + + dfs.namenode.rpc-address.ns1 + hdfs://nn-host1:rpc-port + + + dfs.namenode.http-address.ns1 + nn-host1:http-port + + + dfs.namenode.secondaryhttp-address.ns1 + snn-host1:http-port + + + dfs.namenode.rpc-address.ns2 + hdfs://nn-host2:rpc-port + + + dfs.namenode.http-address.ns2 + nn-host2:http-port + + + dfs.namenode.secondaryhttp-address.ns2 + snn-host2:http-port + + + .... Other common configuration ... + +---- + +** Formatting Namenodes + + <>: Format a namenode using the following command: + +---- +> $HADOOP_PREFIX_HOME/bin/hdfs namenode -format [-clusterId ] +---- + Choose a unique cluster_id, which will not conflict other clusters in + your environment. If it is not provided, then a unique ClusterID is + auto generated. + + <>: Format additional namenode using the following command: + +---- +> $HADOOP_PREFIX_HOME/bin/hdfs namenode -format -clusterId +---- + Note that the cluster_id in step 2 must be same as that of the + cluster_id in step 1. If they are different, the additional Namenodes + will not be part of the federated cluster. + +** Upgrading from older release to 0.23 and configuring federation + + Older releases supported a single Namenode. Here are the steps enable + federation: + + Step 1: Upgrade the cluster to newer release. During upgrade you can + provide a ClusterID as follows: + +---- +> $HADOOP_PREFIX_HOME/bin/hdfs start namenode --config $HADOOP_CONF_DIR -upgrade -clusterId +---- + If ClusterID is not provided, it is auto generated. + +** Adding a new Namenode to an existing HDFS cluster + + Follow the following steps: + + * Add configuration parameter <<>> to + the configuration. + + * Update the configuration with NameServiceID suffix. Configuration + key names have changed post release 0.20. You must use new configuration + parameter names, for federation. + + * Add new Namenode related config to the configuration files. + + * Propagate the configuration file to the all the nodes in the cluster. + + * Start the new Namenode, Secondary/Backup. + + * Refresh the datanodes to pickup the newly added Namenode by running + the following command: + +---- +> $HADOOP_PREFIX_HOME/bin/hdfs dfadmin -refreshNameNode : +---- + + * The above command must be run against all the datanodes in the cluster. + +* {Managing the cluster} + +** Starting and stopping cluster + + To start the cluster run the following command: + +---- +> $HADOOP_PREFIX_HOME/bin/start-dfs.sh +---- + + To start the cluster run the following command: + +---- +> $HADOOP_PREFIX_HOME/bin/stop-dfs.sh +---- + + These commands can be run from any node where the HDFS configuration is + available. The command uses configuration to determine the Namenodes + in the cluster and starts the Namenode process on those nodes. The + datanodes are started on nodes specified in the <<>> file. The + script can be used as reference for building your own scripts for + starting and stopping the cluster. + +** Balancer + + Balancer has been changed to work with multiple Namenodes in the cluster to + balance the cluster. Balancer can be run using the command: + +---- +"$HADOOP_PREFIX"/bin/hadoop-daemon.sh --config $HADOOP_CONF_DIR --script "$bin"/hdfs start balancer [-policy ] +---- + + Policy could be: + + * <<>> - this is the policy. This balances the storage at + the datanode level. This is similar to balancing policy from prior releases. + + * <<>> - this balances the storage at the block pool level. + Balancing at block pool level balances storage at the datanode level also. + + Note that Balander only balances the data and does not balance the namespace. + +** Decommissioning + + Decommissioning is similar to prior releases. The nodes that need to be + decommissioning are added to the exclude file at all the Namenode. Each + Namenode decommissions its Block Pool. When all the Namenodes finish + decommissioning a datanode, the datanode is considered to be decommissioned. + + <>: To distributed an exclude file to all the Namenodes, use the + following command: + +---- +"$HADOOP_PREFIX"/bin/distributed-exclude.sh +---- + + <>: Refresh all the Namenodes to pick up the new exclude file. + +---- +"$HADOOP_PREFIX"/bin/refresh-namenodes.sh +---- + + The above command uses HDFS configuration to determine the Namenodes + configured in the cluster and refreshes all the Namenodes to pick up + the new exclude file. + +** Cluster Web Console + + Similar to Namenode status web page, a Cluster Web Console is added in + federation to monitor the federated cluster at + <</dfsclusterhealth.jsp>>>. + Any Namenode in the cluster can be used to access this web page. + + The web page provides the following information: + + * Cluster summary that shows number of files, number of blocks and + total configured storage capacity, available and used storage information + for the entire cluster. + + * Provides list of Namenodes and summary that includes number of files, + blocks, missing blocks, number of live and dead data nodes for each + Namenode. It also provides a link to conveniently access Namenode web UI. + + * It also provides decommissioning status of datanodes. + + diff --git a/hadoop-mapreduce-project/hadoop-yarn/hadoop-yarn-site/src/site/apt/index.apt.vm b/hadoop-mapreduce-project/hadoop-yarn/hadoop-yarn-site/src/site/apt/index.apt.vm index 7e8bcd6c3f7..9b6de129da6 100644 --- a/hadoop-mapreduce-project/hadoop-yarn/hadoop-yarn-site/src/site/apt/index.apt.vm +++ b/hadoop-mapreduce-project/hadoop-yarn/hadoop-yarn-site/src/site/apt/index.apt.vm @@ -49,3 +49,5 @@ Hadoop MapReduce Next Generation * {{{./CapacityScheduler.html}Capacity Scheduler}} + * {{{./Federation.html}HDFS Federation feature description, configuration and management}} + diff --git a/hadoop-mapreduce-project/hadoop-yarn/hadoop-yarn-site/src/site/resources/federation-background.gif b/hadoop-mapreduce-project/hadoop-yarn/hadoop-yarn-site/src/site/resources/federation-background.gif new file mode 100644 index 0000000000000000000000000000000000000000..19ec9635b307cd77b2cf099521b209d026840cfe GIT binary patch literal 13420 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

sITM^46uJ6P$yj~r5;P!FjON!84uY~Ey> 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 literal 0 HcmV?d00001