3 台服务器,都是阿里云的,一台作为master、另外2台的作为slave1、slave2,系统是 centos7.6x64,如果使用服务器搭建 hadoop 最好是在同一个 vpc 里面的,不同的网落之间会有奇奇怪怪的情况,我这里为了省钱,一台是学生服务器,另外两台是共享型的按量收费服务器。
设置两台机器的 hostname
修改主机器和从机器的 hostname,分别为 master、slave1、slave2,以master为例
# vim ~/.bashrc
修改完 hostname 之后
# bash
# hostname
设置DNS
这里要注意的是,对于master机器端的配置,master设置的是内网ip,slave1、slave2设置的是外网ip,slave1、slave2机器的配置同理
master机器:
master的内网ip master
slave1的外网ip slave1
slave2的外网ip slave2
slave1机器:
master的外网ip master
slave1的内网ip slave1
slave2的外网ip slave2
内网的 ip 地址可以通过 ifconfig查看
# vim /etc/hosts
3 台机器都设置好dns之后,互相 ping 一下,看能否 ping 通
设置ssh免密登录
以 master 机器为例,ssh-keygen一路回车
# ssh-keygen
slave1、slave2同样执行 ssh-keygen
在master执行
ssh-copy-id -i ~/.ssh/id_rsa.pub master
ssh-copy-id -i ~/.ssh/id_rsa.pub slave1
ssh-copy-id -i ~/.ssh/id_rsa.pub slave2
在slave1执行
ssh-copy-id -i ~/.ssh/id_rsa.pub master
ssh-copy-id -i ~/.ssh/id_rsa.pub slave1
ssh-copy-id -i ~/.ssh/id_rsa.pub slave2
在 master 上,另外两台同理
# ssh slave1
# ssh slave2
看两两之间 ssh 能否连接成功
安装 java
我这里的安装路径是 /usr/local/src/,通过 FinalShell 把 jdk 上传
# mkdir java
# cd java
# tar xvzf 包名
配置 java 系统路径
# vim ~/.bashrc
JAVA_HOME=/usr/local/src/jdk1.8.0_172
export PATH="$JAVA_HOME/bin:$PATH"
验证 java 安装成功
# bash
# java -version
安装 hadoop
以 master 机器为例
# tar xvzf hadoop-2.6.5.tar.gz
# vim ~/.bashrc
HADOOP_HOME=/usr/local/src/hadoop-2.6.5
export PATH="$HADOOP_HOME/bin:$PATH"
切换到 /usr/local/src/hadoop-2.6.5/etc/hadoop
修改 hadoop-env.sh
# vim hadoop-env.sh
大概在第25行加上 JAVA_HOME
验证
# hadoop
出现上述,表明安装成功
修改 yarn-env.sh
# vim yarn-env.sh
在里面添加
export JAVA_HOME=/usr/local/src/jdk1.8.0_172
修改slaves文件,里面添加从节点
# vim slaves
里面的 localhost 记住不能删掉!!!
修改 core-site.xml
# vim core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/src/hadoop-2.6.5/tmp</value>
</property>
</configuration>
修改 mapred-site.xml
先复制一份模板
# cp mapred-site.xml.template mapred-site.xml
# vim mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
修改 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>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:8035</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>master:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>master:8088</value>
</property>
</configuration>
修改 hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:9001</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/src/hadoop-2.6.5/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/src/hadoop-2.6.5/dfs/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
</configuration>
在 HADOOP_HOME 目录,创建 3 个空目录
# mkdir tmp
# mkdir -p dfs/name
# mkdir -p dfs/data
用 scp 将 master 的配置同步到 slave1、slave2
# cd /usr/local/src/hadoop-2.6.5/etc
# scp -rp hadoop/ slave1:/usr/local/src/hadoop-2.6.5/etc
# scp -rp hadoop/ slave2:/usr/local/src/hadoop-2.6.5/etc
验证集群
进入 hadoop 的 bin 目录,初始化 hdfs 集群
注意!这个命令只能执行一次,后面别再执行第二次了,不然从节点的datanode的id会对不上,导致你在从节点用 jps 命令查看进程时发现没有datanode
hdfs namenode -format
运行 hdfs
查看 master 上的进程
查看 slave1、slave2 上的进程