大数据学习笔记11-Hadoop基础2

一: 分布式的基础架构分析[重要]

集群架构模式:

主从架构(中心化):

  • 主角色 master: 发号施令,负责任务的接受和分配

  • 从角色 slave: 负责干活

主备架构:可以解决中心化存在的问题

  • 主角色active : 正常工作

  • 备角色standby : 观察主角色工作,并实时备份主角色数据,当主角色宕机后,立即上位.

去中心化模式 : 例如区块链

hadoop中的HDFS集群和Yarn集群都是主从模式架构.

二、HDFS的基础架构[重要]

HDFS的角色分配:

**NameNode:**是集群中的主角色或主节点,负责 DataNode的管理工作

**DataNode:**是集群中的从角色或从节点, 负责数据文件的读或写

SecondaryNameNode: 是集群中的辅助角色或辅助节点,负责帮助NameNode完成管理工作(负责元数据的合并工作).


NN在开发中只有一个主服务,容易出现单点故障,在主从架构中,一旦主服务不可用,整个服务都不可用

使用主备方式解决单点故障

运行多个NN,但是对外处理请求的只有一个

一般公司选择是一主一备方案


一个典型的HDFS集群中会有多个DataNode,但是活跃的NameNode只能有一个,如果集群资源不足,则需要扩展DataNode节点数量.如果元数据管理能力不足,则需要给namenode提升服务器性能.

HDFS是一个标准的主从架构

注意: 通常情况下, NameNode的服务器性能,要比DataNode高.(cpu和内存大)

三、HDFS集群环境部署[了解]

前期准备:

  1. 有三台服务器

  2. 验证服务器的网络畅通

  3. 可以进行ssh免密登录

  4. 关闭防火墙及selinux

  5. 安装jdk

  6. 时间同步

下载hadoop安装包:

Apache Hadoop

Index of /dist/hadoop/common

官网下载的hadoop安装包不能直接使用,需要进行编译后才可以使用

但是我们自己下载编译的安装包会出现警告

由于官网给我们的是最大化编译,在linux windows 和 mac平台中都能够运行,但是在linux运行时,与windows和mac相关的代码会报警告,在windows 和mac运行时一样

为了解决警告问题我们对于安装包一般会从新编辑后再编译

我们已经给大家编译好了对应的安装包,直接使用即可.

集群规划

在公司中由大数据运维人员进行大数据环境安装

1-申请服务器 说明cpu核心数 内存大小,磁盘大小 服务器数量

2-编写部署文档,规划服务运行形式

3-文档审核后就开始部署服务器
node1: cpu 2*1 内存 4G 60G

node2: cpu 1*1 内存 2G 60G

node3: cpu 1*1 内存 2G 60G

通过分析可知, node1服务器性能最好,可以作为主服务使用,将我们的主角色部署在node1上

但是,NameNode和SecondaryNameNode都是服务器内存消耗的大户,且SNN会将NN的元数据进行获取合并,所以建议放置在两台不同的服务上

最优方案是每个服务一台服务器

角色分配

node1: NameNode DataNode

node2: DataNode SecondaryNameNode

node3: DataNode


node4 : DataNode

node5 : DataNode

.....

hadoop用户创建,并配置免密登录

此处我们使用root用户权限进行环境部署,但是在企业开发中,会创建一个普通用户用户环境部署,而root用户负责将部署时需要的权限分配给普通用户

  1. 将hadoop安装包上传到/export/software目录下

  2. 将该安装包进行解压

复制代码
cd /export/software
tar -zxvf hadoop-3.3.0-Centos7-64-with-snappy.tar.gz -C ../server
  1. 创建一个软连接
复制代码
cd /export/server
ln -s hadoop-3.3.0/ hadoop
  1. 修改配置文件

先进入配置文件的文件目录

复制代码
cd /export/server/hadoop/etc/hadoop/
复制代码
workers:            配置从节点(DataNode)有哪些
hadoop-env.sh:      配置Hadoop的相关环境变量
core-site.xml:      Hadoop核心配置文件
hdfs-site.xml:      HDFS核心配置文件
yarn-site.xml:      yarn核心配置文件
mapred-site.xml:    mapreduce核心配置文件

打开workers文件(配置参会该集群工作的服务器有哪些)

