构建 Hadoop 集群

构建 Hadoop 集群

-----------------------------------------------------------------------------------------------------------------------------------------

安装选项:

1. Apache tarballs :The Apache Hadoop project and related projects provide binary (and source) tarballs for each release.

2. Packages :RPM and Debian packages are available from the Apache Bigtop project http://bigtop.apache.org/

3. Hadoop cluster management tools :Cloudera Manager and Apache Ambari are examples of dedicated tools for installing and

managing a Hadoop cluster over its whole lifecycle. They provide a simple web UI,

and are the recommended way to set up a Hadoop cluster for most users and operators.

1 集群规范 (Cluster Specification)

-----------------------------------------------------------------------------------------------------------------------------------------

硬件:

-------------------------------------------------------------------------------------------------------------------------------------

a typical choice of machine for running an HDFS datanode and a YARN node manager in 2014 would have had the following specifications:

处理器: Two hex/octo-core 3 GHz CPUs

内存: 64−512 GB ECC RAM[68]

存储器: 12−24 × 1−4 TB SATA disks

网络: Gigabit Ethernet with link aggregation

Hadoop 一般使用多核 CPU 和多磁盘,以充分利用硬件的强大功能。

Master node scenarios

------------------------------------------------------------------------------------------------------------------------------------

根据集群的大小,运行 master daemon 由很多不同的配置:the namenode, secondary namenode, resource manager, and history server

For a small cluster (on the order of 10 nodes), it is usually acceptable to run the namenode and the resource manager on

a single master machine (as long as at least one copy of the namenode’s metadata is stored on a remote filesystem).

namenode 对内存要求较高,因为它要在内存中保持整个名称空间文件和块的元数据信息。

网络拓扑 (Network Topology)

------------------------------------------------------------------------------------------------------------------------------------

A common Hadoop cluster architecture consists of a two-level network topology 。

每个机架有 30-40 台服务器,内部用一台 10GB 交换机,向上连接一台核心交换机或路由器(至少10GB,或更大带宽),使机架间互联。该架构的突出

特点是同一机架内部的节点之间的总带宽要远高于不同机架上节点间的带宽。

机架注意事项 (Rack awareness)

--------------------------------------------------------------------------------------------------------------------------------------

为了获得 Hadoop 最佳性能,配置 Hadoop 以让其了解网络拓扑状况极为重要。如果集群只有一个机架,就无须做什么,因为这是默认配置。然而,对于

多机架集群,需要将节点映射到机架。这允许 Hadoop 在节点上部署 MapReduce 任务时更优先选择机架内(within-rack) 传输(拥有更多的可用带宽)而非

跨机架(off-rack)传输。 HDFS 也能够更智能地部署块复本以达到性能和弹性的平衡。

网络位置例如节点和机架表现在一棵树中,从而反映出位置间的网络距离(network distance)。namenode 使用网络位置确定复本的放置位置,MapReduce

调度器使用网络位置确定其 map 任务输入的最近复本。

示例:对于网络,机架拓扑描述为两个网络位置 ———— /switch1/rack1 和 /switch1/rack2. 因为集群中只有一个顶级的(top-level) 交换机,位置可以

简化为 /rack1 和 /rack2.

Hadoop 配置必须指定节点地址和网络位置的一个映射。这个映射由一个 Java 接口描述, DNSToSwitchMapping:

public interface DNSToSwitchMapping {

public List<String> resolve(List<String> names);

}

names 参数是一个 IP 地址列表,返回值是一个对应的网络位置字符串列表。

net.topology.node.switch.mapping.impl

配置属性定义了 一个 DNSToSwitchMapping 接口实现, namenode 和 resource manager 用于解析工作节点(worker node)的网络位置。

对于本例的网络,我们将 node1, node2, and node3 映射到 /rack1, 以及将 node4, node5, and node6 映射到 /rack2.

大多数安装不需要自己实现接口,然而,因为默认实现是 ScriptBasedMapping, 即运行一个用户定义的脚本来确定映射,脚本位置由属性:

net.topology.script.file.name

控制。脚本必须接受可变数量的参数,要映射的主机名或 IP 地址,并且必须将对应的网络位置发送到标准输出,空格分隔。

如果没有指定脚本位置,默认是将所有节点映射为一个网络位置,称为 /default-rack

