HDFS重温

今天被问到分布式,有些忘记,查资料回忆起分布式集群构建,现在重温集群搭建过程

费话不多说,来个简图

NameNode:HDFS群集包含单个NameNode(主服务器),它管理文件系统命名空间并控制客户端对文件的访问权限。它维护和管理文件系统元数据;例如由哪些块构成文件,以及存储这些块的数据节点。

DataNode可以有多个DataNode,通常是集群中每个节点有一个DataNode,它负责管理着运行节点的存储访问。HDFS中的DataNode存储实际数据,可以添加更多的DataNode来增加可用空间。

备用NameNode :备用NameNode服务并非真正的备用NameNode,尽管名称是称为备用NameNode。具体来说,它并不为NameNode提供高可用性(HA)。

一、环境信息

角色主机名(FQDN)IP

NameNode、ResourceManagernamenode.chengdumap.cn172.24.134.24

DataNode、NodeManagerdatanode1.chengdumap.cn172.24.134.27

DataNode、NodeManagerdatanode2.chengdumap.cn172.24.134.29

DataNode、NodeManagerdatanode3.chengdumap.cn172.24.134.30

操作系统:CentOS 7.6

Hadoop版本:hadoop-2.9.2

二、环境准备

以下只在其中一台机器上操作,另外三台不作演示

分别修改4台机器的主机名

[root@namenode ]#hostnamectlset-hostnamenamenode.chengdumap.cn

分别关闭4台机器的防火墙和SELinux

[root@namenode ]# systemctl stop firewalld.service[root@namenode ]# systemctl disable firewalld.service[root@namenode ]# setenforce 0[root@namenode ]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

分别配置4台机器的hosts,配置好如下

[root@namenode]# cat /etc/hosts127.0.0.1localhostlocalhost.localdomainlocalhost4localhost4.localdomain4::1localhostlocalhost.localdomainlocalhost6localhost6.localdomain6172.24.134.24namenode.chengdumap.cn172.24.134.27datanode1.chengdumap.cn172.24.134.29datanode2.chengdumap.cn172.24.134.30datanode3.chengdumap.cn

卸载系统自带JDK

[root@namenode ]# rpm -qa |grep jdk[root@namenode ]# rpm -e --nodeps $包名

安装jdk8

[root@namenode ]# rpm -ivh jdk-8u251-linux-x64.rpm[root@namenode ]# rpm -qa |grep -i jdk[root@namenode hadoop]#  java -versionjava version"1.8.0_251"Java(TM) SE Runtime Environment (build 1.8.0_251-b08)Java HotSpot(TM)64-Bit Server VM (build 25.251-b08, mixed mode)[root@namenode ]#

创建hadoop用户,并赋权

[root@namenode ]# useradd agsdoop[root@namenode ]# echo "system" |passwd --stdin agsdoop[root@namenode ]# chown -R agsdoop:agsdoop /data

打通agsdoop用户的ssh通道

四台机器均执行下面操作,如果使用root来操作hdfs,则打通root通道即可

[root@namenode ]# su - agsdoop[agsdoop@namenode ~]$ ssh-keygen -t rsa -P''-f ~/.ssh/id_rsa[agsdoop@namenode ~]$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys[agsdoop@namenode ~]$ chmod0600~/.ssh/authorized_keys

四台机器都操作一下,把公钥拷贝到其他机器上,如果没有ssh-copy-id命令,可以手动将id_rsa.pub文件写到对方~/.ssh/authorized_keys文件里

[agsdoop@namenode ~]$ ssh-copy-id -i ~/.ssh/id_rsa.pub namenode.chengdumap.cn[agsdoop@namenode ~]$ ssh-copy-id -i ~/.ssh/id_rsa.pub datanode1.chengdumap.cn[agsdoop@namenode ~]$ ssh-copy-id -i ~/.ssh/id_rsa.pub datanode2.chengdumap.cn[agsdoop@namenode ~]$ ssh-copy-id -i ~/.ssh/id_rsa.pub datanode3.chengdumap.cn

四台机器分别测试配置成功

[agsdoop@namenode~]$sshdatanode1.chengdumap.cnLast login:MonJun117:51:472020 fromnamenode

创建逻辑卷,挂载到/data目录

过程省略

三、HDFS安装

本章以下步骤,如无特别说明,都只需要在NameNode节点上进行

上传软件包,解压

[root@namenode ~]# tar -zxvf /software/hadoop-2.9.2.tar.gz -C /data/

配置hadoop环境变量

此步骤在四台机器上都要做,末尾增加如下三行:

[root@namenode ~]# vim /etc/profile# hadoopexportHADOOP_HOME=/data/hadoop-2.9.2exportPATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:

测试环境变量是否生效

