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, 安装成功 文档结束。