实现Hadoop分布式环境部署

13年前

目标
配置一个分布式计算集群,让hadoop 框架能够正常的运行起来,主要有master 的namenode,jobtracker 和slave 的datanode,tasktracker. 便于之后进行分布式运算。由于作者水平有限,疏漏指出希望批评指正。

环境
两台(或多台)服务器,都是用linux 系统,都安装了jdk1.5 以上版本,都安装了ssh ,各个机器名不一致。

实施
1 建立同名用户

原因

hadoop 运行时需要使用相同的目录进行存储,而且master 要方便的管理每台服务器需要一个同名用户的ssh 公钥。

步骤

(1) su root

(2) 输入root 密码

(3) adduser username (用户名)

除了输入新用户的密码,一路回车即可

创建用户的时候会在/home/ 下自动给用户创建一个默认目录,之后存放数据和hadoop 程序就使用该目录即可

如果发现自己建用户错了,使用sudo userdel username 即可删除刚才建立的用户

2 配置ssh
原因

因为整个hadoop 在数据交换的时候都使用了ssh 服务,所以首先要配置ssh ,让各个节点服务器都能互通,为此,需要给每台服务器生成一个公钥用于登录认证。

步骤

在每台服务器:

(1) 进入用户默认目录,如zoomsun 用户的默认目录是/home/zoomsun :cd /home/zoomsun

(2) 建立.ssh 文件夹:mkdir .ssh

(3) 进入.ssh 目录:cd .ssh

(4) 创建当前用户的ssh 登录公钥:ssh-keygen -t rsa ,建议别使用sudo 创建,一路回车即可,这时候会在当前目录( 如/home/zoomsun/.ssh/) 生出id_rsa.pub ,即rsa 公钥

(5) 使用scp 命令把生成的公钥传给别的服务器,并保存成不同的名字,如我在192.168.1.118 的主机传给192.168.1.109 ,并且保存为118_id_rsa.pub 的时候命令如下:scp id_rsa.pub zoomsun@192.168.1.109:/home/zoomsun/.ssh/118_id_rsa.pub

(6) 登录192.168.1.109 ,可以远程登录:ssh zoomsun@192.168.1.109 -p22( 是22 端口的时候可以不写)

(7) 进入当前用户默认目录下的.ssh 目录:cd ~/.ssh

(8) 把公钥内容添加到登录认证文件中:cat 118_id_rsa.pub >> authorized_keys

(9) 登录到192.168.1.118 主机,使用ssh zoomsun@192.168.1.109 进行连接109 主机,这时候会出现输入yes/no? 的提示,输入yes 。(配置完成后第一次登录时许需要给know_hosts 添加东西,所以会有这个确认,以后再登录就不用输入yes 了)

(10) 好了,在不同的机器上重复上面的步骤,让所有的服务器互通吧!

3 准备hadoop
在master 上下载并解压hadoop ,解压到当前用户默认目录下(/home/zoomsun/)

4 配置hadoop
进入解压后hadoop 的conf 目录,对其中几个文件进行修改(hadoop-env.sh,hadoop-site.xml,masters,slaves )

原因

让hadoop 能正常的运行起来

步骤

(1) 修改hadoop-env.sh ,打开它,只对JAVA_HOME 进行重新指定就好了

# The java implementation to use. Required.

export JAVA_HOME=/usr/ali/jdk1.5.0_10

类似这句,把JAVA_HOME 按照自己的情况修改,如我的/usr/lib/jvm/jdk1.6.0_10

(2) 修改hadoop-site.xml ,在<configuration></configuration> 之间进行修改:

  1. <configuration>    
  2.   
  3. <property>    
  4.   
  5. <name>fs.default.name</name> <!-- 配置namenode-->    
  6.   
  7. <value>hdfs://192.168.1.118:54310/</value> <!-- 改为自己的master-->    
  8.   
  9. </property>    
  10.   
  11. <property>    
  12.   
  13. <name>mapred.job.tracker</name> <!-- 配置jobtracker-->    
  14.   
  15. <value>hdfs://192.168.1.118:54311/</value> <!-- 改为自己的master-->    
  16.   
  17. </property>    
  18.   
  19. <property>    
  20.   
  21. <name>dfs.replication</name> <!-- 配置备份数量-->    
  22.   
  23. <value>1</value>    
  24.   
  25. </property>    
  26.   
  27. <property>    
  28.   
  29. <name>hadoop.tmp.dir</name> <!-- 配置备临时目录-->    
  30.   
  31. <value>/home/zoomsun/hadoop/tmp/</value>    
  32.   
  33. </property>    
  34.   
  35. <property>    
  36.   
  37. <name>mapred.child.java.opts</name>    
  38.   
  39. <value>-Xmx512m</value>    
  40.   
  41. </property>    
  42.   
  43. <property>    
  44.   
  45. <name>dfs.block.size</name>    
  46.   
  47. <value>5120000</value>    
  48.   
  49. </property>    
  50.   
  51. </configuration>    
  52.   

(3) 配置masters,slaves ,打开并写入各自对应的ip 信息,如我的:

给Masters 写:192.168.1.118

给Slaves 写:192.168.1.109

5 给每台服务器指定机器名
原因

不知道,反正一定要指定

步骤

(1) 打开hosts :sudo vi /etc/hosts

(2) 添加所有集群中的主机ip 列表,如

192.168.1.118 node0

192.168.1.109 node1

6 为slave 拷贝hadoop
master 的hadoop 拷贝到slave 相同的目录下,可以使用scp -r 来拷贝文件夹,如:

scp -r /home/zoomsun/hadoop-0.19.0 zoomsun@192.168.1.109 :/home/zoomsun

7 修改环境变量
在master 上修改/etc/profile ,把hadoop 加入环境变量

原因

方便使用

步骤

(1) sudo vi /etc/profile

(2) export HADOOP_HOME=/home/zoomsun/hadoop-0.19.0

export PATH=$PATH:$HADOOP_HOME/bin

(3) 修改完毕后,执行source /etc/profile 使其生效

8 修改slave hadoop 执行的JAVA_HOME
进入各个slave ,修改hadoop-env.sh 中的JAVA_HOME 为本机的JAVA_HOME

9 初始化namenode
在master 上执行hadoop namenode -format ,只执行一次,类似格式化,除非master 的tmp.dir 删除了再进行格式化

10 启动hadoop
在master 上执行start-all.sh ,启动所有集群中的node 和tracker

11 查看日志
可以进入hadoop 的logs 目录查看日志

12 关闭hadoop
如果需要关闭hadoop :stop-all.sh

13 结束语
如果正常的话,现在hadoop 已经配置成功了,祝贺下!

如果还不成功,分析日志,找原因吧!