hadoop基础知识分享(一)

打印 上一主题 下一主题

主题 552|帖子 552|积分 1656

写在前面

今天学习hadoop部分的知识。
Hadoop 概述

Hadoop 是一个适合海量数据的分布式存储和分布式盘算的平台。Hadoop 的处理思想是“分而治之”。它劈头于 Google 的三篇文章:Google FS(GFS),MapReduce,BigTable。Hadoop 主要包罗三个核心组件:

  • HDFS(Hadoop Distributed File System):一个分布式存储框架,适合海量数据存储。
  • MapReduce:一个分布式盘算框架,适合海量数据盘算。
  • YARN(Yet Another Resource Negotiator):一个资源调度平台,负责给盘算框架分配盘算资源。
Hadoop 分布式搭建


  • 关闭防火墙并设置所有节点名称和干系映射。
  • 设置免密钥。
  • 上传 Hadoop 安装包并解压。
  • 配置环境变量。
  • 修改配置文件。
  • 同步文件。
  • 格式化并启动(仅第一次需要格式化)。
分布式存储

HDFS 主从结构

HDFS 具有主从架构。HDFS 集群由单个名称节点(NameNode)和许多数据节点(DataNode)组成:

  • NameNode:主节点,管理文件系统名称空间并控制客户端对文件的访问。
  • DataNode:从节点,管理现实的数据存储。
介绍

在分布式存储系统中,分散在差别节点中的数据大概属于同一个文件。为了组织浩繁的文件,可以将文件放到差别的文件夹中,文件夹可以一级一级地包罗。这种组织情势称为命名空间(namespace)。命名空间管理整个服务器集群中的所有文件。
主从结构


  • 主节点(NameNode):负责命名空间和文件的元数据管理。
  • 从节点(DataNode):负责存储现实的数据,数据以块(block)的情势进行存储。
用户操纵时,客户端首先与主节点交互,查询数据存储位置,然后从相应的从节点读取数据。主节点将整个命名空间信息保存在内存中,因此需要更多内存来处理更多的文件。
块(Block)


  • 块(Block):为了管理差别大小的文件,HDFS 将文件分成块(默认大小为128MB),每个块存储在差别的 DataNode 上。
  • 副本(Replication):为了数据的安全性,HDFS 会将数据块备份到多个节点上,减少数据丢失或访问失败的概率。
分布式盘算

YARN(Yet Another Resource Negotiator)

YARN 负责资源调度和管理,采用主从结构:

  • 主节点(ResourceManager):负责集群资源的分配与调度。
  • 从节点(NodeManager):负责单节点资源的管理(CPU 和内存)。
资源管理


  • ResourceManager:负责全局资源调度和管理。
  • NodeManager:管理节点资源,并执行容器中的任务。
Container


  • 定义:Container 是 YARN 中资源的抽象,封装了某个节点上一定量的资源(CPU 和内存)。
  • 作用:由 ApplicationMaster 向 ResourceManager 申请,并在 NodeManager 上运行。
MR(MapReduce)

MapReduce 是一个依赖磁盘 I/O 的批处理盘算模型,也具有主从结构:

  • 主节点(MRAppMaster):负责吸收客户端提交的盘算任务,并将任务分配给 NodeManager 的 Container 中执行。
  • 从节点(Task):详细的盘算任务。
Hadoop 下令

集群管理


  • 启动所有进程:
    1. start-all.sh
    复制代码
  • 停止所有进程:
    1. stop-all.sh
    复制代码
  • 启动 HDFS 和 YARN 干系进程:
    1. start-dfs.sh
    2. start-yarn.sh
    复制代码
  • 停止 HDFS 和 YARN 干系进程:
    1. stop-dfs.sh
    2. stop-yarn.sh
    复制代码
