hadoop-HDFS集群部署 Dec 26, 2024 · 大数据 hadoop · 分享到: 前置准备工作 Hadoop 主要配置 Hadoop HDFS初始化 保存状态 总结 HDFS集群部署 本篇笔记使用的Hadoop版本为3.4.1,下载链接hadoop-3.4.1.tar.gz。 根据前面的笔记,部署HDFS的3台虚拟机配置如下: 节点 CPU 内存 服务 node1 1 core 4GB NameNode, DataNode, SecondaryNameNode node2 1 core 2GB DataNode node3 1 core 2GB DataNode Hadoop HDFS的角色包含: NameNode,主节点管理者 DataNode,从节点工作者 SecondaryNameNode,主节点辅助 前置准备工作 我们将使用node1作为NameNode主节点,将会部署更多的软件。本质上,HDFS的三种角色都是作为进程运行在主机上。hadoop-3.4.1.tar.gz安装包中包含了3种角色的程序,我们将其上传到node1中,配置好node1后,我们将其再scp到node2,node3上。具体操作步骤(以node1为例,以root用户操作)如下: 1# 1. 上传Hadoop安装报到node1节点中,本人使用的是MobaXterm直接上传,并切换到上传所在目录 2# 2. 解压缩安装包到/export/server中 3tar -zxvf hadoop-3.4.1.tar.gz -C /export/server 4 5# 3. 构建软连接方便操作 6cd /export/server 7ln -s /export/server/hadoop-3.4.1 /export/server/hadoop 8 9# 进入hadoop安装包准备安装 10cd hadoop Hadoop 主要配置 Hadoop文件下基本由以下文件: 1[root@node1 hadoop]# ls -l 2total 84 3drwxr-xr-x 2 1024 1024 203 Oct 10 00:36 bin # 存放Hadoop的各类程序(命令) 4drwxr-xr-x 3 1024 1024 20 Oct 9 22:59 etc # 存放Hadoop的配置文件 5drwxr-xr-x 2 1024 1024 106 Oct 10 00:36 include # C语言的一些头文件 6drwxr-xr-x 3 1024 1024 20 Oct 10 00:36 lib # 存放Linux系统的动态链接库 7drwxr-xr-x 4 1024 1024 288 Oct 10 00:36 libexec # 存放配置Hadoop系统的脚本文件(.sh,.cmd) 8-rw-rw-r-- 1 1024 1024 23759 Sep 17 04:47 LICENSE-binary # 存放许可证文件 9drwxr-xr-x 2 1024 1024 4096 Oct 10 00:36 licenses-binary 10-rw-rw-r-- 1 1024 1024 15696 Jul 16 03:54 LICENSE.txt 11-rw-rw-r-- 1 1024 1024 27165 Jul 16 03:54 NOTICE-binary 12-rw-rw-r-- 1 1024 1024 1541 Jul 16 03:54 NOTICE.txt 13-rw-rw-r-- 1 1024 1024 175 Jul 16 03:54 README.txt 14drwxr-xr-x 3 1024 1024 4096 Oct 9 22:59 sbin # 管理员程序 15drwxr-xr-x 4 1024 1024 31 Oct 10 01:09 share # 存放二进制源码(java jar包) 其中,我们常用的有bin,etc,sbin三个文件夹中的程序。在配置阶段,主要是etc文件中的配置修改,其中和HDFS修改的配置文件主要有: 1[root@node1 hadoop]# ls -l workers hadoop-env.sh core-site.xml hdfs-site.xml 2-rw-r--r-- 1 1024 1024 774 Oct 9 22:57 core-site.xml 3-rw-r--r-- 1 1024 1024 16786 Oct 10 00:36 hadoop-env.sh 4-rw-r--r-- 1 1024 1024 775 Oct 9 23:03 hdfs-site.xml 5-rw-r--r-- 1 1024 1024 10 Oct 9 22:57 workers ps: 在/etc文件夹中,.sh是Linux使用的配置文件,.cmd是Windows使用的配置文件。因此,会看到类似hadoop-env.sh,hadoop-env.cmd这样同名不同后缀的一对文件。.xml是通用的数据文件格式,JAVA语言喜欢用这个文件格式。.properties是一种主要在Java相关技术中用来存储应用程序的可配置参数的文件的文件扩展名。 下面我们具体介绍四个和HDFS密切相关的配置文件。 workers::记录集群中存在哪些从节点(DataNode) 填入DataNode的IP或主机名(可DNS解析时),一行一个 e.g 1vim workers 2 3# 填入以下内容 4node1 5node2 6node3 hadoop-env.sh:配置hadoop运行的环境变量。找到文件中对应项,并修改。 1# JDK环境位置 2export JAVA_HOME=/export/server/jdk1.8.0_421 3# Hadoop安装位置 4export HADOOP_HOME=/export/server/hadoop 5# Hadoop配置文件目录位置 6export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop 7# Hadoop 运行日志目录位置 8export HADOOP_LOG_DIR=$HADOOP_HOME/logs core-site.xml:配置集群全局参数,用于定义系统级别的参数,如HDFS、URL、Hadoop的临时目录等。数据格式为name-value. 1<configuration> 2 <property> 3 <!--HDFS文件系统的网络通信路径--> 4 <!--通讯协议:hdfs://, namenode:node1, 通信端口8020--> 5 <!--表明DataNode将和node1的8020端口通讯, node1是NameNode所在机器--> 6 <name>fs.defaultFS</name> 7 <value>hdfs://node1:8020</value> 8 </property> 9 10 <property> 11 <!--io操作文件缓冲区大小 131072 bit--> 12 <name>io.file.buffer.size</name> 13 <value>131072</value> 14 </property> 15</configuration> hdfs-site.xml:HDFS参数。如名称节点和数据节点的存放位置、文件副本的个数、文件读取权限等。 1<configuration> 2 <property> 3 <!--hdfs文件系统,默认创建的文件权限设置,默认700, rwx --> 4 <name>dfs.datanode.data.dir.perm</name> 5 <value>700</value> 6 </property> 7 <property> 8 <!--NameNode元数据的存储位置,在node1节点的/data/nn 目录下--> 9 <name>dfs.namenode.name.dir</name> 10 <value>/data/nn</value> 11 </property> 12 <property> 13 <!--NameNode允许哪几个节点的DataNode连接,即允许加入集群--> 14 <name>dfs.namenode.hosts</name> 15 <value>node1,node2,node3</value> 16 </property> 17 <property> 18 <!--hdfs默认块大小,默认256MB--> 19 <name>dfs.blocksize</name> 20 <value>268435456</value> 21 </property> 22 <property> 23 <!--namenode处理的并发数线程数,默认100--> 24 <name>dfs.namenode.handler.count</name> 25 <value>100</value> 26 </property> 27 <property> 28 <!--从节点DataNode的数据目录存储目录,即数据存放在各个node的位置--> 29 <name>dfs.datanode.data.dir</name> 30 <value>/data/dn</value> 31 </property> 32 <property> 33 <name></name> 34 <value></value> 35 </property> 36</configuration> 总之,namenode数据存放在node1的/data/nn,datanode数据存放在node1,node2,node3的/data/dn。 然后,我们将配置好的Hadoop程序从node1复制到node2,node3。 1# 从node1 scp复制 2cd /export/server 3scp -r hadoop-3.4.1 node2:/export/server/ 4scp -r hadoop-3.4.1 node3:/export/server/ 5 6# node2,node3上同样创建软链接 7ln -s /export/server/hadoop-3.4.1 /export/server/hadoop 复制完成之后,我们在3个节点上都添加Hadoop环境变量 1vim /etc/profile 2 3# 在/etc/profile文末添加如下内容 4export HADOOP_HOME=/export/server/hadoop 5export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin 6 7# 使环境变量生效 8source /etc/profile 接下来,我们依据配置文件创建文件夹并更改拥有者。 1# node1 2mkdir -p /data/nn 3mkdir /data/dn 4chown -R hadoop:hadoop /data 5chown -R hadoop:hadoop /export 6 7# node2, node3 8mkdir -p /data/dn 9chown -R hadoop:hadoop /data 10chown -R hadoop:hadoop /export 接下来,我们都可以用普通用户hadoop来启动整个Hadoop服务。 Hadoop HDFS初始化 我们开始使用HDFS时,首先要对整个文件系统执行初始化(格式化)。注:我们现在以hadoop用户来执行了命令。 1# 确保以hadoop用户执行 2su - hadoop 3# 格式化namenode 4hadoop namenode -format 5 6# 格式化成功后,/data/nn中会有一些文件 7cd /data/nn && ls 8current 9ls current/ 10fsimage_0000000000000000000 fsimage_0000000000000000000.md5 seen_txid VERSION 格式化之后我们可以采用快捷脚本一键启动/关闭集群 1# 启动 2[hadoop@node1 nn]$ start-dfs.sh 3Starting namenodes on [node1] 4Starting datanodes 5node3: WARNING: /export/server/hadoop/logs does not exist. Creating. 6node2: WARNING: /export/server/hadoop/logs does not exist. Creating. 7Starting secondary namenodes [node1] 8 9# 通过jps查看目前运行的java进程 10[hadoop@node1 nn]$ jps 1120101 DataNode 1219946 NameNode 1320394 SecondaryNameNode 1420524 Jps 15 16# 一键启动脚本,还会自动启用其他DataNode,查看node2,node3的进程: 17[hadoop@node2 ~]$ jps 1817296 Jps 1917177 DataNode 20 21[hadoop@node3 ~]$ jps 2217207 DataNode 2317307 Jps 24 25 26# 停止 27[hadoop@node1 nn]$ stop-dfs.sh 启动完成之后,Hadoop在NameNode所在的服务器上,提供了一个网站服务器,默认启动在9870端口。如果能打开网站,并且其中信息大概没错,HDFS的集群部署就大概完成了。 保存状态 虚拟机快照,防止误操作。具体步骤: 1# 关闭hadoop集群 2[hadoop@node1 nn]$ stop-dfs.sh 3Stopping namenodes on [node1] 4Stopping datanodes 5Stopping secondary namenodes [node1] 6[hadoop@node1 nn]$ jps 721701 Jps 8 9# 关闭虚拟机 10su - root 11shutdown -h now 12 13# 虚拟机操作拍摄快照 拍摄好快照后,我们的虚拟机快照状态如下: 总结 上传、解压到/export/server,配置软链接 修改4份配置文件:workers,hadoop-env.sh,core-site.xml,hdfs-site.xml 分发的node2,node3,并设置环境变量 创建数据目录,并修改文件权限归属hadoop账户 启动,并查看Web UI 附下图问题省流自查。