HDFS完全分布式搭建过程踩坑特辑及HDFS操作指令总结

完全分布式搭建过程

完全分布式系统的特点是,将各个角色的进程在不同的节点启动。
本次尝试搭的分布式系统节点与角色设计如下:

node1--NameNode
node2--SecondaryNameNode--DataNode
node3--DataNode
node4--DataNode

1、将所有节点配置Java JDK,做配置完全分布式HDFS的准备工作

①JDK的坑1

首先,如果虚拟机里存在自带的Java JDK1.6或者1.7,需要把自带的JDK成功卸载之后再配置安装我们需要的jdk1.8.0_151。
否则会发现,我配置好了系统环境变量,为什么执行 java -version还是显示jdk1.7?那是因为,之前自带的jdk没有卸载。
通过查找相关资料尝试各种方法 ,找到了可行有效的卸载Linux虚拟机自带的jdk的方法。方法如下:
卸载Linux自带Java jdk的过程

②JDK的坑2

如果配置环境变量之后还是找不到$JAVA_HOME,需要进行对HDFS关于Java Jdk的手工配置,具体操作是修改/etc/hadoop下的hadoop-env.sh文件,将具体的JDK路径填入Java_Home的配置中,示例如下:

#The java implementation to use.
export JAVA_HOME=/opt/software/jdk1.8.0_151

③Could not resolve hostname node1: Name or service not know

以上报错,浏览了某一篇博文,他修改了/etc/hosts文件,它是这么改的:
在这里插入图片描述我用了,没有解决问题。我询问了有经验的大牛,他告诉我不是这么配的。这个错误算是一个比较基础的错误。
应该以ip hostname的形式竖着写,如果横着写会解析不出来,而且以上红框内的如果那么改了,应该删掉,否则会有节点冲突。我修改了/etc/hosts文件,每一个节点都配置了此文件。重启生效之后成功解决问题。解决方法如下:
在这里插入图片描述

2、配置时间同步

① 各个节点安装ntp用来同步时间

具体操作方法:运行如下命令运用yum安装

yum install ntp

②同步时间

这里通过上网查找最新的时间服务器ntp1.aliyun.com实现时间同步

ntpdate ntp1.aliyun.com

3、配置免密登陆

要搭HDFS完全分布式系统,就要实现node1->node1 node1->node2 node1->node3 node1->node4之间的免密登陆。由此可以通过node1节点来综合控制node1,node2,node3和node4的各个节点。

所有节点需要执行如下命令生成密钥

ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa

以上命令的含义是:
-t参数就是指定要生成的密钥类型,这里指定的是rsa
-P就是你提供的旧密码, ‘’ 表示没有
-f是密钥的生成后的保存文件位置

在node01节点执行以下一系列指令

目的是将node1的公钥加入到其他节点的白名单中

ssh-copy-id -i ~/.ssh/id_rsa.pub root@node1
ssh-copy-id -i ~/.ssh/id_rsa.pub root@node2
ssh-copy-id -i ~/.ssh/id_rsa.pub root@node3
ssh-copy-id -i ~/.ssh/id_rsa.pub root@node4

4、修改hdfs-site.xml配置文件

需要在/hadoop-2.6.5/etc/hadoop目录下的hdfs-site.xml文件中粘贴如下内容并修改成自己需要的配置:

<property>
        <name>dfs.replication</name>
        <value>3</value>
</property>
<property>   
  
 <name>dfs.namenode.secondary.http-address</name>
     <value>node2:50090</value>
</property>

第一个配置用来设置加上本身有几个副本
第二个配置用来设置SecondaryNameNode的网络访问地址

5、修改core-site.xml配置文件

需要在/hadoop-2.6.5/etc/hadoop目录下的core-site.xml文件中粘贴如下内容并修改成自己需要的配置:\

<property>
        <name>fs.defaultFS</name>
        <value>hdfs://node1:9000</value>
</property>
<property>
        <name>hadoop.tmp.dir</name>
        <value>/var/abc/hadoop/cluster</value>
</property>

第一个配置用来描述集群中NameNode结点的URI
第二个配置用来设置元数据存储的目录

6、修改slaves配置文件

在node1节点里修改,修改为“node2 node3 node4”但是,要竖着写!并且行后不允许留空格。否则会出现识别错误。

7、将配置好的安装包分发到其他节点上

在分发之前,进到需要分发的文件的父目录进行分发。分发到的目录需要和现有目录完全一致。

scp -r hadoop-2.6.5 root@node2:'pwd'

8、格式化NameNode

格式化用来创建目录结构以及文件。此操作在在node1节点执行。

hdfs namenode -format

9、启动HDFS

start-dfs.sh

如果格式化没报错但是运行的时候显示找不到文件,有可能配置文件没生效。那么需要重启虚拟机重新配之后再试试。

HDFS操作指令总结

HDFS 操作
上传文件 hdfs dfs -put 原文件路径 目标文件路径
打开HDFS集群 start-dfs.sh
删除文件 hdfs dfs -rm -r /cba
浏览HDFS文件 hdfs dfs -ls /
本地文件拷贝到HDFS中:hdfs dfs -copyFormatLocal src… dest
将本地文件移动到HDFS中:hdfs dfs -moveFormatLocal src… dest 移动完之后本地就没有了
创建新目录:hdfs dfs -mkdir -p /test
级联创建:hdfs dfs -mkdir -p /test/t1
往文件中追加信息:hdfs dfs -appendToFile cba /test/t1
查看t1文件内容:hdfs dfs cat /test/t1
更改文件的属组 hdfs dfs -chgrp nb /test/t1
更改文件权限:hdfs dfs -chmod -R 777 /test/t1
如果递归修改加-R
更改文件的属主和属组:hdfs dfs -chown andrea:zzz /andrea
将HDFS上的文件复制到本地:hdfs dfs -copyToLocal /t1 ./
-cp 内部复制
查看文件系统的磁盘空间:hdfs dfs -df -h

猜你喜欢

转载自blog.csdn.net/Andrea_null/article/details/83002970