单独启动和停止进程


  • 启动 HDFS:
    1. hadoop-daemon.sh start (namenode | datanode)
    复制代码
  • 停止 HDFS:
    1. hadoop-daemon.sh stop (namenode | datanode)
    复制代码
  • 启动 YARN:
    1. yarn-daemon.sh start (resourcemanager | nodemanager)
    复制代码
  • 停止 YARN:
    1. yarn-daemon.sh stop (resourcemanager | nodemanager)
    复制代码
文件操纵


  • 上传文件:
    1. hdfs dfs -put 本地路径 HDFS路径
    2. hdfs dfs -copyFromLocal 本地路径 HDFS路径
    复制代码
  • 下载文件:
    1. hdfs dfs -get HDFS路径 本地路径
    2. hdfs dfs -copyToLocal HDFS路径 本地路径
    复制代码
  • 创建目录:
    1. hdfs dfs -mkdir HDFS路径
    复制代码
  • 查看文件内容:
    1. hdfs dfs -cat HDFS路径
    2. hdfs dfs -tail HDFS路径
    3. hdfs dfs -tail -f HDFS路径  # 监听 HDFS 中的文件内容
    4. hdfs dfs -text HDFS路径
    复制代码
文件管理


  • 追加内容:
    1. hdfs dfs -appendToFile 本地路径 HDFS路径
    复制代码
  • 删除文件:
    1. hdfs dfs -rm -r -f HDFS路径
    复制代码
  • 复制文件:
    1. hdfs dfs -cp 源路径 目标路径
    复制代码
  • 重命名文件:
    1. hdfs dfs -mv 源路径 目标路径
    复制代码
  • 修改文件权限:
    1. hdfs dfs -chmod 735 目标路径
    2. hdfs dfs -chmod -R 735 目标路径
    复制代码
  • 查看存储空间:
    1. hdfs dfs -df
    2. hdfs dfs -du -h /
    复制代码
HDFS 干系概念

HDFS 架构 - 元数据


  • fsimage:元数据镜像文件,存储 NameNode 内存中的元数据信息。
  • edits:操纵日记文件,记载新增的元数据日记。
  • fstime:保存近来一次 checkpoint 的时间。
这些文件保存在 Linux 文件系统中,路径由 hdfs-site.xml 的 dfs.namenode.name.dir 属性指定。
SecondaryNameNode 的作用


  • 功能:资助 NameNode 完成元数据信息的合并。
  • 工作流程

    • SecondaryNameNode 向 NameNode 发起 Checkpoint 哀求。
    • 从 NameNode 获取 fsimage 和 edits。
    • 合并 edits。
    • 将新的 fsimage 发回给 NameNode。
    • NameNode 用新的 fsimage 替换旧的 fsimage。

Checkpoint 发起时机


  • fs.checkpoint.period:指定两次 checkpoint 的最大时间间隔,默认 3600 秒。
  • fs.checkpoint.size:规定 edits 文件的最大值,一旦超过此值则逼迫 checkpoint,默认大小为 64MB。
HDFS 架构 - Block 存储


  • Block 大小:HDFS 1.0 版本的默认块大小为 64MB,2.0 版本及以后为 128MB。可以在 hdfs-site.xml 中通过 dfs.blocksize 属性配置块大小。
HDFS API 使用


  • 文件操纵

    • create:写文件
    • open:读取文件
    • delete:删除文件

  • 目录操纵

    • mkdirs:创建目录
    • delete:删除文件或目录
    • listStatus:列出目录的内容
    • getFileStatus:显示文件系统的目录和文件的元数据信息
    • getFileBlockLocations:显示文件存储位置

HDFS 写流程

HDFS 写流程包括数据写入 HDFS 的过程,数据被分成多个块并存储到差别的 DataNode 上。
HDFS 读流程

HDFS 读流程包括从 HDFS 中读取数据的过程,通过 NameNode 获取数据块的位置,然后从相应的 DataNode 读取数据。
RPC 协议


  • 定义:RPC(Remote Procedure Call)是一种通过网络从远程盘算机步伐上哀求服务的协议,无需了解底层网络技术。RPC 采用客户端/服务器模式,客户端发送哀求,服务器处理哀求并返回效果。
