大数据闯关之Hadoop篇(二):HDFS-灵析社区

秋叶无缘

写在前面

大家好,这里是立志于在有生之年看到并参与通用人工智能开发工作的Nobody,由于最近在公司要经常性地接触大数据工具,所以打算开一个大专栏对大数据工具进行学习总结整理。之前我们过完了MySQL的基础部分和进阶部分,我们现在来到了大数据工具的Hadoop。由于最近有点忙,好久没更新了555。这段时间尽量两到三天更新一篇。

以下为该部分的前置博客

大数据闯关之Hadoop篇(一):大数据概述

一、Hadoop集群启动

  • format(格式化操作):首次启动HDFS时,必须对其进行格式化操作,format本质上是初始化工作,进行HDFS清理和准备工作
hdfs namenode -format
  • Hadoop集群启停命令:shell脚本一键启停,在node1上,使用软件自带的shell脚本一键启动
    • HDFS集群:start-dfs.sh stop-dfs.sh
    • YARN集群:start-yarn.sh stop-yarn.sh
    • Hadoop集群:start-all.sh stop-all.sh

我们可以启动一下Hadoop集群,并且输入jps看一下进程是否正常开启

​ 为了保证三台机器正常启动,node1、node2和node3的进程在启动后如下

  • Hadoop启动日志路径:/export/server/hadoop-3.3.0/logs
  • shell命令操作
    • hadoop fs -mkdir /itcast:在hadoop中创建文件夹itcast
    • hadoop fs -put zookeeper.out /itcast:上传文件
    • hadoop fs -ls
  • 执行Hadoop官方自带的Map Reduce案例,计算圆周率Π的值


cd /export/server/hadoop-3.3.0/share/hadoop/mapreduce/
hadoop jar hadoop-mapreduce-examples-3.3.0.jar pi 2 2

可以看到得到了一个结果,由于给的数字太小,计算不准确,但是能够成功运行了!

二、HDFS工作流程

  • HDFS分布式文件系统基础
    • 文件系统是一种存储和组织数据的方法,实现了数据的存储、分级组织、访问和获取等操作,使得用户对文件访问和查找变得容易
    • 数据:指存储的内容本身,这些数据底层最终是存储在磁盘等存储介质上的
    • 元数据(记录数据的数据):一般指文件大小、最后修改时间、底层存储位置、属性、所属用户、权限等信息
  • 分布式存储系统核心属性
    • 分布式存储:解决数据量大、单机存储遇到瓶颈的问题
    • 元数据记录:解决文件分布在不同机器上不利于寻找的问题
    • 分块存储:解决文件过大导致单机存不下,上传下载效率低的问题
    • 副本:解决硬件故障数据丢失的问题
  • HDFS:
    • HDFS主要是解决大数据如何存储问题的。分布式意味着HDFS是横跨在多台计算机上的存储系统
    • HDFS是一种能够在普通硬件上运行的分布式文件系统,它是高度容错的,适应于具有大数据的应用程序,它非常适合存储大型数据
    • HDFS使用多台计算机存储文件,并且提供统一的访问接口。
  • HDFS设计目标:
    • HDFS可能有成百上千的服务器组成,每一个组件都有可能出现故障。因此故障检测和自动快速回复是HDFS的核心架构目标
    • HDFS上的应用主要是以流式读取数据。相较于数据访问的反应时间,更注重数据访问的高吞吐量
  • HDFS重要特性

