目录
前置
一、上传&解压
(一 )上传
(二)解压
二、修改配置文件
(一)配置workers文件
(二)配置hadoop-env.sh文件
(三)配置core-site.xml文件
(四)配置hdfs-site.xml文件
三、分发到hp2、hp3, 并设置环境变量
(一)准备数据目录
(二)配置环境变量
四、创建数据目录,并修改文件权限归属hadoop账户
(一)授权为Hadoop用户
(二)格式化整个文件系统
五、查看HDFS WEBUI
六、常见问题
hadoop-3.3.4.tar.gz提取:
链接:https://pan.baidu.com/s/18ILFiIBei8BqUg31MWEGAQ
提取码:ay17
前置
三台虚拟机硬件配置如下:
节点 | CPU | 内存 |
hp1 | 1核心 | 4GB |
hp2 | 1核心 | 2GB |
hp3 | 1核心 | 2GB |
Hadoop HDFS的角色包含:
NameNode:主节点管理者
DataNode:从节点工作者
SecondaryNameNode:主节点辅助
节点 | 服务 |
hp1 | NameNode、DataNode、SecondaryNameNode |
hp2 | DataNode |
hp3 | DataNode |
这样的话我们这个集群就是有一个主节点,带领了三个从节点,也就是一个NameNode带领了三个DataNode去工作的一个hdfs集群。此外还有一个SecondaryNameNode的角色也存在。
配置集群之前请确认已经完成前置准备中的服务器创建、固定IP、防火墙关闭、Hadoop用户创建、SSH免密、JDK部署等部署。(没配好的可以参考前面的博客)
一、上传&解压
(一 )上传
1.上传hadoop安装包到hp1节点中
(二)解压
1.解压缩安装包到/export/server/中
tar -zxvf hadoop-3.3.4.tar.gz -C /export/server/
2.构建软链接
先进入/export/server/目录下
构建软链接
ln -s /export/server/hadoop-3.3.4 hadoop
可以去看一下hadoop里面的文件
各个文件夹含义如下
bin , 存放Hadoop的各类程序(命令)
etc , 存放Hadoop的配置文件
include , C语言的一些头文件
lib , 存放Linux系统的动态链接库(.so文件)
libexec , 存放配置Hadoop系统的脚本文件(.sh和.cmd)
licenses-binary , 存放许可证文件
sbin , 管理员程序(super bin)
share , 存放二进制源码(java jar包)
二、修改配置文件
配置HDFS集群,我们主要涉及到如下文件的修改:
workers | 配置从节点(DataNode)有哪些 |
hadoop-env.sh | 配置Hadoop的相关环境变量 |
core-site.xml | Hadoop核心配置文件 |
hdfs-site.xml | HDFS核心配置文件 |
这些文件均存在于 $HADOOP_HOME/etc/hadoop文件夹中
Ps: $HADOOP_HOME是后续我们要设置的环境变量,其指代Hadoop安装文件夹即 /export/server/hadoop
(一)配置workers文件
1.进入配置文件目录
cd etc/hadoop 完整路径:cd /export/server/hadoop/etc/hadoop/
编辑workers文件
vim workers
把原本的内容删掉,
然后填入以下内容
填入的hp1、hp2、hp3表明集群记录了三个从节点
(二)配置hadoop-env.sh文件
vim hadoop-env.sh
可以在开头或者结尾加入以下内容
export JAVA_HOME=/export/server/jdk
export HADOOP_HOME=/export/server/hadoop
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HADOOP_LOG_DIR=$HADOOP_HOME/logs
JAVA_HOME , 指明JDK环境的位置在哪
HADOOP_HOME , 指明Hadoop安装位置
HADOOP_CONF_DIR , 指明Hadoop配置文件目录位置
conf 是configure,配置 dir是文件夹的缩写
HADOOP_LOG_DIR , 指明Hadoop运行日志目录位置
通过记录这些环境变量,来指明上述运行时的重要信息
(三)配置core-site.xml文件
vim core-site.xml
在<configuration></configuration>之间添加如下内容
<property>
<name>fs.defaultFS</name>
<value>hdfs://hp1:8020</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
key: fs.defaultFS
含义:HDFS文件系统的网络通讯路径
值:hdfs://hp1:8020
协议为hdfs://
namenode为hp1
namenode通讯端口为8020
hdfs:hp1:8020为整个HDFS内部的通讯地址,应用协议为hdfs://(Hadoop内置协议)
表明DataNode将和hp1的8020端口通讯,hp1是NameNode所在机器
此配置固定了hp1必须启动NameNode进程
(四)配置hdfs-site.xml文件
在<configuration></configuration>之间添加如下内容
<property>
<name>dfs.datanode.data.dir.perm</name>
<value>700</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/data/nn</value>
</property>
<property>
<name>dfs.namenode.hosts</name>
<value>hp1,hp2,hp3</value>
</property>
<property>
<name>dfs.blocksieze</name>
<value>268435456</value>
</property>
<property>
<name>dfs.namenode.handler.count</name>
<value>100</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/data/dn</value>
</property>
key: dfs.datanode.data.dir.perm
含义:hdfs文件系统,默认创建的文件权限设置
值:700,即rwx------
新建文件默认权限是700
key: dfs.namenode.name.dir
含义:NameNode元数据的存储位置
值:/data/nn,在hp1节点的/data/nn目录下
nn是namenode的缩写
key: dfs.namenode.hosts
含义:NameNode允许哪几个节点的DataNode连接(即允许加入集群)
值:hp1、hp2、hp3,这三台服务器被授权
key: dfs.blocksieze
含义:hdfs默认块大小
值:26843546(256MB)
key: dfs.namenode.handler.count
含义:namenode处理的并发线程数
值:100,以100个并行度处理文件系统的管理任务
key: dfs.datanode.data.dir
含义:从节点DataNode的数据存储目录
值:/data/dn,即数据存放在hp1、hp2、hp3,三台机器的/data/dn内
dn即datanode
三、分发到hp2、hp3, 并设置环境变量
(一)准备数据目录
<property>
<name>dfs.namenode.name.dir</name>
<value>/data/nn</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/data/dn</value>
</property>
namenode数据存放hp1的/data/nn
datanode数据存放hp1、hp2、hp3的/data/dn
所以应该:
1.在hp1节点:
mkdir -p /data/nn
mkdir /data/dn
在hp2和hp3节点:
mkdir -p /data/dn
2.分发Hadoop文件夹
目前,已经基本完成Hadoop的配置操作,可以从hp1将hadoop安装文件夹远程复制到hp2、hp3
分发
scp -r hadoop-3.3.4 root@hp2:/export/server/
scp -r hadoop-3.3.4 root@hp3:/export/server/
在hp2为hadoop配置软连接
ln -s /export/server/hadoop-3.3.4 hadoop
在hp3为hadoop配置软连接
ln -s /export/server/hadoop-3.3.4 hadoop
(二)配置环境变量
为了方便我们操作Hadoop,可以将Hadoop的一些脚本、程序配置到PATH中,方便后续使用
在Hadoop文件夹中的bin、sbin两个文件夹内有许多的脚本和程序,现在来配置以下环境变量
vim /etc/profile
export HADOOP_HOME=/export/server/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
内容添加完成之后,source /etc/profile让环境变量生效
在hp2和hp3配置同样的环境变量
四、创建数据目录,并修改文件权限归属hadoop账户
(一)授权为Hadoop用户
Hadoop部署的准备工作基本完成
为了确保安全,hadoop系统不以root用户启动,我们以普通用户hadoop来启动整个Hadoop服务
所以,现在需要对文件权限进行授权
1.以root身份,在hp1、hp2、hp3三台服务器上均执行以下命令
chown -R hadoop:hadoop /data
chown -R hadoop:hadoop /export
(二)格式化整个文件系统
前期准备全部完成,现在对整个文件系统执行初始化
1.确保以hadoop用户执行
先切换用户
su - hadoop
格式化namenode
hadoop namenode -format
可以cd进去看到里面多了一些文件
current里面都是namenode的源数据
2.一键启动hdfs集群
start-dfs.sh
第一次启动的时候会有个警告说logs这个文件不存在,不用管它。这是运行的日志文件夹。
(第一次忘记截图了,所以从别的地方找的图,由于连接工具不一样,所以图形界面有差异)
Jps可以查看当前运行的进程
一键关闭hdfs集群
stop-dfs.sh
如果遇到命令未找到的错误,表面环境变量未配置好,可以以绝对路径执行
/export/server/hadoop/sbin/start-dfs.sh
/export/server/hadoop/sbin/stop-dfs.sh
五、查看HDFS WEBUI
http://hp1:9870 ,即可查看到hdfs文件系统的管理网页。
hdfs在运行的时候,会给我们提供一个管理平台网站页面,它是namenode所在服务器。
9870是namenode所在服务器的端口
往下翻,有汇总信息
在线node就是我们naemnode下面的小弟,
点进去可以看到整个hdfs文件系统的一些基本信息
注意!!一定要hadoop用户去操作集群,以root执行的话所有权就会回归root,后续以hadoop用户启动会出错(没有权限)!
关闭集群后再关闭虚拟机,就可以进行快照的拍摄
每一台都需要进行快照的拍摄
六、常见问题
Permission denied(权限被拒绝)
hadoop安装文件夹或/data文件夹,未授权给hadoop用户,则无权限操作,所有的Permission denied提示,都是权限导致的。
出现command not found
没有配置好环境变量导致的
启动后仅hp1有进程出现
hp2、hp3没反应
检查workers文件有没有正确配置
start-dfs.sh脚本会:
在当前机器启动SecondaryNameNode , 并根据core-site.xml的记录启动NameNode
根据workers文件的记录,启动各个机器的datanode