复制代码
vim workers
​
# 将内部文件修改为如下内容
node1
node2
node3

打开hadoop-env.sh文件,配置hadoop的基础环境变量

复制代码
vim hadoop-env.sh
​
# 在文件末尾添加如下内容
export JAVA_HOME=/export/server/jdk  # java安装目录
export HADOOP_HOME=/export/server/hadoop  # hadoop安装目录
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop  # hadoop配置文件目录
export HADOOP_LOG_DIR=$HADOOP_HOME/logs # hadoop日志文件目录
​
#文件最后添加
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root

打开core-site.xml文件,配置hadoop的一些基础服务配置信息

xml文件时以成对标签的形式进行kv结构的修饰

标签内部的名称就是key值,两个标签中间的数据就是value

复制代码
vim core-site.xml
​
# 在文件末尾添加如下内容
​
# 在文件内部填入如下内容
​
<property>
<name>fs.defaultFS</name>
<value>hdfs://node1:8020</value>
</property>
​
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
​
# 注意要卸载configuration的标签内部,多余的标签要删掉

打开hdfs-site.xml文件,配置hdfs的相关服务信息

复制代码
# 在文件内部填入如下内容
<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>node1,node2,node3</value>
</property>
<property>
<name>dfs.blocksize</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>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>node2:9868</value>
</property>

准备数据存储目录

复制代码
# 进入root权限,创建目录
# node1
mkdir -p /data/nn
mkdir /data/dn
​
# node2, node3
mkdir -p /data/dn
​

将hadoop目录复制到node2和node3中

复制代码
scp -r /export/server/hadoop node2:/export/server
scp -r /export/server/hadoop node3:/export/server

配置环境变量

复制代码
export HADOOP_HOME=/export/server/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

注意:使用source /etc/profile进行激活

初始化NameNode

由于我们的NameNode在node1上,所以只在node1上执行该代码即可

可以理解为我们要存储元数据,先要构建一个元数据的结构文件,后续将数据不断的在该文件中增删改查.

复制代码
hadoop namenode -format

启动服务

复制代码
# 一键启动hdfs集群
start-dfs.sh
# 一键关闭hdfs集群
stop-dfs.sh
​
# 如果遇到命令未找到的错误,表明环境变量未配置好,可以以绝对路径执行
/export/server/hadoop/sbin/start-dfs.sh
/export/server/hadoop/sbin/stop-dfs.sh

警告不用在意,是告诉我们该目录之前没有,现在需要创建

服务启动后,可以使用jps查看服务进程

如果出现服务启动问题去日志文件中找答案

  1. cd到logs目录中
复制代码
cd /export/server/hadoop/logs
  1. 找到故障服务的.log文件
  1. 使用grep进行筛选
复制代码
# 通常我们筛选的都是error或者warning, 如果是info证明没有异常
cat hadoop-hadoop-datanode-node1.log | grep WARN

四、HDFS的服务启停[重要]

对整个hadoop服务的启动和关闭

会将hadoop中的hdfs,yarn服务都会启动

复制代码
start-all.sh
​
stop-all.sh
一键启停hdfs集群

下方指令是针对于整个hdfs的启停.在node1中执行该命令, node2, node3中的服务都会被启动. 前提是免密登录

复制代码
# 一键启动
start-dfs.sh 
# 一键停止
stop-dfs.sh
单起单停
复制代码
# 只能控制当前服务器中服务的启停
hdfs --daemon start|stop|status namenode|datanode|secondarynamenode

注意: 在开发中,一般我们的服务不会频繁启停,如果服务出现故障进行单起单停,否则影响面太广.

使用jps执行查看服务是否启动

使用浏览器访问服务,验证服务器是否启动
namenode所在服务器的ip地址:9870

192.168.88.100:9870

五、HDFS的Shell操作(了解)

hdfs的完整路径:

复制代码
hdfs://node1:8020/root/test

hdfs的文件结构和linux中基本一致 : 树状结构

hdfs中也划分目录和文件,目录只能存储子目录和文件, 文件只能存储数据

文件和数据的区别???

文件是用来存储数据的,磁盘中数据以文件的形式存储起来,方便后续查找使用,数据不一定以文件的形式展示.

hdfs的shell命令格式:

复制代码
# 新写法
hdfs dfs -命令 [-选项] [参数]
# 老写法
hadoop fs -命令 [-选项] [参数]

注意: 在hdfs dfs - 之后或hadoop fs -之后和linux终端指令基本没有区别

hadoop中的shell命令

复制代码
Usage: hadoop fs [generic options]
        [-appendToFile <localsrc> ... <dst>]
        [-cat [-ignoreCrc] <src> ...]
        [-checksum [-v] <src> ...]
        [-chgrp [-R] GROUP PATH...]
        [-chmod [-R] <MODE[,MODE]... | OCTALMODE> PATH...]
        [-chown [-R] [OWNER][:[GROUP]] PATH...]
        [-concat <target path> <src path> <src path> ...]
        [-copyFromLocal [-f] [-p] [-l] [-d] [-t <thread count>] [-q <thread pool queue size>] <localsrc> ... <dst>]
        [-copyToLocal [-f] [-p] [-crc] [-ignoreCrc] [-t <thread count>] [-q <thread pool queue size>] <src> ... <localdst>]
        [-count [-q] [-h] [-v] [-t [<storage type>]] [-u] [-x] [-e] [-s] <path> ...]
        [-cp [-f] [-p | -p[topax]] [-d] [-t <thread count>] [-q <thread pool queue size>] <src> ... <dst>]
        [-createSnapshot <snapshotDir> [<snapshotName>]]
        [-deleteSnapshot <snapshotDir> <snapshotName>]
        [-df [-h] [<path> ...]]
        [-du [-s] [-h] [-v] [-x] <path> ...]
        [-expunge [-immediate] [-fs <path>]]
        [-find <path> ... <expression> ...]
        [-get [-f] [-p] [-crc] [-ignoreCrc] [-t <thread count>] [-q <thread pool queue size>] <src> ... <localdst>]
        [-getfacl [-R] <path>]
        [-getfattr [-R] {-n name | -d} [-e en] <path>]
        [-getmerge [-nl] [-skip-empty-file] <src> <localdst>]
        [-head <file>]
        [-help [cmd ...]]
        [-ls [-C] [-d] [-h] [-q] [-R] [-t] [-S] [-r] [-u] [-e] [<path> ...]]
        [-mkdir [-p] <path> ...]
        [-moveFromLocal [-f] [-p] [-l] [-d] <localsrc> ... <dst>]
        [-moveToLocal <src> <localdst>]
        [-mv <src> ... <dst>]
        [-put [-f] [-p] [-l] [-d] [-t <thread count>] [-q <thread pool queue size>] <localsrc> ... <dst>]
        [-renameSnapshot <snapshotDir> <oldName> <newName>]
        [-rm [-f] [-r|-R] [-skipTrash] [-safely] <src> ...]
        [-rmdir [--ignore-fail-on-non-empty] <dir> ...]
        [-setfacl [-R] [{-b|-k} {-m|-x <acl_spec>} <path>]|[--set <acl_spec> <path>]]
        [-setfattr {-n name [-v value] | -x name} <path>]
        [-setrep [-R] [-w] <rep> <path> ...]
        [-stat [format] <path> ...]
        [-tail [-f] [-s <sleep interval>] <file>]
        [-test -[defswrz] <path>]
        [-text [-ignoreCrc] <src> ...]
        [-touch [-a] [-m] [-t TIMESTAMP (yyyyMMdd:HHmmss) ] [-c] <path> ...]
        [-touchz <path> ...]
        [-truncate [-w] <length> <path> ...]
        [-usage [cmd ...]]
​
Generic options supported are:
-conf <configuration file>        specify an application configuration file
-D <property=value>               define a value for a given property
-fs <file:///|hdfs://namenode:port> specify default filesystem URL to use, overrides 'fs.defaultFS' property from configurations.
-jt <local|resourcemanager:port>  specify a ResourceManager
-files <file1,...>                specify a comma-separated list of files to be copied to the map reduce cluster
-libjars <jar1,...>               specify a comma-separated list of jar files to be included in the classpath
-archives <archive1,...>          specify a comma-separated list of archives to be unarchived on the compute machines
​
The general command line syntax is:
command [genericOptions] [commandOptions]
​

注意: 与linux中使用方法基本相同的指令我们不过多讲解

例如:ls mkdir touch.....