Hadoop是什么,有哪些组件,分别介绍一下?

Hadoop 是一个处理海量数据的分布式存储和分布式盘算平台,主要包括三个核心组件:HDFS、YARN 和 MapReduce。它们劈头于谷歌发布的三篇文章:GFS 对应 HDFS,BigTable 对应 HBase,MapReduce 对应 Hadoop 中的 MapReduce。
HDFS架构?HDFS原理?

HDFS(Hadoop Distributed File System)

HDFS 是 Hadoop 中的分布式文件存储系统,它会将每个文件以“分而治之”的思想来放到差别的数据节点中。HDFS 采用主从结构:

  • 主节点(NameNode):负责存储数据的元数据信息,例如文件的大小、文件的路径、文件的名字和时间等。
  • 从节点(DataNode):负责真实数据的存储,这个存储是基于块(Block)来进行的。在 Hadoop 2.0 版本之后,一个块的默认大小是 128MB,这样也就意味着一个文件大概会被拆成多个块,分别放到差别的从节点上,实现分布式存储。
如果需要读取这些数据,需要通过主节点来获取这些块的详细位置,组装好文件才能完备地读到 HDFS 中的文件。主节点也是用户进行读写数据哀求的桥梁。当客户端有读写哀求的时候,客户端会首先通过 RPC 协调来远程调用 NameNode 来获取一个数据列表,这个列表中存储了每个 DataNode 中每个块的详细信息。
DataNode 的信息由 NameNode 管理,NameNode 也可以存在多个。如果 HDFS 中的 NameNode 掉线,只有一个主节点会使整个数据都不能用。创建第二个 NameNode 可以减少数据不能用的大概。Hadoop 中的机制会在 NameNode 掉线之后,找一个空闲的 DataNode 来充当 NameNode 继续运作,当然,这样做如果没有多副本,这个空闲的 DataNode 中的数据就无法读取了。
HDFS 初始化下令?
  1. hdfs namenode -format
复制代码
Yarn启动后有什么进程?Yarn的架构?

YARN(Yet Another Resource Negotiator)

YARN 是用来进行资源的管理和任务调度的一个框架,主要用于协调每个组件之间的资源调度,使每个进程都可以顺遂运作。YARN 启动后,主节点会有一个 ResourceManager,从节点上会有 NodeManager。
YARN 架构


  • 主节点(ResourceManager):负责整个 Hadoop 集群中的资源分配和任务的调度。
  • 从节点(NodeManager):负责自己节点上的资源任务调度。
Container是什么?

YARN 中的 Container 是资源的抽象,它封装了某个节点上一定量的资源(CPU 和内存)。Container 由 ApplicationMaster 向 ResourceManager 申请,由 ResourceManager 中的资源调度器异步分配给 ApplicationMaster。Container 的运行是由 ApplicationMaster 向资源所在的 NodeManager 发起的。
Block大小为什么是128M?

Block 大小

块的默认大小为 128MB。这样做是为了优化分布式存储和盘算框架的性能,减少元数据开销,并提高数据本地性,从而提拔整体系统的效率和吞吐量。如果块的大小设置为 1MB,会存在多个块,盘算时读写效率会低落。如果块的大小设置为 1GB,但有多个 100MB 的文件,会生成多个存储容量为 1GB 的块,这样块文件的空间利用率会很低。若块的大小小于 1MB,一个 1MB 的文件也会分配一个 1GB 的块,导致空间浪费。
SecondaryNameNode的作用?

