完全分布式集群安装
windows安装vmwave后准备一台安linux系统的虚拟机(之后要克隆两台,算好硬盘和内存),这里使用centos6.5。
192.168.189.130 hadoop1
192.168.189.131 hadoop2
192.168.189.132 hadoop3
关闭防火墙
[root@hadoop1 ~]# service iptables stop
如果不关,后续需要将端口一个个加入防火墙规则。
关闭selinux
[root@hadoop1 ~]# vim /etc/sysconfig/selinux
SELINUX=enforcing 改为 SELINUX=disabled
修改主机名
[root@hadoop1 ~]# vi /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=hadoop1
[root@hadoop1 ~]# vi /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
192.168.189.130 hadoop1
192.168.189.131 hadoop2
192.168.189.132 hadoop3
设置静态IP
[root@hadoop1 ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0
ONBOOT=yes
IPADDR=192.168.189.130
NETMASK=255.255.255.0
DNS1=114.114.114.114
GATEWAY=192.168.189.2
NM_CONTROLLED=yes
BOOTPROTO=none
[root@hadoop1 ~]# service network restart
这里的ip和网关要根据自己VMware虚拟网卡所在的网络设置,网关不对上不了外网。
配置jdk环境
参考 https://blog.csdn.net/lyhkmm/article/details/79524712
配置用户权限
新建hadoop用户(这里直接使用root也行,生产环境下通常会区分指定各个用户权限)。
[root@hadoop1 ~]# useradd hadoop
[root@hadoop1 ~]# passwd hadoop
设置hadoop用户具有root权限 修改 /etc/sudoers 文件,找到下面一行,在root下面添加一行。
[root@hadoop1 ~]# visudo
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
hadoop ALL=(ALL) ALL
创建hadoop安装目录
[root@hadoop1 ~]# mdkir /app/hadoop/
设置权限
[root@hadoop1 ~]# chown -R hadoop:hadoop /app/hadoop/
VMware克隆出两台
克隆出的两台需要修改ip地址为:192.168.189.131 192.168.189.132 。修改主机名为hadoop2 hadoop3,修改方法参考上面的方法。如果克隆后的虚拟机重启网络失败把/etc/sysconfig/network-scripts/ifcfg-eth0的HWADDR和UUID删了。
设置SSH免密钥
关于ssh免密码的设置,要求每两台主机之间设置免密码。分别在三台节点的hadoop用户下执行,执行完毕公钥在/home/hadoop/.ssh/id_rsa.pub。
[hadoop@hadoop1 ~]$ ssh-keygen -t rsa
[hadoop@hadoop1 ~]$ ssh-copy-id hadoop1
[hadoop@hadoop1 ~]$ ssh-copy-id hadoop2
[hadoop@hadoop1 ~]$ ssh-copy-id hadoop3
[hadoop@hadoop2 ~]$ ssh-keygen -t rsa
[hadoop@hadoop2 ~]$ ssh-copy-id hadoop1
[hadoop@hadoop2 ~]$ ssh-copy-id hadoop2
[hadoop@hadoop2 ~]$ ssh-copy-id hadoop3
[hadoop@hadoop3 ~]$ ssh-keygen -t rsa
[hadoop@hadoop3 ~]$ ssh-copy-id hadoop1
[hadoop@hadoop3 ~]$ ssh-copy-id hadoop2
[hadoop@hadoop3 ~]$ ssh-copy-id hadoop3
下载安装
https://hadoop.apache.org/releases.html 下载完后通过远程连接工具上传的/tmp下
修改配置文件
[hadoop@hadoop1 ~]$ tar /tmp/zxvf hadoop-2.8.5.tar.gz -C /app/hadoop/
[hadoop@hadoop1 tmp]$ cd /app/hadoop/hadoop-2.8.5/etc/hadoop/
编辑core-site.xml
[hadoop@hadoop1 hadoop]$ vi core-site.xml
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://hadoop1:9000</value>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop1:9000</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/app/hadoop/hadoop-2.8.5/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>hadoop.proxyuser.hduser.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.hduser.groups</name>
<value>*</value>
</property>
</configuration>
编辑hadoop-env.sh
[hadoop@hadoop1 hadoop]$ vi hadoop-env.sh
export JAVA_HOME=/usr/lib/java/jdk1.8.0_191
[hadoop@hadoop1 hadoop]$ vi hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop1:9001</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/app/hadoop/hadoop-2.8.5/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/app/hadoop/hadoop-2.8.5/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
</configuration>
编辑mapred-site.xml
[hadoop@hadoop1 hadoop]$ vi mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop1:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop1:19888</value>
</property>
</configuration>
编辑mapred-env.sh
[hadoop@hadoop1 hadoop]$ vi mapred-env.sh
添加
export JAVA_HOME=/usr/lib/java/jdk1.8.0_191
编辑yarn-site.xml
[hadoop@hadoop1 hadoop]$ vi yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>hadoop1:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>hadoop1:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>hadoop1:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>hadoop1:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>hadoop1:8088</value>
</property>
</configuration>
编辑slaves
[hadoop@hadoop1 hadoop]$ vi slaves
hadoop1
hadoop2
hadoop3
复制hadoop到子节点
[hadoop@hadoop1 hadoop]$ scp -r /app/hadoop/hadoop-2.8.5 hadoop@hadoop2:/app/hadoop/
[hadoop@hadoop1 hadoop]$ scp -r /app/hadoop/hadoop-2.8.5 hadoop@hadoop3:/app/hadoop/
[hadoop@hadoop1 hadoop]$ sudo vi /etc/profile
export HADOOP_CONF_DIR=/app/hadoop/hadoop-2.8.5/etc/hadoop
export HADOOP_HOME=/app/hadoop/hadoop-2.8.5
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
[hadoop@hadoop1 hadoop]$ source /etc/profile
另外两台节点也要配置/etc/profile环境变量,可以直接scp过去
启动
第一次启动,需要格式化namenode,以后就不用了。
[hadoop@hadoop1 hadoop]$ hdfs namenode -format
可以一键启动,至于start-all.sh具体启动了什么可以查看脚本。
[hadoop@hadoop1 sbin]$ ./start-all.sh
查看进程
[hadoop@hadoop1 sbin]$ jps
52608 ResourceManager
52929 Jps
52275 DataNode
52133 NameNode
52440 SecondaryNameNode
52715 NodeManager
也可以只启动具体服务
[hadoop@hadoop1 sbin]$ ./start-dfs.sh
[hadoop@hadoop1 sbin]$ ./start-yarn.sh
查看web ui http://hadoop1:50070/dfshealth.html windows的hosts文件上需要添加hadoop1的解析。
一键停止,也可以指定停止和启动类似
[hadoop@hadoop1 sbin]$ ./stop-all.sh
高可用
生产环境使用,和上面类似,需要使用Zookeeper注册中心,配置文件和启动命名有所不同。