Handoop

Handoop教程

3.0中有hdfs、yarn、mapreduce三部分,合为hadoop。

介绍

现状分析(现在)、实时分析(流式处理,秒级别、毫秒级别)

原因分析(过去)、离线分析(批处理)

预测分析(机器学习)

数据分析的基本步骤:(采集、处理、分析、应用)

明确分析目的和思路(分析框架体系化)

数据收集

数据(预)处理(变成干净规整的结构化数据)

数据分析

数据展现

报告撰写

大数据5V特征:

Volume,数据体量大

Variety,种类、来源多样化

Value,低价值密度

Velocity,速度快

Veracity,数据的质量

分布式:多台机器,每台机器上部署不同组件。

集群:多台机器,每台机器部署相同组件。

Screenshot2022-11-29at20.47.43

环境

安装,部署,配置文件,format初始化

手动启停命令

Screenshot2023-02-13at21.39.08

Screenshot2023-02-13at21.39.28

jps查看进程是否启动成功,因为hadoop是用java写的。

hadoop启动日志路径:/export/server/hadoop-3.3.0/logs,注意前面的是安装路径。

hdfs集群

访问地址:http://namenode_host:9870

其中namenode_host是namenode运行机器的主机名或者ip。

yarn集群

访问地址:http://namenode_host:8088

里面可以有hadoop,spark,flink等等。

hdfs命令

1
2
hadoop fs -mkdir -p /wordcount/input
hadoop fs -put hello.txt /wordcount/input

yarn+mapreduce

程序先找resourcemanager(yearn,资源),然后两个阶段,先map阶段再reduce阶段。

1
2
cd /export/server/hadoop-3.3.0/share/hadoop/mapreduce/   #安装包下的share文件夹下面会有一些mapreduce示例
hadoop jar hadoop-mapreduce-examples-3.3.0.jar wordcount /wordcount/input /wordcount/input

三个问题:

1、执行mapreduce的时候,为什么现请求yarn

2、mapreduce看上去好像是两个阶段?先map,再reduce?

3、处理小数据的时候,mapreduce速度快吗?

HDFS分布式文件系统基础知识

分布式体现在哪里呢?

文件系统:存储,组织数据,实现了数据的存储、分级组织、访问、获取等操作。用户只需要关注逻辑,不用去管物理层面。

传统的文件系统,基本上是指单机的文件系统,底层不会横跨多台机器。

数据

存储的内容本身,比如文件图片等。数据底层最终存储在磁盘等存储介质上,一般用户无需关心,只需要给予目录树进行增删改啥,针对数据的操作由文件系统完成。

元数据

元数据又称之为解释性数据,记录数据的数据;

文件大小、最后修改时间、底层存储位置、属性、所属用户、权限等信息。

传统的文件系统,在海量数据下,有哪些挑战?

数据量大,单机纵向扩展,存储不下。 所以使用多机横向扩展。

成本高、后期维护、升级扩容成本高。

无法支撑高效率的计算分析。传统的存储是存储,计算是计算,当需要处理数据的时候,把数据移动过来程序和数据存储属于不同的技术厂商实现,无法有机统一整合在一起

性能低,单一节点I/O性能瓶颈无法逾越,难以支撑海量数据的高并发高吞吐两场景。

可扩展性差,无法实现快速部署和弹性扩展,动态扩容、缩容成本高,技术实现难度大。

分布式存储系统核心属性

  • 分布式存储。数据量大,单机纵向扩展,存储不下。 所以使用多机横向扩展。
  • 元数据记录。文件分布在不同机器上不利于寻找,所以元数据记录下文件及其存储位置信息(文件名、大小、存储机器IP),快速定位文件位置。
  • 分块存储。文件过大导致单机存储不下,上传下载效率低。所以文件分块存储在不同机器,针对块并行操作提高效率。
  • 副本机制。硬件故障难以避免,数据容易丢失。所以不同机器之间设置备份,冗余存储,保障数据安全。

HDFS(Hadoop DIstributed FIle System)简介

Hadoop是Apache Hadoop核心组件之一,作为大数据生态圈最底层的分布式存储服务而存在,也可以说大数据首先要解决的问题就是海量数据的存储问题。

HDFS使用多台计算机存储文件,并且提供统一的访问接口

Screenshot2023-02-13at22.26.24

HDFS重要特性

Screenshot2023-02-14at22.14.46

1、主从架构:一个Namenode,五个从结构datanode。这五个从角色位于两个机架,rack指的是机架,绿色的指块,这六个会有抽象统一的目录树结构。

2、分块存储:物理上分块存储,默认大小是128M,不足128M就是一块。块的大小配置参数决定,参数位于hdfs-default.xml中:dfs.blocksize。

3、副本机制:由参数dfs.replication控制,默认值是3,就是额外复制2份,连同本身总共3份副本。

4、元数据管理(Namenode管理):两种类型,1、文件自身属性信息:文件名称、权限、修改时间、文件大小、复制因子、数据块大小。2、文件块位置映射信息:记录文件块和DateNode之间的映射信息,即哪个块位于哪个节点上。