[agsdoop@namenode ~]$ hadoop versionHadoop 2.9.2Subversion https://git-wip-us.apache.org/repos/asf/hadoop.git -r 826afbeae31ca687bc2f8471dc841b66ed2c6704Compiled by ajisaka on 2018-11-13T12:42ZCompiledwithprotoc2.5.0Fromsourcewithchecksum3a9939967262218aa556c684d107985This command was runusing/data/hadoop-2.9.2/share/hadoop/common/hadoop-common-2.9.2.jar

创建数据存储目录

此步骤在四台机器上都要做

NameNode 数据存放目录: /data/hdfs/namenode

SecondaryNameNode 数据存放目录: /data/hdfs/secondary

DataNode 数据存放目录: /data/hdfs/datanode

临时数据存放目录: /data/hdfs/tmp

[agsdoop@namenode ~]$ mkdir -p /data/hdfs/namenode[agsdoop@namenode ~]$ mkdir -p /data/hdfs/secondary[agsdoop@namenode ~]$ mkdir -p /data/hdfs/datanode[agsdoop@namenode ~]$ mkdir -p /data/hdfs/tmp

修改配置文件

配置文件存放在/data/hadoop-2.9.2/etc/hadoop

需要修改hadoop-env.sh、core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml、slaves这6个配置文件

如下:

hadoop-env.sh

新增如下:

exportJAVA_HOME=/usr/java/jdk1.8.0_251-amd64exportHADOOP_CONF_DIR=/data/hadoop-2.9.2/etc/hadoopexportHDFS_NAMENODE_USER="agsdoop"exportHDFS_DATANODE_USER="agsdoop"exportHDFS_SECONDARYNAMENODE_USER="agsdoop"exportYARN_RESOURCEMANAGER_USER="agsdoop"exportYARN_NODEMANAGER_USER="agsdoop"

core-site.xml

fs.default.namehdfs://172.24.134.24:9000指定默认的访问地址以及端口号hadoop.tmp.dir/data/hdfs/tmp/其它临时目录的父目录,会被其它临时目录用到io.file.buffer.size131072在序列中使用的缓冲区大小

hdfs-site.xml

dfs.replication3副本数,HDFS存储时的备份数量dfs.namenode.name.dir/data/hdfs/tmpnamenode临时文件所存放的目录dfs.datanode.data.dir/data/hdfs/tmpdatanode临时文件所存放的目录dfs.namenode.http-address172.24.134.24:50070hdfs web 地址

yarn-site.xml

需要配置的是数据获取方式, master 地址,(配置yarn 外部可访问),关闭内存检测(虚拟机需要),容器可能会覆盖的环境变量。

yarn.nodemanager.aux-servicesmapreduce_shufflenomenodeManager获取数据的方式是shuffleyarn.resourcemanager.hostname172.24.134.24指定Yarn的老大(ResourceManager)的地址yarn.resourcemanager.webapp.address172.24.134.24:8088配置 yarn 外部可访问,(外网IP:端口)yarn.nodemanager.vmem-check-enabledfalse关闭内存检测,虚拟机需要,不配会报错

mapred-site.xml

先从模板复制出来

[agsdoop@namenode ~]$ cp mapred-site.xml.template mapred-site.xml[agsdoop@namenode ~]$ vim mapred-site.xmlmapreduce.framework.nameyarn告诉hadoop以后MR(Map/Reduce)运行在YARN上

slaves

配置DataNode节点的主机名

datanode1.chengdumap.cndatanode2.chengdumap.cndatanode3.chengdumap.cn

配置分发

这里我每个机子都装了相同的hadoop和路径,所以只要分发配置文件即可:

[agsdoop@namenode ~]$ rsync -avp /data/hadoop-2.9.2/etc/hadoop*172.24.134.27:/data/hadoop-2.9.2/etc/hadoop[agsdoop@namenode ~]$ rsync -avp /data/hadoop-2.9.2/etc/hadoop*172.24.134.29:/data/hadoop-2.9.2/etc/hadoop[agsdoop@namenode ~]$ rsync -avp /data/hadoop-2.9.2/etc/hadoop*172.24.134.30:/data/hadoop-2.9.2/etc/hadoop

对NameNode做格式化

[agsdoop@namenode ~]$ hdfs namenode -format

格式化成功之后会在/data/hdfs/tmp目录下多一个current文件夹

启动集群

# 一次性启动[agsdoop@namenode ~]$ start-all.sh# 逐个组件启动[agsdoop@namenode ~]$ start-dfs.sh[agsdoop@namenode ~]$ start-yarn.sh

访问

Hadoop:

Yarn:

测试上传与下载

[agsdoop@namenode ~]$ hadoop fs -mkdir -p /tmp/test

[agsdoop@namenode ~]$ hadoop fs -ls /tmp/test

[agsdoop@namenode ~]$ hadoop fs -put test_file /tmp/test

[agsdoop@namenode ~]$ hadoop fs -ls /tmp/test

[agsdoop@namenode ~]$ hadoop fs -get /tmp/test/test_file /tmp/

WilliamZheng©版权所有 转载请注明出处! 运维架构师群:833329925

你可能感兴趣的:(HDFS重温)