SecondaryNameNode 的作用是资助 NameNode 完成元数据信息合并,从角色上看,属于 NameNode 的“秘书”。它的工作流程如下:

  • SecondaryNameNode 向 NameNode 发起 Checkpoint 哀求。
  • SecondaryNameNode 从 NameNode 获得 fsimage 和 edits 文件。
  • SecondaryNameNode 将 fsimage 载入内存,然后开始合并 edits。
  • SecondaryNameNode 将新的 fsimage 发回给 NameNode。
  • NameNode 用新的 fsimage 替换旧的 fsimage。
文件阐明


  • fsimage:元数据镜像文件,存储某一时段 NameNode 内存中的元数据信息。
  • edits:操纵日记文件,记载 NameNode 启动后新增的元信息日记。
  • fstime:保存近来一次 Checkpoint 的时间。
MapReduce的架构?怎样提交MR任务?

MapReduce 是一个依赖磁盘 I/O 的批处理盘算模型,也具有主从结构:

  • 主节点(MRAppMaster):负责吸收客户端提交的盘算任务,把盘算任务分给 NodeManager 的 Container 中执行,即任务调度,监控 Container 中 Task 的执行环境。
  • 从节点(Task):处理数据。这里的 MRAppMaster 并不在主节点上,由于盘算是由 DataNode 来执行的,NameNode 只是管理这些 DataNode。
提交 MR 任务的步骤


  • 编写 MapReduce 步伐:编写 Java、Python 或其他支持的语言的 MapReduce 步伐,定义 Mapper 和 Reducer 类。
  • 编译步伐:如果使用 Java,编译你的代码生成 .jar 文件。
  • 上传数据到 HDFS:将输入数据上传到 HDFS。
  • 提交任务:
    1. hadoop jar jar包名 主类名 -input /hdfs/input/path -output /hdfs/output/path
    复制代码
    这里的 your-program.jar 是你的步伐的 JAR 文件,YourMainClass 是包罗 main 方法的类,-input 和 -output 分别是 HDFS 中的输入和输出路径。
  • 查看任务状态:
    1. yarn application -status <applicationId>
    复制代码
hdfs读写过程是怎么样的?

读取数据


  • 客户端创建读哀求给 DFS,DFS 接到该哀求后远程调用 NameNode。
  • NameNode 会通过元数据信息来找到用户要读的数据对应的 DataNode 中的块。
  • NameNode 校验文件是否存在等环境,只有校验通过才会读取块,否则会抛出非常。
  • 所有预备工作完成后,开始进行数据的读取。
  • 读取数据是通过一个一个的块来进行的,只有当一个文件的所有块都被读取到之后才会停止读连接。
  • 如果在读取过程中出现了非常,比如某个块对应的 DataNode 掉线,则会去其他 DataNode 中重新读该块的副本,读取完毕后继续读下一个块。
  • DFS 会将 DataNode 掉线的信息传递给 NameNode,以便下次读取数据时选择其他的 DataNode,跳过掉线的 DataNode。
  • 所有块都成功读取后,客户端会收到写完的消息,最后关闭读连接。
写入数据


  • 客户端创建写哀求给 DFS,DFS 接到该哀求后远程调用 NameNode。
  • NameNode 校验文件状态,并创建新的块来写数据。
  • 写入的数据首先会被分成块,每个块还会分成一个个 packet(实现断点重连)。一个个 packet 会组成一个 ack 队列,写入数据会按照队列先进先写。
  • 只有当一个完备的块都写入到 DataNode 的块中才会进行各个 DataNode 的数据同步。
  • 只有在有多副本的环境下才会同步。如果只有一个副本,数据只会存在一个 DataNode 上。如果在写入块的过程中出现错误,比如在写入某个块时 DataNode 掉线,会跳过该 DataNode 继续写入到其他 DataNode 的新块中,重新写入块,只有掉线的 DataNode 重新正常工作后才会进行数据同步恢复正常。未写入的旧块会被删除。
  • 所有块都成功写入后,客户端会收到写完的消息,最后通知 NameNode 去记载这些 DataNode 中的块的信息。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

尚未崩坏

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表