完全分布式搭建是在上一篇伪分布式搭建的基础上搭建的,基础hdfs搭建查看上篇详情。
目录
角色定义
服务器 | NameNode | secondaryNameNode | DataNode |
---|---|---|---|
node01 | * | ||
node02 | * | * | |
node03 | * | ||
node04 | * |
-
服务器配置
1. 创建同node01一样的其他三台服务器 node02,node03, node04,创建方式参照大数据之Linux环境搭建文章。
2. 停止node01 服务器上的HDFS伪分布式进程
-
ssh免密
# 设置免密是为了集群启动时,start-dfs.sh脚本管理集群,在node01启动,就将node01的公钥分发给其他三台机器,node01就可以对其他三台进行免密登陆。
# 操作 (将node01 的公钥分发给其他机器,并同意命名为node01.pub)
# 在node01:
$ scp /root/.ssh/id_dsa.pub node02:/root/.ssh/node01.pub
$ scp /root/.ssh/id_dsa.pub node03:/root/.ssh/node01.pub
$ scp /root/.ssh/id_dsa.pub node04:/root/.ssh/node01.pub
# 分别在node02-node04进行操作:
$ cd ~/.ssh
$ cat node01.pub >> authorized_keys
-
hdfs配置文件
# 在node01上先将之前的伪分布式hdfs文件备份
$ cp -r /opt/bigdata/hadoop /opt/bigdata/hadoop_local
$ cd $HADOOP_HOME/etc/hadoop
$ vi hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/var/bigdata/hadoop/full/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/var/bigdata/hadoop/full/dfs/data</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>node02:50090</value>
</property>
<property>
<name>dfs.namenode.checkpoint.dir</name>
<value>/var/bigdata/hadoop/full/dfs/secondary</value>
</property>
</configuration>
# 定义DataNode服务器
$ vi slaves
node02
node03
node04
-
分发到其他机器
# 将node01上配置好的hdfs分发到node02-node04三台机器上
$ cd /opt
$ scp -r ./bigdata/hadoop-2.6.5 node02:`pwd`
$ scp -r ./bigdata/hadoop-2.6.5 node03:`pwd`
$ scp -r ./bigdata/hadoop-2.6.5 node04:`pwd`
-
格式化&启动
# 格式化<仅在集群搭建时候执行一次,切勿重复执行>
$ hdfs namenode -format
# 启动
$ start-dfs.sh
-
验证
# 在node01
$ cd /var/bigdata/hadoop/full/dfs/name/current
$ ll
# 查看有无fsimage和edits
$ cat VERSION
namespaceID=11****40
clusterID=CID-*********-ce2b69c7f658
cTime=0
storageType=NAME_NODE
blockpoolID=BP-*****-1595910068876
layoutVersion=-63
# 在node02
$ cd /var/bigdata/hadoop/full/dfs
$ ll
# 查看是否存在data和secondary两个文件目录
$ cd /secondary/current
$ ll
$ cat VERSION
namespaceID=11****40
clusterID=CID-****-ce2b69c7f658
cTime=0
storageType=NAME_NODE
blockpoolID=BP-****-1595910068876
layoutVersion=-63
# 在node02-node04验证DataNode
$ cd /var/bigdata/hadoop/full/dfs/data/current
$ cat VERSION
storageID=DS-****-2d900c512332
clusterID=CID-****-ce2b69c7f658
cTime=0
datanodeUuid=c8c8d695-****-0ada39a4c710
storageType=DATA_NODE
layoutVersion=-56
# 查看clusterId是否都相同
hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/var/bigdata/hadoop/full/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/var/bigdata/hadoop/full/dfs/data</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>node02:50090</value>
</property>
<property>
<name>dfs.namenode.checkpoint.dir</name>
<value>/var/bigdata/hadoop/full/dfs/secondary</value>
</property>
</configuration>
-
思考
优点:主从集群,机构相对简单,主从协作,主单点,数据一致性好掌握
问题:
1.namenode单点故障,造成集群整体不可用
2.单点压力过大,内存受限
解决方案:
1.单点故障: 采用高可用方案HA(High Avaliable), 多个namenode,主备切换
2.压力过大,内存受限:采用联邦机制Federation,对元数据进行分片,用多个namenode管理不同的元数据