错误!未指定文件名。

    • 主从架构
      • HDFS集群是标准的master/slave主从架构集群
      • 一般一个HDFS集群是有一个Namenode和一定数目的Datanode组成
      • Namenode是HDFS主节点,Datanode是HDFS从节点,两种角色各司其职,共同协调完成分布式的文件存储服务
    • 分块存储
      • HDFS中的文件在物理上是分块存储的,默认大小是128M
    • 副本机制
      • 文件的所有block都有副本
      • 副本数默认是3,连同本身总共3份副本
    • 元数据记录:记录数据的数据
      • 文件自身属性信息:文件名称、权限、修改时间等
      • 文件块位置映射信息:记录文件块和DataNode之间的映射信息
    • 抽象统一的目录树结构
    • 数据块存储
      • 文件的各个block的具体存储管理由DataNode节点承担
      • 每个block都可以在多个DataNode上存储
  • 各角色职责介绍
    • Namenode:HDFS分布式文件系统的核心,架构中的主角色。维护和管理文件系统元数据,包括名称空间目录树结构、文件和块的位置信息、访问权限等信息
    • SecondaryNamenode:充当Namenode的辅助节点,主要是帮助主角色进行元数据文件的合并动作
    • Datanode:HDFS的从角色,负责具体的数据块存储
  • 写数据流程


*   pipeline管道:HDFS上传文件写数据过程中采用的一种数据传输方式。客户端将数据块写入第一个数据节点,第一个数据节点保存数据之后再将块复制到第二个数据节点,再复制到第三个数据节点(如图4.2和4.3流程所示)。该方式可以充分利用每个机器的带宽,避免网络瓶颈和高延迟时的连接,最小化推送所有数据的延时
*   ACK应答响应:ACK即确认字符,在数据通信中,接收方发给发送方的一种传输类控制字符,表示发来的数据已确认接收无误。在pipeline管道传输数据的过程中,传输的反方向会进行ACK校验(如图5.1和5.2所示)
*   默认3副本存储策略:
    *   第一个副本:优先客户端本地,否则随机
    *   第二块副本:不同于第一块副本的不同机架
    *   第三块副本:第二块副本相同机架不同机器
  • 写数据整体流程
    • HDFS客户端创建对象实例,该对象中封装了与HDFS文件系统操作的相关方法
    • 调用对象的create方法,通过RPC请求NameNode创建文件。NameNode执行各种检查判断,检查通过,NameNode就会为本次请求记下一条记录,返回输出流对象给客户端用于写数据
    • 客户端通过输出流开始写入数据
    • 客户端写入数据时,将数据分为一个个数据包,内部组件请求NameNode挑选出适合存储数据副本的一组DataNode地址。然后通过pipeline管道传输数据
    • 在传输的反方向上,通过ACK机制校验数据包传输是否成功
    • 客户端完成数据写入后,在输出流上调用close方法关闭
    • 向NameNode告知其文件写入文件。因为NameNode已经知道文件由哪些块组成,因此仅需等待最小复制块即可成功返回

三、HDFS的shell操作

  • 文件系统协议
    • HDFS Shell CLI支持操作多种文件系统,包括本地文件系统、分布式文件系统等
    • 具体操作的是什么文件系统取决于命令中文件路径URL中的前缀协议
    • 如果没有指定前缀,则会读取环境变量中的fs.defaultFS属性,以该属性值作为默认文件系统


hadoop fs -ls file:///   # 操作本地文件系统
hadoop fs -ls hdfs://node1:8020/   # 操作HDFS分布式文件系统
hadoop fs -ls /   # 直接根目录,没有指定协议
  • 创建文件夹
hadoop fs -mkdir [-p] <path>  # -p会沿着路径创建父路径
  • 查看指定目录下的内容
hadoop fs -ls [-h] [-R] [<path>]    # [-h] 人性化显示文件size  [-R] 递归查看
  • 上传文件到HDFS指定目录下
hadoop fs -put [-f] [-p] <localsrc> ... <dst>    
# -f 覆盖目标文件  -p 保留访问和修改时间,所有权和权限
# localsrc 本地文件系统,dst 目标文件系统
  • 查看HDFS文件内容
hadoop fs -cat <src>
  • 下载HDFS文件
hadoop fs -get [-f] [-p] <src> ... <localdst>
  • 拷贝HDFS文件
hadoop fs -cp [-f] <src> ... <localdst>
  • 追加数据到HDFS文件中
hadoop fs -appendToFile <localsrc> ... <dst>
  • HDFS数据移动操作
hadoop fs -mv <src> ... <dst>

阅读量:187

点赞量:0

收藏量:0