实现Hadoop分布式环境部署
目标
配置一个分布式计算集群,让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> 之间进行修改:
- <configuration>
- <property>
- <name>fs.default.name</name> <!-- 配置namenode-->
- <value>hdfs://192.168.1.118:54310/</value> <!-- 改为自己的master-->
- </property>
- <property>
- <name>mapred.job.tracker</name> <!-- 配置jobtracker-->
- <value>hdfs://192.168.1.118:54311/</value> <!-- 改为自己的master-->
- </property>
- <property>
- <name>dfs.replication</name> <!-- 配置备份数量-->
- <value>1</value>
- </property>
- <property>
- <name>hadoop.tmp.dir</name> <!-- 配置备临时目录-->
- <value>/home/zoomsun/hadoop/tmp/</value>
- </property>
- <property>
- <name>mapred.child.java.opts</name>
- <value>-Xmx512m</value>
- </property>
- <property>
- <name>dfs.block.size</name>
- <value>5120000</value>
- </property>
- </configuration>
(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 已经配置成功了,祝贺下!
如果还不成功,分析日志,找原因吧!