1hadoop分布式安装
hadoop完全分布式安装:3个及以上的实体机或者虚拟机组件的机群。
目标:
分布结构 主节点(1个,是hadoop0):NameNode、JobTracker、SecondaryNameNode
从节点(2个,是hadoop1、hadoop2):DataNode、TaskTracker
1.1建立三台虚拟机
虚拟机在开启完,然后关机后再复制;
点击虚拟机,然后右击鼠标,点击管理-->克隆-->...>选择完整克隆(这台虚拟机是独立的);(内存不够,可以修改内存,这里修改为400MB)
CentOS、CentOS1、CentOS2
1.2先配置第一台CentOS(参考hadoop的伪分布式安装)
ip地址修改:CentOS1,192.168.80.101;CentOS2,192.168.80.102
执行命令:service network restart(如果出现错误,那么删除修改的网络,重新启动虚拟机,然后重新修改ip)
1.3修改CentOS1和CentOS2的主机名为hadoop1和hadoop2
执行命令:vi /etc/sysconfig/network
为了使主机名生效,重启虚拟机,执行命令:reboot -h now
1.4在hadoop1和hadoop2上删除.ssh文件、local下的文件、profile下的文件(删除克隆虚拟机hadoop0改过的文件,即将配置时增加的内容删除)
执行命令:
cd /root/.ssh
ls
rm -rf *
cd /usr/local/
ls
rm -rf *
vi /etc/profile
或者
rm -rf /root/.ssh/*
rm -rf /usr/local/*
vi /etc/profile
1.5在hadoop1和hadoop2上设置ssh免密码登录
先对hadoop1处理:
执行命令:ssh-keygen -t rsa
创建文件:
执行命令:cd /root/.ssh/
cat id_rsa.pub>>authorized_keys
ssh localhost
exit
ssh hadoop1(不能解析)
vi /etc/hosts(ip与主机名映射,192.168.80.101 hadoop1)
ssh hadoop1
hadoop2同上述命令。
1.6主机hadoop0,hadoop1,hadoop2之间可以互相ping,即互相访问。
(1)要求:ip与主机名映射。
执行命令:vi /etc/hosts(在hadoop0,hadoop1,hadoop2上都添加对应缺少的ip,192.168.80.100;192.168.80.101;192.168.80.102)
(2)或者:
改好一台虚拟机hadoop0,然后运用复制,将hadoop0上的地址信息复制到hadoop1和hadoop2上。
要求:主机hadoop0,hadoop1,hadoop2相互之间可以免密码登录。(将hadoop0的公钥复制到hadoop1和hadoop2,同样的道理,也就是说三台主机各自都需要3个公钥)
执行命令:(在cd /root/.ssh/文件下,输入ls,查看公钥)(将hadoop0的公钥复制到hadoop1)
ssh-copy-id -i hadoop1(在hadoop0上输入)
ls(查看.ssh文件下的公钥,在hadoop1上输入)
more authorized_keys(在hadoop1上查看是否复制过来)
同理其它的复制。
如果想要将hadoop1的公钥(已经配置好)全部复制到hadoop0的公钥上(缺hadoop1和hadoop2),那么:
执行命令:scp /root/.ssh/authorized_keys hadoop0:/root/.ssh/
执行命令:ssh hadoop1(在hadoop0上输入,两两之间都可以互相免密码登录)
1.7将配置好的hadoop0上的hadoop和jdk复制到hadoop1和haoop2上。
在复制之前先要删除hadoop0上的hadoop文件下的logs(存放的日志文件)和tmp(存放的数据文件和namenode文件)
执行命令:rm -rf logs/
rm -rf tmp/
开始复制
执行命令:scp -r jdk hadoop1:/usr/local/(在hadoop0的/usr/local)
scp -r jdk hadoop2:/usr/local/
scp -r hadoop hadoop1:/usr/local/
scp -r hadoop hadoop2:/usr/local/
1.8将配置好的hadoop0上的/etc/profile复制到hadoop1和hadoop2上
执行命令:scp /etc/profile hadoop1:/etc/
scp /etc/profile hadoop2:/etc/
然后执行命令:
source /etc/profile(在hadoop1上输入)
source /etc/profile(在hadoop2上输入)
1.9确定主节点和从节点,编辑hadoop0的配置文件
执行命令:cd hadoop/conf/(在hadoop0上)
vi slaves(去掉localhost,添加hadoop1,hadoop2)
1.10启动
执行命令:hadoop namenode -format(在hadoop0上输入,但是经常出现未找到命令,在hadoop文件下的bin下可以运行)
start-all.sh
1.11在Windows的浏览器中查看
首先在C:WindowsSystem32driversetc的host文件进行修改,添加以下内容:
192.168.80.100 hadoop0
192.168.80.101 hadoop1
192.168.90.102 hadoop2
在浏览器中输入hadoop0:50030或者hadoop0:50070
1.12(可选)将namenode移到hadoop1上,因为namenode很费内存。
先停止运行:stop-all.sh
然后执行命令:vi masters(去掉localhost,添加hadoop1)
重新启动start-all.sh,就可以看到hadoop1上的任务(命令jps)
2动态的增加一个hadoop节点
2.1配置新节点的环境(像配置hadoop1和hadoop2一样)
2.2把新节点的hostname配置到主节点的slaves文件中
2.3在新节点,启动进程
hadoop-daemon.sh start datanode
hadoop-daemon.sh start tasktracker
2.4在主节点执行脚本hadoop dfsadmin -refreshNodes
3动态的下架一个hadoop节点
比如关闭hadoop0上的namenode节点
执行命令:kill -9 4549(在hadoop0上)
在浏览器上hadoop0:50070上查看变化。