Hadoop完全分布式安装
一、整体步骤
1、准备工作
- 修改每台机器主机名(hostname)
- 修改每台机器/etc/hosts 文件
- 配置 ssh,实现无密码登录
2、配置工作
- 修改hadoop-env.sh 和 yarn-env.sh 文件
- 配置 core-site.xml
- 配置 hdfs-site.xml
- 配置 mapred-site.xml
- 配置 yarn-site.xml
- 配置 slaves 文件
-
基于三台虚机完成搭建
-
Hadoop的安装版本为2.9.2
二、配置过程详解
1、配置前提说明
1.1 当前已有环境
- 三台虚拟机都已经完成的步骤
- 网络配置
- 主机名配置
- 主机域名映射
- 防火墙和selinux关闭
- ssh免密
- 安装JDK
- snode03上完成的配置
- 配置了hadoop环境变量
- hdfs配置
1.2 准备工作
-
检查以上配置是否完成
-
关掉之前的HDFS服务(本教程之前是在snode03上配置,此处也在snode03上关闭)
stop-dfs.sh
-
清除之前伪分布式系统留下的数据(snode03机器上)
-
清除/opt/software/hadoop/hdfs/目录下name、data、tmp下的数据
-
cd /opt/software/hadoop/hdfs/name/
rm -rf current/
cd /opt/software/hadoop/hdfs/data/
rm -rf current/
cd /opt/software/hadoop/hdfs/tmp/
rm -rf dfs/
2、hadoop-env.sh
-
此处无需配置保持配置不变
-
原来的配置是修改里面的JAVA_HOME值和HADOOP_CONF_DIR的值,并非新增
- 配置值
export JAVA_HOME=/usr/local/java/jdk1.8
export HADOOP_CONF_DIR=/opt/software/hadoop/hadoop-2.9.2/etc/hadoop
3、yarn-env.sh
- 此配置是新增JAVA_HOME值。
- 找到# export JAVA_HOME=/home/y/libexec/jdk1.6.0/,在这行下添加JAVA_HOME配置
cd /opt/software/hadoop/hadoop-2.9.2/etc/hadoop/
vim yarn-env.sh
# 添加以下配置
export JAVA_HOME=/usr/local/java/jdk1.8
4、core-site.xml
- 此配置需要把文件系统节点改成snode01
- fs.defaultFS表示指定集群的文件系统类型是分布式文件系统(HDFS),datanode心跳发送到namenode的地址
- hadoop.tmp.dir表示hadoop临时文件目录
<property>
<name>fs.defaultFS</name>
<value>hdfs://snode01:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/software/hadoop/hdfs/tmp</value>
</property>
5、hdfs-site.xml
- dfs.replication原本配置是1,修改为3,三副本策略,表示副本数是3
- dfs.name.dir和dfs.data.dir配置不变
- dfs.datanode.max.locked.memory配置添加,开启缓存,配置值根据自己机器情况配置
- dfs.permissions配置添加,值配置false,不开启文件权限
cd /opt/software/hadoop/hadoop-2.9.2/etc/hadoop/
vim hdfs-site.xml
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/opt/software/hadoop/hdfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/opt/software/hadoop/hdfs/data</value>
</property>
<property>
<name>dfs.datanode.max.locked.memory</name>
<value>65536</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
6、mapred-site.xml
-
需要把mapred-site.xml.template拷贝成mapred-site.xml文件进行配置
cd /opt/software/hadoop/hadoop-2.9.2/etc/hadoop/
cp mapred-site.xml.template mapred-site.xml
vim mapred-site.xml
- 在configuration标签中间添加以下配置
- mapreduce.framework.name指定资源分配使用yarn
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
7、yarn-site.xml
- 在configuration标签中间添加以下配置
- yarn.resourcemanager.hostname:yarn相关资源服务器的主机名,使用snode01
- yarn.nodemanager.aux-services和MapReduce计算相关
- yarn.nodemanager.vmem-check-enabled 关闭虚拟内存检查
cd /opt/software/hadoop/hadoop-2.9.2/etc/hadoop/
vim yarn-site.xml
<property>
<name>yarn.resourcemanager.hostname</name>
<value>snode01</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
8、slaves
-
配置3台机器主机名,此配置表示三台机器都作为DataNode
9、同步配置信息
- 把snode3上的配置同步到snode01和snode02
- 使用scp命令进行同步
cd /opt/software/
scp -r hadoop/ snode01:$PWD
scp -r hadoop/ snode02:$PWD
三、启动集群
1、格式化
- 在snode01上格式化
hdfs namenode -format
2、启动集群
- 不需要3台机器都启动,只需要在snode01上启动
start-dfs.sh
3、查看启动情况
- snode01上查看是否有3个进程启动
jps
- snode02、snode03上分别有1个进程
- 查看进程脚本
cd /root/bin
vim jpsall
- 添加如下代码:
#!/bin/bash
for host in snode01 snode02 snode03
do
echo =============== $host ===============
ssh $host jps
done
- 增加执行权限
chmod +x jpsall
- 访问web管理台
- url:http://snode01:50070/
4、上传文件测试
- 创建目录
hdfs dfs -mkdir /test
- 上传文件
# 上传文件到snode01
cd /opt/
mkdir testData
cd testData/
mkdir hdfs
cd hdfs
rz #上传hadoop-2.9.2.tar.gz
# 把hadoop-2.9.2.tar.gz上传到分布式文件系统
hdfs dfs -put hadoop-2.9.2.tar.gz /test
- 文件上传成功以后检查datanode节点情况
5、配置环境变量
- 直接使用xsync脚本同步snode01、snode02的环境变量
xsync /etc/profile.d/my_env.sh
-
查看snode01的文件情况
-
刷新环境变量
source /etc/profile