Hadoop分布式集群搭建
- 创建虚拟机(可以参考网上其他教程)
- 克隆三台机器
master
slaver1
slaver2
- 分别在每台机器上安装jdk >= 1.7版本
vim /etc/profile
四、同步三台虚拟机的时间(时间同步)每台机器都要做同样的 操作
1、yum -y install ntp
2、输入
“cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime”
- 输入“ntpdate pool.ntp.org”
注意:如果电脑可以上网,但是虚拟机不可以上网,可以如下操作
编辑 vim /etc/resolv.conf
添加如下两行指令
nameserver 202.106.0.20
nameserver 8.8.8.8
如果没法保证每台虚拟机都联网,只能用小手该时间
date命令将日期设置为2014年6月18日
---- date -s 06/18/14
将时间设置为14点20分50秒
---- date -s 14:20:50
将时间设置为2014年6月18日14点16分30秒(MMDDhhmmYYYY.ss)
----date 0618141614.30
- 设置主机名 /etc/hosts
10.1.13.103 设置这台机器的主机名为master
10.1.13.104 设置这台机器的主机名为slaver1
10.1.13.105 设置这台机器的主机名为slaver2
在10.1.13.103机器上执行如下操作
- adduser master
- passwd master 提示输入密码和再次确定
- 修改主机名 vim /etc/sysconfig/network
- 给master用户root权限
chmod +w /etc/sudoers
vim /etc/sudoers
- 重启虚拟机,选择master用户登录
注意:另外两台机器也做同上的操作(名字分别为slaver1和slaver2)
- 修改主机映射(三台机器都是一样的操作)
- vim /etc/hosts
把hosts中的内容都删除,然后添加如下
- 配置静态ip
1、vim /etc/udev/rules.d/70**-net.rules
改完的效果
2、vim /etc/sysconfig/network-scripts/ifcfg-eth0
原来的样子
修改后的样子
- 重启网卡
service network restart
成功后,提示如下
- 剩下的两台机器,做同上操作(ip和mac地址是不一样)
- 配置三台机器之间的免密登录(必须在主机master上操作)
ssh-keygen -t rsa 然后四个回车(如果之前配置过免密,需要根据提示出入yes覆盖掉之前的密匙)
ssh-copy-id master 提示输入密码
ssh-copy-id slaver1 提示输入密码
ssh-copy-id slaver2 提示输入密码
测试: ssh slaver1 就不需要输入密码 然后在exit到当前用户,可以执行下一次测试
- 下载hadoop压缩包,解压(以下的所有操作都在主机上 进行) 温馨提示:最好在官网下载,src的源码,然后在自己的机器上编译,这样就不会出现找不到jar包的异常
- 把hadoop解压到/usr/local/目录下
tar -zxvf hadoop-2.8.4.tar.gz -C /usr/local
- 把hadoop-2.8.4改名为hadoop
进入到/usr/local/下执行
mv hadoop-2.8.4 hadoop
- 配置hadoop环境变量(也在主机下执行)
vim /etc/profile
立即让配置文件生效
source /etc/profile
此时,可以直接使用hadoop指令了
eg: hadoop version
- 关闭防火墙(三台机器都要关闭)
service iptables status
service iptables stop(临时关闭,不需要重启虚拟机)
chkconfig iptables off(永久关闭,需要重启机器生效)
- 修改主机的配置文件
进入到/uer/local/hadoop文件夹
然后mkdir namenode
mkdir datanode
mkdir tmp
进入到 /usr/loacal/hadoop/etc/hadoop文件然后如下编辑
- vim hadoop.env.sh
原来
该后
- vim core-site.xml
在configuretion中添加
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop/tmp</value>
</property>
效果
- vim hdfs-site.xml
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:50090</value>
</property>
<property>
<name>dfs.name.dir</name>
<value>/usr/local/hadoop/namenode</value>
</property>
<property>
<name>dfs.data.dir</name> <value>/usr/local/hadoop/datanode</value>
</property>
效果
- vim mapred-site.xml(没有mapred-site.xml但是有一个 mapred-site.xml.template
- ,我们可以把名字改一下就可以了)
- mv mapred-site.xml.template mapred-site.xml
- vim mapred-site.xml 然后添加
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
效果
- yarn-site.xml
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value>
</property>
<property> <name>yarn.log-aggregation-enable</name> <value>true</value>
</property>
<property> <name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
<property> <name>yarn.nodemanager.resource.memory-mb</name>
<value>2000</value>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-mb</name> <value>2000</value>
</property> <property> <name>yarn.scheduler.minimum-allocation-mb</name> <value>500</value> </property> <property> <name>mapreduce.reduce.memory.mb</name> <value>2000</value> </property>
<property> <name>mapreduce.map.memory.mb</name> <value>2000</value> </property>
<property> <name>yarn.nodemanager.vmem-pmem-ratio</name>
<value>2.1</value>
</property>
<property>
<name>yarn.resourcemanager.address</name> <value>master:8032</value>
</property>
<property> <name>yarn.resourcemanager.scheduler.address</name> <value>master:8030</value>
</property>
<property> <name>yarn.resourcemanager.resource-tracker.address</name> <value>master:8031</value> </property>
效果
- slaver
vim slavers
master
slaver1
slaver2
效果
- 下发配置文件到分机上
下发hadoop到分机
- scp -r /usr/local/hadoop root@slaver1:/usr/local/
- scp -r /usr/local/hadoop root@slaver2:/usr/local/
下发环境变量配置文件到分机
配置hadoop环境变量
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:
- scp -r /etc/profile root@slaver1:/etc/
- scp -r /etc/profile root@slaver2:/etc/
- 第一次执行的时候在主机下格式化namenode
hadoop namenode -format
格式化成功
- 启动hadoop集群
- start-all.sh
- 关闭集群
- stop-all.sh
- 测试集群是否可用
在主机上输入 jps
显示效果如下:
- 访问10.1.13.103:50070
- 访问10.1.13.103:8088
- 测试mapreduce来实现对pi的计算
- 进入到/usr/local/hoaddop/shared/hadoop/mapreduce
2、执行
hadoop jar hadoop-mapreduce-examples-2.8.4.jar pi 20 50
恭喜你成功了:如果你遇到如下问题
1、启动时提示文件不是安全的,可以做如下操作
到hadoop的bin目录下
执行:./hadoop dfsadmin -safemode leave命令。
- 如果输入hadoop没有提示,那么可以执行 source /etc/profile
- 如果还有其他奇葩问题,自行百度