安装JAVA
配置JAVA环境变量
上传hadoop
解压hadoop
tar -zxf hadoop-2.8.5.tar.gz -C /opt/apps
配置hadoop环境变量
vi /etc/profile
export HADOOP_HOME=/opt/apps/hadoop-2.8.5
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
修改配置文件
vi $HADOOP_HOME/etc/hadoop/hadoop-env.sh(配置java环境变量)
export JAVA_HOME=/opt/apps/jdk1.8.0_65/
vi $HADOOP_HOME/etc/hadoop/hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.name.dir</name>
<value>/opt/hdpdata/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/opt/hdpdata/data</value>
</property><property>
<name>dfs.replication</name>
<value>3</value>
</property><property>
<name>dfs.namenode.rpc-address</name>
<value>dream1:9000</value>
</property><property>
<name>dfs.namenode.secondary.http-address</name>
<value>dream2:50090</value>
</property>
</configuration>
vi $HADOOP_HOME/etc/hadoop/slaves(配置datanode的主机名)
dream1
dream2
dream3
dream4
分发到其余三个服务器上
scp -r /opt/apps dream2:/opt/
scp -r /opt/apps dream3:/opt/
scp -r /opt/apps dream4:/opt/
格式化namenode
hadoop namenode -format
启动
start-dfs.sh
关闭
stop-dfs.sh
启动过程
启动过程:datanode启动之后向namenode发送消息,加入集群
这个过程分为两种状态,1、已经加入过一次,再想加入 2、第一次加入
已经加入过:
datanode已经加入过一次,就会生成一个data文件夹,在data文件夹下有个current/VERSION 文件,这个文件记载了集群和自己本身的标记,如果他的clusterID和namenode上初始化出来的clusterID不一致,就会被拒绝加入
[root@dream3 current]# vi VERSION
#Tue Dec 08 03:26:19 CST 2020
storageID=DS-3dd8d0dc-b895-449b-b4e3-74f315272836 #datanode存储块的id
clusterID=CID-ff078a14-3af0-457d-bc59-3b9fd6b27ad2 #集群的id
cTime=0
datanodeUuid=2eab86fb-519a-4742-b6f3-98af52c569bf
storageType=DATA_NODE
layoutVersion=-57
第一次加入:
datanode在没加入之前还没有创建过data目录,当然也就没有current/VERSION 文件,namenode会识别为是一台新的机器要加入进来,所以会把自己的clusterID返回给datanode,datanode接收到后会创建current/VERSION 文件
并把clusterID写入。
异常
jps 中有datanode 也有namenode 但是服务 namenode:50070显示没有datanode连接
也要分两种情况来解读。
已经加入过:那就是clusterID没有被识别,也就是和namenode的clusterID不一致了,namenode拒绝加入,但是datanode本身还是启动成功的。所以JPS还在
第一次加入:那就是没有找到namenode hdfs-site.xml中没有记录namenode的地址,或者无法连接到namenode 比如namenode开防火墙了、或者ip ping不通了