123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342 |
- ~~ 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 Distributed File System-${project.version} - Federation
- ---
- ---
- ${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:
- * <<Namespace>>
- * 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.
- * <<Block Storage Service>> 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 prior HDFS architecture allows only a single namespace for the
- entire cluster. A single Namenode manages this namespace. HDFS
- Federation addresses limitation of the prior architecture by adding
- support multiple Namenodes/namespaces to HDFS file system.
-
- * {Multiple Namenodes/Namespaces}
- 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
- <<Block Pool>>
- 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.
- <<ClusterID>>
- A new identifier <<ClusterID>> 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 limited by a single
- Namenode in the prior architecture. 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 <<backward compatible>> 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 <<<NameServiceID>>> 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
- <<<NameServiceID>>> and are added to the same configuration file.
- ** Configuration:
- <<Step 1>>: Add the following parameters to your configuration:
- <<<dfs.nameservices>>>: Configure with list of comma separated
- NameServiceIDs. This will be used by Datanodes to determine all the
- Namenodes in the cluster.
-
- <<Step 2>>: For each Namenode and Secondary Namenode/BackupNode/Checkpointer
- add the following configuration suffixed with the corresponding
- <<<NameServiceID>>> into the common configuration file.
- *---------------------+--------------------------------------------+
- || Daemon || Configuration Parameter |
- *---------------------+--------------------------------------------+
- | Namenode | <<<dfs.namenode.rpc-address>>> |
- | | <<<dfs.namenode.servicerpc-address>>> |
- | | <<<dfs.namenode.http-address>>> |
- | | <<<dfs.namenode.https-address>>> |
- | | <<<dfs.namenode.keytab.file>>> |
- | | <<<dfs.namenode.name.dir>>> |
- | | <<<dfs.namenode.edits.dir>>> |
- | | <<<dfs.namenode.checkpoint.dir>>> |
- | | <<<dfs.namenode.checkpoint.edits.dir>>> |
- *---------------------+--------------------------------------------+
- | Secondary Namenode | <<<dfs.namenode.secondary.http-address>>> |
- | | <<<dfs.secondary.namenode.keytab.file>>> |
- *---------------------+--------------------------------------------+
- | BackupNode | <<<dfs.namenode.backup.address>>> |
- | | <<<dfs.secondary.namenode.keytab.file>>> |
- *---------------------+--------------------------------------------+
-
- Here is an example configuration with two namenodes:
- ----
- <configuration>
- <property>
- <name>dfs.nameservices</name>
- <value>ns1,ns2</value>
- </property>
- <property>
- <name>dfs.namenode.rpc-address.ns1</name>
- <value>nn-host1:rpc-port</value>
- </property>
- <property>
- <name>dfs.namenode.http-address.ns1</name>
- <value>nn-host1:http-port</value>
- </property>
- <property>
- <name>dfs.namenode.secondaryhttp-address.ns1</name>
- <value>snn-host1:http-port</value>
- </property>
- <property>
- <name>dfs.namenode.rpc-address.ns2</name>
- <value>nn-host2:rpc-port</value>
- </property>
- <property>
- <name>dfs.namenode.http-address.ns2</name>
- <value>nn-host2:http-port</value>
- </property>
- <property>
- <name>dfs.namenode.secondaryhttp-address.ns2</name>
- <value>snn-host2:http-port</value>
- </property>
- .... Other common configuration ...
- </configuration>
- ----
- ** Formatting Namenodes
- <<Step 1>>: Format a namenode using the following command:
-
- ----
- > $HADOOP_PREFIX_HOME/bin/hdfs namenode -format [-clusterId <cluster_id>]
- ----
- 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.
- <<Step 2>>: Format additional namenode using the following command:
- ----
- > $HADOOP_PREFIX_HOME/bin/hdfs namenode -format -clusterId <cluster_id>
- ----
- 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 <cluster_ID>
- ----
- 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 <<<dfs.nameservices>>> 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 <datanode_host_name>:<datanode_rpc_port>
- ----
- * 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 stop 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 <<<slaves>>> 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>]
- ----
- Policy could be:
- * <<<node>>> - this is the <default> policy. This balances the storage at
- the datanode level. This is similar to balancing policy from prior releases.
- * <<<blockpool>>> - 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
- decomissioned 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.
- <<Step 1>>: To distributed an exclude file to all the Namenodes, use the
- following command:
- ----
- "$HADOOP_PREFIX"/bin/distributed-exclude.sh <exclude_file>
- ----
- <<Step 2>>: 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
- <<<http://<any_nn_host:port>/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.
|