首先我们统一一下定义,在这里所提到的 Hadoop 是指
Hadoop Common,主 要提供 DFS(分布式文件存储)与 Map/Reduce 的核心功能。Hadoop 在 windows
下还未经过很好的测试,所以笔者推荐大家在 linux(cent os 5.X)下安装使用。
准备安装 Hadoop
集群之前我们得先检验系统是否安装了如下的必备软件: ssh、rsync 和 Jdk1.6(因为 Hadoop 需要使用到 Jdk
中的编译工具,所以一般不 直接使用 Jre)。可以使用 yum install rsync 来安装 rsync。一般来说 ssh 是
默认安装到系统中的。Jdk1.6 的安装方法这里就不多介绍了。
确保以上准备工作完了之后我们就开始安装 Hadoop
软件,假设我们用三台 机器做 Hadoop 集群,分别是:192.168.1.111、192.168.1.112 和
192.168.1.113(下文简称 111,112 和 113),且都使用 root 用户。
下面是在 linux 平台下安装 Hadoop 的过程:
[root@192.168.1.111] #这里将 Hadoop 安装到/opt/hadoop
[root@192.168.1.111] mkdir /opt/hadoop
[root@192.168.1.111] cd /opt/hadoop
[root@192.168.1.111] #更改所属关系和权限(对于其它用户而言)
[root@192.168.1.111] chown root ./; chmod 755 ./
[root@192.168.1.111] # 下载项目包(去官网(http://hadoop.apache.org/)下载
Hadoop 项目)
[root@192.168.1.111] wget
http://www.apache.org/dist/hadoop/core/hadoop-0.20.2/hadoop-0.20.2.tar.gz
[root@192.168.1.111] # 解压
[root@192.168.1.111] tar xzvf hadoop-0.20.2.tar.gz
[root@192.168.1.111] # 进入目录
[root@192.168.1.111] cd hadoop-0.20.2
[root@192.168.1.111] # 因为 Hadoop 子项目的需要,一般需要设置环境变量如下:
[root@192.168.1.111] export HADOOP_HOME=`pwd`
[root@192.168.1.111] # 也可以将环境变量设置到/etc/profile 中
在所有服务器的同一路径下都进行这几步,就完成了集群
Hadoop 软件的安装,是不是很简单?没错安装是很简单的,下面就是比较困难的工作了。
集群配置
根据 Hadoop 文档的描述“The Hadoop
daemons are NameNode/DataNode and JobTracker/TaskTracker.”可以看出
Hadoop 核心守护程序就是由 NameNode/DataNode 和 JobTracker/TaskTracker
这几个角色构成。
Hadoop 的 DFS 需要确立 NameNode 与 DataNode 角色,一般 NameNode
会部署到一台单独的服务器上而不与 DataNode 共同同一机器。另外 Map/Reduce 服务也 需要确立 JobTracker
和 TaskTracker 的角色,一般 JobTracker 与 NameNode 共 用一台机器作为 master,而
TaskTracker 与 DataNode 同属于 slave。至于 NameNode/DataNode 和
JobTracker/TaskTracker 的概念这里就不多讲了,需要 了解的可以参看相关文档。
在这里我们使用 111 作为 NameNode 与 JobTracker,其它两台机器作为DataNode 和
TaskTracker,具体的配置如下:
环境的配置
在$HADOOP_HOME/conf/hadoop-env.sh 中定义了 Hadoop 启动时需要的环境
变量设置,其中我们至少需要配置 JAVA_HOME(Jdk 的路径)变量;另外我们一 般还需要更改
HADOOP_LOG_DIR(Hadoop 的日志路径)这个变量,默认的设置是 “export
HADOOP_LOG_DIR=${HADOOP_HOME}/logs”,一般需要将其配置到一个 磁盘空间比较大的目录下。
Hadoop 核心程序配置
Hadoop
包括一组默认配置文件($HADOOP_HOME/src 目录下的core/core-default.xml,
hdfs/hdfs-default.xml
和mapred/mapred-default.xml),大家可以先好好看看并理解默认配置文件中的 那些属性。虽然默认配置文件能让
Hadoop 核心程序顺利启动,但对于开发人员 来说一般需要自己的来设置一些常规配置以满足开发和业务的需求,所以我们需
要对默认配置文件的值进行覆盖,具体方法如下。
$HADOOP_HOME/conf/core-site.xml 是 Hadoop 的核心配置文件,对应并覆盖
core-default.xml 中的配置项。我们一般在这个文件中增加如下配置:
Core-site.xml 代码
1.
2.
3.
<!-- 用于 dfs 命令模块中指定默认的文件系统协议
-->
4.
fs.default.name
5.
hdfs://.168..111:
6.
7.
$HADOOP_HOME/conf/hdfs-site.xml 是 HDFS 的配置文件,对应并覆盖hdfs-default.xml
中的配置项。我们一般在这个文件中增加如下配置:
Hdfs-site.xml 代码
1.
2.
3.
<!-- DFS 中存储文件命名空间信息的目录
-->
4.
dfs.name.dir
5.
/opt/hadoop/data/dfs.name.dir
6.
7.
8.
<!-- DFS 中存储文件数据的目录
-->
9.
dfs.data.dir
10.
/opt/hadoop/data/dfs.data.dir
11.
12.
13.
<!-- 是否对 DFS 中的文件进行权限控制(测试中一般用
false)-->
14.
dfs.permissions
15.
false
16.
17.
$HADOOP_HOME/conf/mapred-site.xml 是 Map/Reduce 的配置文件,对应并 覆盖
mapred-default.xml 中的配置项。我们一般在这个文件中增加如下配置:
Mapred-site.xml 代码
1.
2.
3.
<!-- 用来作 JobTracker 的节点的(一般与
NameNode保持一致) -->
4.
mapred.job.tracker
5.
.168..111:
6.
7.
8.
<!-- map/reduce 的系统目录(使用的 HDFS 的路
径) -->
9.
mapred.system.dir
10.
/system/mapred.system.dir
11.
12.
13.
<!-- map/reduce 的临时目录(可使用“,”隔开,设
置多重路径来分摊磁盘 IO) -->
14.
mapred.local.dir
15.
/opt/hadoop/data/mapred.local.dir
>
16.
17.
主从配置
在$HADOOP_HOME/conf 目录中存在 masters 和 slaves 这两个文件,用来做 Hadoop
的主从配置。上面已经提到了 Hadoop 主要由 NameNode/DataNode 和 JobTracker/TaskTracker
构成,在主从配置里我们一般将 NameNode 和 JobTracker
列为主机,其它的共为从机,于是对于此处的配置应该是:
Masters 代码
1. .168..111
Slaves 代码
1. .168..112
2. .168..113
如果你对以上介绍的配置项做了正确的配置,那么你的 Hadoop 集群只差启 动和初体念了,当然,在$HADOOP_HOME/conf
目录下还包括其它的一些配置文件, 但那些都不是必须设置的,如果有兴趣你可以自己去了解了解。值得注意的是 Hadoop
集群的所有机器的配置应该保持一致,一般我们在配置完 master 后,使用 scp 将配置文件同步到集群的其它服务器上。
启动
经过以上两个步骤,Hadoop 的安装和配置已经 OK 了,那么下面我们就来启动Hadoop
集群。启动前我们需要做一些准备,因为集群的启动是从 NameNode 开始的,于是 DataNode 的运行需要 NameNode
的远程调用,Hadoop 使用 ssh 命 令远程运行 DataNode 节点,这就是为什么 Hadoop 需要ssh
的支持。我们可以想象一下,如果集群里有 100 台机器,那么我们就需要输入 100 遍主机的访问密码, 但如果配置 SSH
使用无密码公钥认证的方式,就解决了此问题。
简单的说,在 111
上需要生成一个密钥对,即一个私钥和一个公钥。将公钥 拷贝到 112 和 113 上,如此一来,当 111 向 112 发起 ssh
连接的时候,112 上就会生成一个随机数并用 111 的公钥对这个随机数进行加密,并且发送给 111,111
收到这个加密的数以后用私钥进行解密,并将解密后的数返回 112,112 确认解 密的数无误后就允许 111
进行连接了。这就完成了一次公钥认证过程。
公钥生成的步骤如下:
[root@192.168.1.111] ssh-keygen -t rsa
[root@192.168.1.111] #以下是生成一个为 id_rsa/id_rsa.pub 的无密码的公/私钥对
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
[root@192.168.1.111] ls -l ~/.ssh
[root@192.168.1.111] #这样我们会看到如下所示的结果集:
-rw------- 1 root
root
1675 Jul
5 14:01
id_rsa
-rw-r--r-- 1 root
root
394 Jul
5 14:01
id_rsa.pub
然后将 id_rsa.pub 的内容复制到每个机器(也包括本机)的~/.ssh/authorized_keys 文件中。如果
authorized_keys 不存在,则使用 touch~/.ssh/authorized_keys
生成一个;如果该文件已经存在,则追加内容进去就OK 了,这里我们推荐使用如下命令:
[root@192.168.1.111] cat ~/.ssh/id_rsa.pub
>> ~/.ssh/authorized_keys
[root@192.168.1.111] #因为 ssh 服务对文件的权限有着非常严格的限制(authorized_keys
只能拥有指定用户的写权限)于是需要进行如下处理
[root@192.168.1.111] chmod 644 ~/.ssh/authorized_keys
经过以上步骤,我们的无密码访问就配置好了,可以通过如下命令进行验证:
[root@192.168.1.111] ssh 192.168.1.112
[root@192.168.1.112] exit
[root@192.168.1.111] ssh 192.168.1.113
[root@192.168.1.113] exit
如此一来,就可以正常启动 Hadoop 集群了。启动方式如下:
[root@192.168.1.111] cd $HADOOP_HOME/bin
[root@192.168.1.111] #查看一下目录下的文件
[root@192.168.1.111] ls -l
-rwxr-xr-x 1 root root 9998 Feb 19 15:55 hadoop
-rwxr-xr-x 1 root root 1966 Feb 19 15:55 hadoop-config.sh
-rwxr-xr-x 1 root root 3690 Feb 19 15:55 hadoop-daemon.sh
-rwxr-xr-x 1 root root 1227 Feb 19 15:55 hadoop-daemons.sh
-rwxr-xr-x 1 root root 2710 Feb 19 15:55 rcc
-rwxr-xr-x 1 root root 2043 Feb 19 15:55 slaves.sh
-rwxr-xr-x 1 root root 1066 Feb 19 15:55 start-all.sh
-rwxr-xr-x 1 root root
965 Feb 19 15:55 start-balancer.sh
-rwxr-xr-x 1 root root 1645 Feb 19 15:55 start-dfs.sh
-rwxr-xr-x 1 root root 1159 Feb 19 15:55 start-mapred.sh
-rwxr-xr-x 1 root root 1019 Feb 19 15:55 stop-all.sh
-rwxr-xr-x 1 root root 1016 Feb 19 15:55 stop-balancer.sh
-rwxr-xr-x 1 root root 1146 Feb 19 15:55 stop-dfs.sh
-rwxr-xr-x 1 root root 1068 Feb 19 15:55 stop-mapred.sh
[root@192.168.1.111] #启动服务之前,我们需要做一件事情,非常重要,那就是格式化命名空间
[root@192.168.1.111] ./hadoop namenode -format
[root@192.168.1.111] #启动 dfs 和 map/reduce 服务
[root@192.168.1.111] ./start-all.sh
我们用如下命令验证一下是否启动成功:
[root@192.168.1.111] $HADOOP_HOME/bin/hadoop dfs -ls
如果没有错误提示或者出现文件列表,那么恭喜你,Hadoop 成功启动了,另外,我们可以通过访问
http://192.168.1.111:50070 来查看 hdfs 的状态,访问
http://192.168.1.111:50030 来查看 map/reduce 的状态。如果出现错误,或 Hadoop
集群未启动,可以查看$HADOOP_HOME/logs/下的日志文件。
<!-- 正文结束 -->
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/16465890/viewspace-1120113/
,如需转载,请注明出处,否则将追究法律责任。