2 集群的构建和安装 (Cluster Setup and Installation)

-----------------------------------------------------------------------------------------------------------------------------------------

1. Installing Java: Java 7 或更高版本

-------------------------------------------------------------------------------------------------------------------------------------

2. Creating Unix User Accounts :

-------------------------------------------------------------------------------------------------------------------------------------

It’s good practice to create dedicated Unix user accounts to separate the Hadoop processes from each other, and from other services

running on the same machine. The HDFS, MapReduce, and YARN services are usually run as separate users, named hdfs, mapred, and yarn,

respectively. They all belong to the same hadoop group.

最佳实践是在同一台机器上,为 Hadoop 进程分别创建专用的 Unix 用户帐户,并与其他服务分开。 HDFS, MapReduce, 以及 YARN 通常作为不同的用户

运行,用户名分别为 hdfs, mapred, and yarn. 他们同属于一个 hadoop 用户组。

3. 安装 Hadoop (Installing Hadoop)

-------------------------------------------------------------------------------------------------------------------------------------

% cd /usr/local

% sudo tar xzf hadoop-x.y.z.tar.gz

同样,需要改变 Hadoop 文件的用户名和组:

% sudo chown -R hadoop:hadoop hadoop-x.y.z

It’s convenient to put the Hadoop binaries on the shell path too:

% export HADOOP_HOME=/usr/local/hadoop-x.y.z

% export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

4. 配置 SSH (Configuring SSH)

-------------------------------------------------------------------------------------------------------------------------------------

Hadoop 的控制脚本(but not the daemons) 依靠 SSH 执行整体集群(cluster-wide)的操作。例如,停止和启动集群上所有 daemon 的脚本。注意,控制

脚本是可选的,整体集群的操作也可以通过其他机制执行,例如一个分布式脚本或专用的 Hadoop 管理应用程序。

为了无间断工作,SSH 要设置为允许 hdfs 和 yarn 用户从集群任何机器上无密码登录。实现这个任务最简单的方法是生成一个 public/private 密钥对

并把它们放到一个 NFS 位置以在整个集群上共享。

首先,通过如下指令生成一个 RSA key 对。需要做两次,一次作为 hdfs 用户,一次作为 yarn 用户。

% ssh-keygen -t rsa -f ~/.ssh/id_rsa

纵然想要无密码登录,没有密码的密钥不认为是个好的实践,因此当提示时,应输入一个密码。使用 ssh-agent 来避免为每一个连接输入密码。

下一步,需要确保 public key 存在于集群上所有要连接机器的 ~/.ssh/authorized_keys 文件中。如果用户的主目录存储在一个 NFS 系统上,

密钥可以通过输入如下指令跨集群共享 (first as hdfs and then as yarn):

% cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

如果用户主目录没有使用 NFS 共享,则 public key 需要通过其他方法共享,例如, ssh-copy-id 。

Test that you can SSH from the master to a worker machine by making sure ssh-agent is running, and then run ssh-add to store your

passphrase. You should be able to SSH to a worker without entering the passphrase again.

5. Configuring Hadoop

-------------------------------------------------------------------------------------------------------------------------------------

6. 格式化 HDFS 文件系统 ( Formatting the HDFS Filesystem )

-------------------------------------------------------------------------------------------------------------------------------------

在能够使用之前,一个崭新的 HDFS 安装需要被格式化。格式化过程通过创建存储目录(storage directories) 和名称节点(namenode) 的持久化数据

结构的初始化版本来创建一个空的文件系统。datanode 不包含在初始格式化过程中,因为 namenode 管理着所有文件系统元数据,而 datanode 可以

动态加入集群或从集群中移除。由于相同的原因,不需要说明创建多大的文件系统,因为这是由集群内 datanode 的数量决定的,可以在文件系统格式化

之后按需增加。

格式化操作非常快,运行下面命令:Run the following command as the hdfs user:

% hdfs namenode -format <cluster_name>

7. 启动和停止 Daemons

-------------------------------------------------------------------------------------------------------------------------------------

Hadoop 自带了一些脚本用于运行命令以及启动和停止整个集群的 daemon 。使用这些脚本(可以在安装目录的 sbin 内找到),需要告知 Hadoop 有哪些

机器在集群中。有一个文件用于此目的,称为 slaves, 包含一个机器的主机名或 IP 地址列表,每行一个。