5、抽象统一的目录树结构(namespace):支持传统的层次性文件组织结构。用户只需要在客户端上面通过统一的抽象目录树进行管理。

6、数据块存储:文件的各个block具体存储管理由DataNode节点承担。每一个block都可以在多个DataNode上存储。

HDFS Shell CLI命令行使用

hadoop fs [generic options]

HDFS Shell CLI 支持操作多种文件系统,包括你本地文件系统(file:///)、分布式文件系统(hdfs://nn:8020)

具体操作什么文件系统取决于命令中文件路径URL的前缀协议

如果没有置顶前缀,将会读取环境变量中的fs.defaultFS属性

1
cat /export/server/hadoop-3.3.0/etc/hadoop/core-site.xml
1
2
3
4
5
6
7
8
hadoop dfs
hdfs dfs

hadoop fs -help

hadoop fs -ls file:/// # 查看的事本地文件系统的根目录下
hadoop fs -ls hdfs://node1:8020/
hadoop fs -ls / # 如果没有置顶前缀,将会读取环境变量中的fs.defaultFS属性

常用操作

1
2
3
4
5
6
7
8
9
10
11
hadoop fs -mkdir [-p] [<path> ...]   # 递归创建
hadoop fs -ls [-h] [-R] [<path> ...] # -R 递归查看 -h 人性化显示文件size
hadoop fs -put [-f] [-p] <localsrc> ... <dst> # -f 覆盖目标文件 -p 保留访问和修改时间,所有权和权限
hadoop fs -cat <src>
hadoop fs -tail <src> # 大文件
hadoop fs -get [-f] [-p] <src> ... <localsrc>
hadoop fs -cp [-f] <src> ... <dst>
# 可以用来削文件合并
# 将当前的多个文件追加到根目录文件中,如果<localsrc>为-,则输入从标准输入中读取
hadoop fs -appendToFile <localsrc> ... <dst>
hadoop fs -mv <src> ... <dst>

角色

主角色:NameNode

Hadoop分布式文件系统的核心,架构中的主角色。

维护和管理文件系统元数据,包括名称空间目录树结构、文件和块的位置信息、访问权限等信息。

NameNode成为了访问HDFS的唯一入口。

namenode内部通过 内存 和 磁盘文件 两种方式管理元数据,定时合并持久化等等。

其中磁盘上的元数据文件包括Fsimage内存元数据镜像文件和edits log(Journal)编辑日志。

Screenshot2023-02-21at21.27.34

从角色:DataNode

HDFS中的从角色,负责具体的数据块存储。

DataNode的数量决定了HDFS集群的的整体数据存储呢你。通过和NameNode配合维护着数据块。

Screenshot2023-02-21at21.30.05

主角色辅助角色:SecondaryNameNode

充当NameNode的辅助节点,当不能替代NameNode。

主要帮助主角色进行元数据文件的合并动作,可以通俗的理解为主角色的”秘书“。

写数据完整流程(上传)

Pipeline管道。

HDFS在上传文件写数据过程中采用的一种数据传输方式。

客户端将数据块写入第一个数据节点,第一个数据节点保存数据之后再将块复制到第二个数据节点,后者保存后将其复制到第三个数据节点。(使用pipeline线性传输,而不是拓扑式传输,能够充分利用每个机器的带宽,避免网络瓶颈和高延迟时的连接,最小化推送所有数据的延时。)

在线性推送模式下,每台机器所有的出口宽带都用于以最快的速度传输数据,而不是在多个接受者之间分配宽带。

ACK应答响应

在HDFS pipeline管道传输数据的过程中,传输的反方向会进行ACK校验,确保数据传输安全。

Screenshot2023-02-21at21.39.18

默认3副本存储策略

默认副本存储策略是由BlockPlacementPolicyDefault指定。

第一块副本:优先客户端本地,否则就近随机。

第二块副本:不同于第一块副本的不同机架。

第三块副本:第二块副本相同机架不同机器。

整个上传流程

Screenshot2023-02-21at21.47.56

Screenshot2023-02-21at21.46.36

Screenshot2023-02-21at21.46.53

就是一股股水流流动,达到64k一股水流流动,默认三副本存储

Screenshot2023-02-21at21.47.18

Hadoop MapReduce

分而治之思想、设计构思、官方示例、执行流程

Hadoop YARN

介绍、架构组件、程序提交交互流程、调度器

MapReduce思想

先分再和,分而治之。

把一个复杂的问题,按照一定的分解方法,分为等价的规模较小的若干部分,然后逐个解决,分别找出各个部分的结果,然后把各个部分的结果组成整个问题的最终结果。

Map表示第一阶段,拆分。拆分为若干个“简单子任务”来并行处理,可以拆分的前提是这些小任务可以并行计算,彼此之间没有依赖关系。

Reduce表示第二阶段,合并。挤兑map阶段的结果进行全局汇总。

这两个阶段合起来正是MapReduce思想的体现。

Author: Jcwang

Permalink: http://example.com/2022/11/29/handoop/