ls指令查看hdfs中的文件目录信息
复制代码
hdfs dfs -ls 路径    路径要从根路径指定
​
hadoop fs -ls 路径
hdfs的文件目录操作
复制代码
hdfs dfs -mkdir /路径
​
hdfs dfs -touch  /路径/文件
​
hdfs dfs -mv  原始路径  目标路径
​
hdfs dfs -cp  原始路径  目标路径
​
hdfs dfs -rm -r  /路径
文件的上传和下载

put指令: 从linux 服务器本地上传到hdfs文件系统中

hdfs dfs -put 本地文件路径(写绝对路径) hdfs的路径

复制代码
hdfs dfs -put /var/log/messages  /

get命令: 从hdfs文件系统将文件下载到linux文件系统中

hdfs dfs -get hdfs的文件路径 本地文件路径

复制代码
hdfs dfs -get /sparklog/local-1664869425770.lz4  /root

注意: 在hdfs中使用任何文件或目录,要使用绝对路径进行查找,在hdfs中 没有工作目录的概念,更没有相对路径的概念.

练习
复制代码
在hdfs中创建文件夹:/itcast/itheima,如存在请删除
hdfs dfs -ls /
hdfs dfs -mkdir -p /itcast/itheima
​
​
上传/etc/hosts文件到hdfs的/itcast/itheima内
hdfs dfs -put /etc/hosts /itcast/itheima
​
查看hdfs中刚刚上传的文件内容
hdfs dfs -put /etc/hosts /itcast/itheima
​
向hdfs中上传的文件追加:itheima到最后一行
echo itheima > a.txt
hdfs dfs -appendToFile /root/a.txt /itcast/itheima/hosts
​
下载hdfs中上传的文件到本地任意目录
 hdfs dfs -get /itcast/itheima/hosts /root
 
在hdfs中创建文件夹:/itcast/bigdata,将/itcast/itheima/hosts文件复制到/itcast/bigdata内
hdfs dfs -mkdir /itcast/bigdata
hdfs dfs -cp /itcast/itheima/hosts /itcast/bigdata
​
在hdfs中将/itcast/itheima/hosts文件重命名为/itcast/itheima/myhost
hdfs dfs -mv /itcast/itheima/hosts /itcast/itheima/myhosts
​
在hdfs中删除/itcast文件夹
hdfs dfs -rm -r /itcast

六、HDFS webUI的使用(掌握)

我们可以使用node1:9870打开hdfs的网页端,但是前提是必须配置windows系统下的主机映射,否则只能使用ip访问

192.168.88.100:9870

打开C:\Windows\System32\drivers\etc\hosts文件

在下方写入主机映射内容

复制代码
192.168.88.100 node1 node1.itcast.cn
192.168.88.101 node2 node2.itcast.cn
192.168.88.102 node3 node3.itcast.cn

MAC电脑,使用mac电脑终端打开

复制代码
sudo vim /etc/hosts

1-查看datanode状态
2-文件系统操作
数据存储说明

相关推荐
胡耀超15 分钟前
附1:深度解读:《金融数据安全 数据安全分级指南》——数据分类的艺术专栏系列
大数据·金融·数据治理·生命周期·数据分类·政策法规
合新通信 | 让光不负所托18 分钟前
【合新通信】浸没式液冷光模块与冷媒兼容性测试技术报告
大数据·网络·光纤通信
晓数29 分钟前
【硬核干货】JetBrains AI Assistant 干货笔记
人工智能·笔记·jetbrains·ai assistant
元63340 分钟前
spark和hadoop之间的对比和联系
大数据·hadoop·spark
我的golang之路果然有问题1 小时前
速成GO访问sql,个人笔记
经验分享·笔记·后端·sql·golang·go·database
genggeng不会代码1 小时前
用于协同显著目标检测的小组协作学习 2021 GCoNet(总结)
学习
lwewan1 小时前
26考研——存储系统(3)
c语言·笔记·考研
cooldream20091 小时前
深入解析大数据的Lambda架构:设计、特点与应用场景
大数据·架构·系统架构师
搞机小能手1 小时前
六个能够白嫖学习资料的网站
笔记·学习·分类
淋一遍下雨天2 小时前
Spark-Streaming核心编程
大数据·kafka