slaves 文件列出 datanodes 和 node managers 运行在其上的机器。它存在于 Hadoop 的配置目录,但它可以放置到其他地方或给出另外的名称,通过

在 hadoop-env.sh 文件中改变 HADOOP_SLAVES 设置值。另外,这文件不需要分发给工作节点(to be distributed to worker nodes), 因为它们仅仅由

运行在 namenode 或 resource manager 的控制脚本使用。

The HDFS daemons are started by running the following command as the hdfs user:

% start-dfs.sh

namenode 和 secondary namenode 运行的机器通过查询 Hadoop 配置属性的主机名确定。例如,脚本通过执行如下指令,找到 namenode 的主机名:

% hdfs getconf -namenodes

默认情况下,指令从 fs.defaultFS 属性找到 namenode 的主机名称。

稍微相信一些, start-dfs.sh 脚本做如下这些事:

------------------------------------------------------------------------------------------------------------

① Starts a namenode on each machine returned by executing hdfs getconf -namenodes

② Starts a datanode on each machine listed in the slaves file

③ Starts a secondary namenode on each machine returned by executing hdfs getconf -secondarynamenodes

YARN daemons 以类似的方式启动,yarn 用户在 resource manager 机器上运行如下命令启动:

% start-yarn.sh

resource manager 总是运行在 startyarn.sh 脚本运行的机器上。更明确地,脚本执行下列过程:

------------------------------------------------------------------------------------------------------------

① Starts a resource manager on the local machine

② Starts a node manager on each machine listed in the slaves file

也提供了 stop-dfs.sh 和 stop-yarn.sh 脚本来停止由相应启动脚本启动的守护进程。

% stop-yarn.sh

% stop-dfs.sh

这些脚本启动和停止 Hadoop daemons 使用的是 hadoop-daemon.sh 脚本(或者是 yarn-daemon.sh,YARN 情形)。如果使用前述脚本,不应直接使用

hadoop-daemon.sh 脚本。但如果需要从另一个系统或从自己脚本控制 Hadoop daemon, hadoop-daemon.sh 脚本是一个好的结合点。同样,在一组机

器上启动相同的守护进程,hadoop-daemons.sh (with an “s”) 是一个方便的工具。

最后,只有一个 MapReduce 守护进程 ———— job history server, 以 mapred 用户通过如下命令启动:

% mr-jobhistory-daemon.sh start historyserver

8. 创建用户目录 (Creating User Directories)

-------------------------------------------------------------------------------------------------------------------------------------

一旦有了一个 Hadoop 集群并处于运行中,需要让用户访问它。这包括为每一个用户创建主目录并为之设置所有者许可权限:

% hadoop fs -mkdir /user/username

% hadoop fs -chown username:username /user/username

这是为目录设置空间限制的好时机。下面的指令为给定的用户目录设置 1 TB 限制:

% hdfs dfsadmin -setSpaceQuota 1t /user/username

3 Hadoop 配置 ( Hadoop Configuration )

-----------------------------------------------------------------------------------------------------------------------------------------

有很多控制 Hadoop 安装的文件,最重要文件如下表所示:

Hadoop configuration files

+===============================+===================+===================================================================================+

| 文件名 | 格式 | 描述 |

+-------------------------------+-------------------+-----------------------------------------------------------------------------------+

| hadoop-env.sh | Bash script | Environment variables that are used in the scripts to run Hadoop |

+-------------------------------+-------------------+-----------------------------------------------------------------------------------+

| mapred-env.sh | Bash script | Environment variables that are used in the scripts to run MapReduce |

| | |(overrides variables set in hadoop-env.sh) |

+-------------------------------+-------------------+-----------------------------------------------------------------------------------+

| yarn-env.sh | Bash script | Environment variables that are used in the scripts to run YARN (overrides |

| | | variables set in hadoop-env.sh) |

+-------------------------------+-------------------+-----------------------------------------------------------------------------------+

| core-site.xml | Hadoop | Configuration settings for Hadoop Core, such as I/O settings that are common |

| | configuration XML | to HDFS, MapReduce, and YARN |

+-------------------------------+-------------------+-----------------------------------------------------------------------------------+

| hdfs-site.xml | Hadoop | Configuration settings for HDFS daemons: the namenode, the secondary |

| | configuration XML | namenode, and t

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值