0 简介:
一共5个节点,hadoop0(namenode,jobtracker), hadoop1(secondnamenode),
剩下hadoop2,hadoop3,hadoop4为datanode
节点环境:
a) VMware8
b) CentOS-5.8-i386
c) win7-64位-旗舰 6G内存
d) hadoop-1.1.2.tar
e) jdk-6u24-linux-i586.bin
f)SSHSecureShellClient-3.2.9
g) 如下操作都是用root用户
h) 每台虚拟机网络连接均采用桥接方式,内存为512M
1 安装hadoop0节点虚拟机,后设置静态IP
设置静态IP操作如下:
1 进入目录/etc/sysconfig/network-scripts/
2 ls查看 找文件名为ifcfg-ethX的文件, X表示一个数字,通常是0或者2 eg: ifcfg-eth0
3 vi ifcfg-eth0 修改里面信息如下:
[root@localhost network-scripts]# more ifcfg-eth0
DEVICE=eth0
BOOTPROTO=static
HWADDR=00:0C:29:B6:55:64
NETMASK=255.255.255.0
IPADDR=192.168.1.110
GATEWAY=192.168.1.1
说明如下:
a)DEVICE=eth0 中名称一般和 ifcfg-eth0的-后面名称对应,可以通过# ifconfig -a查看第一个单词名称即为设备名称
BOOTPROTO=static 表示是静态地址
b) HWADDR=00:0C:29:B6:55:64 表示当前机器MAC地址,如通过克隆创建别的节点,需要修改为当前节点MAC地址,
否则修改IP后执行service network restart 重启网卡设置时,
报错为Bringing up interface eth0: Device static does not seem to be present, delaying initialization.
查询当前节点MAC地址操作如下:
# ifconfig -a
eth0 Link encap:Ethernet HWaddr 00:0C:29:B6:55:64
找到HWaddr对应的数据 然后粘贴到 ifcfg-eth0即可
c) 如下即是真正设置项
NETMASK=255.255.255.0
IPADDR=192.168.1.110
GATEWAY=192.168.1.1
4 修改好后,保存vim
5 执行命令service network restart重启网卡设置
6 执行命令ifconfig查看配置结果是否正确
2 hadoop0设置hostname,ip和机器名映射,关闭防火墙
2.1 设置hostname
(1)使用vi编辑/etc/sysconfig/network
把HOSTNAME的值改为hadoop0,保存退出。
HOSTNAME=hadoop0
(2)执行hostname hadoop0,在当前环境中立即生效
(3)执行命令hostname查看设置结果
[root@localhost ~]# hostname hadoop0
[root@localhost ~]# hostname
hadoop0
2.2 绑定ip与hostname
编辑文件/etc/hosts,增加ip与hostname的映射信息
192.168.1.110 hadoop0
2.3 关闭防火墙
(1) 执行命令service iptables stop关闭防火墙
(2)执行命令service iptables status查看防火墙是否正在运行
[root@localhost ~]# service iptables status
Firewall is stopped.
2.4 关闭防火墙的自动运行
(1) 执行命令chkconfig iptables off
验证如下:
[root@localhost ~]# chkconfig --list | grep iptables
iptables 0:off 1:off 2:off 3:off 4:off 5:off 6:off
后重启机器,reboot后在查看命令行,
[root@hadoop0 ~]# 发现机器名已经修改完毕
3 安装JDK:
通过ssh工具上传jdk-6u24-linux-i586.bin到 usr/local/下
执行命令
(1)cd /usr/local (将原来目录内文件删除)
(2)chmod u+x jdk-6u24-linux-i586.bin (给用户针对jdk-6u24-xxx文件增加执行权限)
(3)./jdk-6u24-linux-i586.bin (解压文件)
(4)mv jdk-1.6.0_24 jdk1.6 (文件重命名)
(5)vi /etc/profile 空白处增加内容如下:
export JAVA_HOME=/usr/local/jdk1.6
export PATH=.:$JAVA_HOME/bin:$PATH
(6)source /etc/profile (刷新环境变量 立即生效)
# java -version
java version "1.6.0_24"
Java(TM) SE Runtime Environment (build 1.6.0_24-b07)
Java HotSpot(TM) Client VM (build 19.1-b02, mixed mode, sharing)
4 通过vmware工具 完成克隆hadoop0机器,克隆出hadoop1,hadoop2,hadoop, hadoop4
在vmware工具上,在hadoop0节点上右键/manage/clone/下一步/出现下图,
选择好克隆后的节点名称和磁盘存放位置即可,依次克隆出节点hadoop1,hadoop2,hadoop, hadoop4后,按照上面1,2,3的步骤,配置好新节点的 IP,机器别名,IP和别名映射,防火墙
(因为克隆,所以JDK已经安装好)
5 配置hadoop0到其余4个节点ssh免密码登陆
a) hadoop集群在启动时,主节点需要通过ssh登陆到从节点启动进程从而启动从节点,因此仅仅需要
将主节点的 公钥文件拷贝到其余节点即可,因为是内网集群,设置免密码登陆,关闭防火墙更快速高效的实现集群通讯
b)
a) hadoop0中增加其余节点机器别名配置,增加后如下
[root@hadoop0 ~]# cat /etc/hosts
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1 localhost.localdomain localhost
::1 localhost6.localdomain6 localhost6
192.168.1.110 hadoop0
192.168.1.111 hadoop1
192.168.1.112 hadoop2
192.168.1.113 hadoop3
192.168.1.114 hadoop4
b) 在节点hadoop0,1,2,3,4中,通过命令ssh-keygen -t rsa 不断回车,生成rsa密钥对
后在hadoop0中,通过如下命令将hadoop0的公钥文件拷贝到其余4台节点中
[root@hadoop0 .ssh]# ssh-copy-id -i hadoop1,2,3,4
执行完后去hadoop1,2,3,4查看 /root/.ssh/ 会生成 authorized_keys ,
more authorized_keys 会发现 root@hadoop0进来了,代码如下:
[root@hadoop1 .ssh]# ls
authorized_keys id_rsa id_rsa.pub
[root@hadoop1 .ssh]# more authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA7IdyDdRLDtW//xhFJK7BrpGlyRKhrtLxw+4q6YZOk6yT
gR18sSSjiOfMFjV6KGJy0PHpVkOc3JJ7uYRVGaojZW6+sVD65rlOzwHKbxXOcGKggLU13SwGb3/jpbxf
ZccHr6KeRPMmV80B89A1YNed4eHhGJzJidC6lxaVC4U9Kt6FB9cqXXNbjqe4xbpMyJVi+Q/FqVnl9LLj
QmLg1vot2m4aIMDd2bA5qnu1LOHF7PnnmxwjSUbB/McWc5QVxbKR2mrqh2wMeW1KEPMUuRSPGXWzwMBm
ivjgF1D3qMxmsW3M5YtqQeXSV7/KkBS8uR72ka8+OtPFcIwDRQGJ49Tx/w== root@hadoop0
c) hadoop0中,尝试 ssh hadoop1,2,3,4 确认ssh无秘钥通过
c) 补充遗漏的两项:
1) 确保ssh hadoop0自身通过,操作方式如下:
cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
2) 将hadoop0的host拷贝到其余节点(内容如下)
[root@hadoop0 logs]# more /etc/hosts
::1 localhost6.localdomain6 localhost6
192.168.1.110 hadoop0
192.168.1.111 hadoop1
192.168.1.112 hadoop2
192.168.1.113 hadoop3
192.168.1.114 hadoop4
拷贝命令如下:
[root@hadoop0 logs]# scp /etc/hosts hadoop1:/etc/hosts
hosts 100% 307 0.3KB/s 00:00
[root@hadoop0 logs]# scp /etc/hosts hadoop2:/etc/hosts
hosts 100% 307 0.3KB/s 00:00
[root@hadoop0 logs]# scp /etc/hosts hadoop3:/etc/hosts
hosts 100% 307 0.3KB/s 00:00
[root@hadoop0 logs]# scp /etc/hosts hadoop4:/etc/hosts
hosts
6 在hadoop0中安装HADOOP 并修改配置文件
a) 拷贝 hadoop文件到 /usr/local下
b) 解压缩安装,
(1)tar -zxvf hadoop-1.1.2.tar.gz
(2)mv hadoop-1.1.2 hadoop
(3)vi /etc/profile 增加内容如下:
export JAVA_HOME=/usr/local/jdk
export HADOOP_HOME=/usr/local/hadoop
export PATH=.:$HADOOP_HOME/bin:$JAVA_HOME/bin:$PATH
(4)source /etc/profile
(5)修改conf目录下的配置文件hadoop-env.sh、core-site.xml、hdfs-site.xml、mapred-site.xml masters slaves 修改后如下:
hadoop-env.sh:
export JAVA_HOME=/usr/local/jdk1.6
core-site.xml:
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://hadoop0:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop/tmp</value>
</property>
</configuration>
hdfs-site.xml:
<configuration>
<property>
<name>dfs.http.address</name>
<value>0.0.0.0:50070</value>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
</configuration>
mapred-site.xml
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>hadoop0:9001</value>
</property>
<property>
<name>mapred.job.tracker.http.address</name>
<value>0.0.0.0:50030</value>
</property>
</configuration>
conf/masters:
hadoop1
conf/slaves:
hadoop2
hadoop3
hadoop4
7 将hadoop0中的hadoop SCP到1,2,3,4
[root@hadoop0 local]# scp -r hadoop hadoop1:/usr/local/
[root@hadoop0 local]# scp -r hadoop hadoop2:/usr/local/
[root@hadoop0 local]# scp -r hadoop hadoop3:/usr/local/
[root@hadoop0 local]# scp -r hadoop hadoop4:/usr/local/
8 hadoop0中启动HADOOP集群
启动命令如下:
# hadoop namenode -format
# start-all.sh
查看
[root@hadoop0 hadoop]# jps
15913 NameNode
16090 JobTracker
16196 Jps
[root@hadoop1 conf]# jps
12765 Jps
12677 SecondaryNameNode
去别的节点可以到datanode的jps
9 如果启动失败,查看日志说明如下:
a) 查看日志,
[root@hadoop0 logs]# ls
hadoop-root-jobtracker-hadoop0.log hadoop-root-namenode-hadoop0.log history
hadoop-root-jobtracker-hadoop0.out hadoop-root-namenode-hadoop0.out
日志格式如下:
hadooop-当前用户-当前进程-主机名.log
hadooop-当前用户-当前进程-主机名.out ---> 临时文件,不存放数据
b) more hadoop-root-namenode-hadoop0.log 和 more hadoop-root-jobtracker-hadoop0.log 可以看到报错原因,
eg: 如果hadoop0没有ssh通自己,报错如下:
java.net.ConnectException: Call to hadoop0/192.168.1.110:9000 failed on connection exception: java.net.ConnectException: Connection refused
如果端口已经被占用了,通过如下方式来处理
查看进程详细 包括开启的人: netstat -ant | grep 9000
杀死已经被使用的端口: kill -9 9000
10 如上集群如果NameNode和JobTracker不在一个节点上的做法:
1.搭建集群环境,NameNode和JobTracker不在一个节点上。
假设NameNode在hadoop0上,JobTracker在hadoop1上。
1.1 NameNode所在节点是通过配置文件core-site.xml的fs.default.name的值体现的。
值还是hdfs://hadoop0:9000
JobTracker所在节点是通过配置文件mapred-site.mlx的mapred.job.tracker的值体现的。
值修改为http://hadoop1:9001
1.2 在hadoop0上执行命令hadoop-daemon.sh start namenode
在hadoop1上执行命令hadoop-daemon.sh start jobtracker
在hadoop1上执行命令hadoop-daemon.sh start secondarynamenode
在hadoop2上执行命令hadoop-daemons.sh start datanode
在hadoop2上执行命令hadoop-daemons.sh start tasktracker // 这样就会启动多个datanode 去slaves文件中找
(前提是 hadoop2,3,4能ssh互通, 此时到是建议每个节点都生成各自authorized-keys后,通过ssh-copy-id -i确定所有节点都互通
具体操作 见 文章 hadoop1.1.2分布式安装(简单借鉴 建议看本系列之完备版) )
1.3 关闭集群时,按照上述顺序倒过来,并将start 修改成stop 即可
11 部署成功后,通过http 查看datanode节点确认是否安装成功:
a) 安装成功访问datanode节点界面如下:
b) 通过 hadoop shell 上传一文件后([root@hadoop0 hadoop]# hadoop fs -ls hdfs://hadoop0:9000/ )
看逻辑结构显示(显示只有一份)和物理存储显示(显示为三份)
通过访问地址http://hadoop0:50070/dfshealth.jsp 点击Browse the filesystem 后,可以看到上传文件存储物理位置:
OK, 安装成功 文档结束。