ITPub博客

首页 > 大数据 > Hadoop > Hadoop集群安装 linux运维

Hadoop集群安装 linux运维

Hadoop 作者:鱼雪er 时间:2013-02-23 13:22:04 0 删除 编辑
   首先我们统一一下定义,在这里所提到的 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/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2008-10-19