hdfs-大数据Week6-DAY2-2-hdfs

本文详细介绍了Hadoop分布式文件系统HDFS,包括其起源、发展版本、运行模式、架构、数据块存储、副本策略、shell命令操作、Java API编程、DataNode工作机制、读写流程、NameNode与SecondaryNameNode的功能以及HDFS的优缺点。内容涵盖了HDFS的基础知识和高级特性,适合学习和理解Hadoop大数据生态。
摘要由CSDN通过智能技术生成

文章目录


前言

HDFS:Hadoop分布式文件系统

一、硬件软件准备

  1. 安装VMware虚拟化软件
  2. 安装CentOS 7虚拟机3个
  3. 安装3节点的hadoop集群
  4. windows或mac安装IDEA
  5. windows做好hadoop环境配置

二、主要内容

  1. hadoop发展历史
  2. hadoop版本介绍及选择
  3. hadoop模块简介
  4. hadoop运行模式
  5. hadoop架构模块介绍
  6. hdfs功能详解

三、主要目标

  1. 理解分布式文件系统
  2. 理解hdfs架构
  3. 熟练hdfs基本命令使用
  4. 掌握hdfs编程
  5. 理解namenode及secondarynamenode交互

四、知识要点

1. hadoop的起源

在这里插入图片描述

  • Apache Lucene是一个文本搜索系统库

  • Apache Nutch作为前者的一部分;Hadoop最早起源于Nutch。

    • Nutch的设计目标是构建一个大型的全网搜索引擎

    • 主要包括web爬虫抓取网页、全文检索、查询;

    • 但随着抓取网页数量的增加,遇到了严重的可扩展性问题——如何解决数十亿网页的存储和索引问题。

  • 2003年、2004年谷歌发表的两篇论文为该问题提供了可行的解决方案。

    ——分布式文件系统(GFS),可用于处理海量网页的存储

    ——分布式计算框架MAPREDUCE,可用于处理海量网页的索引计算问题。

  • Nutch的开发人员完成了相应的开源实现HDFS(04年)和MAPREDUCE(05年),并从Nutch中剥离成为独立项目HADOOP

  • 到2008年1月,HADOOP成为Apache顶级项目(同年,cloudera公司成立),迎来了它的快速发展期。

  • Hadoop作者Doug Cutting

  • 狭义上来说,hadoop就是单独指代hadoop这个软件

  • 广义上来说,hadoop指代大数据的一个生态圈,包括很多其他的软件

在这里插入图片描述

2. hadoop的发展版本介绍

  • 0.x系列版本:hadoop当中最早的一个开源版本,在此基础上演变而来的1.x以及2.x的版本

  • 1.x版本系列:hadoop版本当中的第二代开源版本,主要修复0.x版本的一些bug等

  • 2.x版本系列:架构产生重大变化,引入了yarn平台等许多新特性,也是现在生产环境当中使用最多的版本

  • 3.x版本系列:在2.x版本的基础上,引入了一些hdfs的新特性等,且已经发型了稳定版本,未来公司的使用趋势
    在这里插入图片描述

3. hadoop生产环境版本选择

  • Hadoop三大发行版本:Apache、Cloudera、Hortonworks。

    • Apache版本最原始(最基础)的版本,对于入门学习最好。
    • Cloudera在大型互联网企业中用的较多。
    • Hortonworks文档较好。
  • mapr

  • Apache Hadoop

    官网地址:http://hadoop.apache.org/releases.html

    下载地址:https://archive.apache.org/dist/hadoop/common/

  • Cloudera Hadoop

    官网地址:https://www.cloudera.com

    下载地址:http://archive.cloudera.com/cdh5/cdh/5/

    • 2008年成立的Cloudera是最早将Hadoop商用的公司,为合作伙伴提供Hadoop的商用解决方案,主要是包括支持、咨询服务、培训。
    • 2009年Hadoop的创始人Doug Cutting也加盟Cloudera公司。Cloudera产品主要为CDH,Cloudera Manager,Cloudera Support
    • CDH是Cloudera的Hadoop发行版,完全开源,比Apache Hadoop在兼容性,安全性,稳定性上有所增强。
    • Cloudera Manager是集群的软件分发及管理监控平台,可以在几个小时内部署好一个Hadoop集群,并对集群的节点及服务进行实时监控。Cloudera Support即是对Hadoop的技术支持。
    • Cloudera的标价为每年每个节点4000美元。
    • Cloudera开发并贡献了可实时处理大数据的==Impala项目==。
  • Hortonworks Hadoop

    官网地址:https://www.cloudera.com

    • 现cloudera与hortonworks已合并
    • 2011年成立的Hortonworks是雅虎与硅谷风投公司Benchmark Capital合资组建。
    • 公司成立之初就吸纳了大约25名至30名专门研究Hadoop的雅虎工程师,上述工程师均在2005年开始协助雅虎开发Hadoop,贡献了Hadoop80%的代码。
    • 雅虎工程副总裁、雅虎Hadoop开发团队负责人Eric Baldeschwieler出任Hortonworks的首席执行官。
    • Hortonworks的主打产品是Hortonworks Data Platform(HDP),也同样是100%开源的产品,HDP除常见的项目外还包括了==Ambari==,一款开源的安装和管理系统。
    • HCatalog,一个元数据管理系统,HCatalog现已集成到Facebook开源的Hive中。Hortonworks的Stinger开创性的极大的优化了Hive项目。Hortonworks为入门提供了一个非常好的,易于使用的沙盒。
    • Hortonworks开发了很多增强特性并提交至核心主干,这使得Apache Hadoop能够在包括Window Server和Windows Azure在内的Microsoft Windows平台上本地运行。定价以集群为基础,每10个节点每年为12500美元。

注意:Hortonworks已经与Cloudera公司合并

4. hadoop的运行模式

1. 本地运行模式
  • 无需任何守护进程,所有的程序都运行在同一个JVM上执行。在独立模式下调试MR程序非常高效方便。所以一般该模式主要是在学习或者开发阶段调试使用
2. 伪分布式运行模式
  • Hadoop守护进程运行在本地机器上,模拟一个小规模的集群,换句话说,可以配置一台机器的Hadoop集群
  • 伪分布式是完全分布式的一个特例。
3. 完全分布式运行模式(开发重点)
  • Hadoop守护进程运行在一个集群上,需要使用多台机器来实现完全分布式服务的安装

在这里插入图片描述

HDFS进程:
	NameNode
	SecondaryNameNode
	DataNode
YARN进程:
	NodeManager
	
1.完全分布式运行模式:H-A架构,将功能分布到不同节点
2.伪分布式运行模式:在一台机器上,再虚拟化出多个机器,实现集群
3.本地运行模式:同一个JVM中

5. hadoop的架构介绍

在这里插入图片描述

  • Hadoop由三个模块组成:
    • 分布式存储HDFS
    • 分布式计算MapReduce
    • 资源调度引擎Yarn

在这里插入图片描述

在这里插入图片描述

  • 关键词

    • 分布式
    • 主从架构
  • HDFS模块主从架构:

    • namenode:主节点,主要负责集群的管理以及元数据信息管理

    • datanode:从节点,主要负责存储用户数据

    • secondaryNameNode:辅助namenode管理元数据信息,以及元数据信息的冷备份

  • Yarn模块:

    • ResourceManager:主节点,主要负责资源分配
    • NodeManager:从节点,主要负责执行任务

6. 分布式文件系统的理解

在这里插入图片描述

  • 最直观的理解便是三个臭皮匠,顶个诸葛亮。
  • 很多的磁盘加一起就可以装下天下所有的avi
  • 类似于你出五毛,我出五毛,我们一起凑一块的效果
  • block块

在这里插入图片描述

7. hdfs的架构详细剖析

1. 分块存储&机架感知&3副本

在这里插入图片描述

问:

​ 上边的文件有几个块,分别是多大?

  • 1、分块存储

    • 保存文件到HDFS时,会先默认按128M的单位对文件进行切分成一个个block块

    • 数据以block块的形式存在HDFS文件系统中

      • 在hadoop1当中,文件的block块默认大小是64M
      • hadoop2当中,文件的block块大小默认是128M,block块的大小可以通过hdfs-site.xml当中的配置文件进行指定

      cd /kkb/install/hadoop-3.1.4/etc/hadoop/

      vim hdfs-site.xml

      /block

       </property>
              <property>
              <name>dfs.blocksize</name>
              <value>134217728</value>
          </property>
      
      
    <property>
        <name>dfs.blocksize</name>
        <value>块大小 以字节为单位</value><!-- 只写数值就可以 -->
    </property>
    
    • hdfs-default.xml参考默认属性

    • 面试题

      如果有一个文件大小为1KB,它有几个块?每个块是多大?

      类似于有一个水桶可以装128斤的水,但是我只装了1斤的水,那么我的水桶里面水的重量就是1斤,而不是128斤

    • block元数据

      • 每个block块的元数据大小大概为150字节
      • 一个1k大小的block与一个128M大小的block的元数据基本相等
      • 所以在namenode内存有限的情况下,存储大文件更划算
      • hdfs适合存储大文件,不适合存储小文件
  • 2、3副本存储

    • 为了保证block块的安全性,也就是数据的安全性,在hadoop2当中,采用文件默认保存三个副本,我们可以更改副本数以提高数据的安全性
    • 在hdfs-site.xml当中修改以下配置属性,即可更改文件的副本数
    <property>
          <name>dfs.replication</name>
          <value>3</value>
    </property>
2. 抽象成数据块的好处
  1. 文件可能大于集群中任意一个磁盘
    10T*3/128 = xxx块 10T 文件方式存—–>多个block块,这些block块属于一个文件

  2. 使用块抽象而不是文件可以简化存储子系统

    hdfs将所有的文件全部抽象成为block块来进行存储,不管文件大小,全部一视同仁都是以block块的形式进行存储,方便我们的分布式文件系统对文件的管理

  3. 块非常适合用于数据备份;进而提供数据容错能力和可用性

3. HDFS架构

在这里插入图片描述

  • HDFS集群包括,NameNode和DataNode以及Secondary Namenode。

    • NameNode负责管理整个文件系统的元数据,以及每一个路径(文件)所对应的数据块信息。
    • DataNode 负责管理用户的文件数据块,每一个数据块都可以在多个datanode上存储多个副本。
    • Secondary NameNode用来监控HDFS状态的辅助后台程序,每隔一段时间获取HDFS元数据的快照。最主要作用是辅助namenode管理元数据信息
  • NameNode与Datanode的总结概述

在这里插入图片描述

  • heartbeat、balancing、replication
4. 扩展
  1. 块缓存
  • 官网文档

  • 通常DataNode从磁盘中读取块,但对于访问频繁的文件,其对应的块可能被显示的缓存在DataNode的内存中,以堆外块缓存的形式存在。

  • 默认情况下,一个块仅缓存在一个DataNode的内存中,当然可以针对每个文件配置DataNode的数量。作业调度器通过在缓存块的DataNode上运行任务,可以利用块缓存的优势提高读操作的性能。

    例如:
    连接(join)操作中使用的一个小的查询表就是块缓存的一个很好的候选。
    用户或应用通过在缓存池中增加一个cache directive来告诉namenode需要缓存哪些文件及存多久。缓存池(cache pool)是一个拥有管理缓存权限和资源使用的管理性分组

  1. hdfs的文件权限验证
  • hdfs的文件权限机制与linux系统的文件权限机制类似

    r:read w:write x:execute 权限x对于文件表示忽略,对于文件夹表示是否有权限访问其内容

    如果linux系统用户zhangsan使用hadoop命令创建一个文件,那么这个文件在HDFS当中的owner就是zhangsan

    HDFS文件权限的目的,防止好人做错事,而不是阻止坏人做坏事。HDFS相信你告诉我你是谁,你就是谁

    hdfs 权限-》kerberos、ranger来做

tree

hdfs 的用户是hadoop,hadoop用户可以上传信息,其它不是hdfs的用户就不能
这样可以防止好人作坏事
[hadoop@localhost install]$ who am I
root     pts/1        2021-04-12 09:19 (192.168.153.1)
[hadoop@localhost install]$ ls
apache-zookeeper-3.6.2-bin  file1.txt  hadoop-3.1.4  jdk1.8.0_141
[hadoop@localhost install]$ hdfs dfs -put file1.txt /


但是如果非hdfs的用户,告诉了hdfs,我是hadoop用户,那么hdfs就无法防止坏人作坏事了,就得限制权限范围

8. hdfs的shell命令操作

  • HDFS命令有两种风格:
    • hadoop fs开头的
    • hdfs dfs开头的
    • 两种命令均可使用,效果相同
1. hdfs常用命令
  1. 如何查看hdfs或hadoop子命令的帮助信息,如ls子命令
hdfs dfs -help ls
hadoop fs -help ls #两个命令等价
  1. 查看hdfs文件系统中指定目录的文件列表。对比linux命令ls
hdfs dfs -ls /
hadoop fs -ls /
hdfs dfs -ls -R /
  1. 在hdfs文件系统中创建文件
hdfs dfs -touchz /edits.txt
  1. 向HDFS文件中追加内容
hadoop fs -appendToFile edit1.xml /edits.txt #将本地磁盘当前目录的edit1.xml内容追加到HDFS根目录 的edits.txt文件
  1. 查看HDFS文件内容
hdfs dfs -cat /edits.txt
  1. 从本地路径上传文件至HDFS
#用法:hdfs dfs -put /本地路径 /hdfs路径
hdfs dfs -put /linux本地磁盘文件 /hdfs路径文件
hdfs dfs -copyFromLocal /linux本地磁盘文件 /hdfs路径文件  #跟put作用一样
hdfs dfs -moveFromLocal /linux本地磁盘文件 /hdfs路径文件  #跟put作用一样,只不过,源文件被拷贝成功后,会被删除
  1. 在hdfs文件系统中下载文件
hdfs dfs -get /hdfs路径 /本地路径
hdfs dfs -copyToLocal /hdfs路径 /本地路径  #根get作用一样
hdfs dfs -ls /
hdfs dfs -get /edits.txt .
  1. 在hdfs文件系统中创建目录
hdfs dfs -mkdir /shell
  1. 在hdfs文件系统中删除文件
hdfs dfs -rm /edits.txt

将文件彻底删除(被删除文件不放到hdfs的垃圾桶里)
how?
hdfs dfs -rm -skipTrash /xcall
  1. 在hdfs文件系统中修改文件名称(也可以用来移动文件到目录)
hdfs dfs -mv /xcall.sh /call.sh
hdfs dfs -mv /call.sh /shell
  1. 在hdfs中拷贝文件到目录
hdfs dfs -cp /xrsync.sh /shell
  1. 递归删除目录
hdfs dfs -rm -r /shell
  1. 列出本地文件的内容(默认是hdfs文件系统)
hdfs dfs -ls file:///home/hadoop/
  1. 查找文件
# linux find命令
find . -name 'edit*'
# HDFS find命令
hadoop fs -find / -name part-r-00000 # 在HDFS根目录中,查找part-r-00000文件
  1. 总结
  • 输入hadoop fs 或hdfs dfs,回车,查看所有的HDFS命令
  • 许多命令与linux命令有很大的相似性,学会举一反三
  • 有用的help,如查看ls命令的使用说明:hadoop fs -help ls
  • 绝大多数的大数据框架的命令,也有类似的help信息
2. hdfs的shell命令补充
hdfs
1. hdfs与getconf结合使用
  1. 获取NameNode的节点名称(可能有多个)
hdfs getconf -namenodes

[hadoop@node01 ~]$ hdfs getconf -namenodes
node01
hdfs getconf -confkey fs.defaultFS
  1. 获取hdfs最小块信息
hdfs getconf -confKey dfs.namenode.fs-limits.min-block-size

[hadoop@node01 ~]$ hdfs getconf -confKey dfs.namenode.fs-limits.min-block-size
1048576

​ 用相同命令可获取其他的属性值

  1. 查找hdfs的NameNode的RPC地址
hdfs getconf -nnRpcAddresses

[hadoop@node01 ~]$ hdfs getconf -nnRpcAddresses
node01:8020

2. hdfs与dfsadmin结合使用
  1. 查看hdfs dfsadmin的帮助信息
hdfs dfsadmin
  1. 同样要学会借助help查看具体命令的帮助信息
hdfs dfsadmin -help safemode
  1. 查看当前的模式
hdfs dfsadmin -safemode get[hadoop@node01 ~]$ hdfs dfsadmin -safemode getSafe mode is OFF
  1. 进入/退出安全模式
hdfs dfsadmin -safemode enter # 进入安全模式  只能读,不能修改,也不能上传hdfs dfsadmin -safemode leave #退出安全模式
3. hdfs与fsck结合使用

​ fsck指令显示HDFS块信息

hdfs fsck /02-041-0029.mp4 -files -blocks -locations # 查看文件02-041-0029.mp4的块信息
[hadoop@node01 ~]$ hdfs fsck /edits.txt -files -blocks -locations
4. 其他命令
  1. 检查压缩库本地安装情况
hadoop checknative
  1. 格式化名称节点(慎用,一般只在初次搭建集群,使用一次;格式化成功后,不要再使用)
元数据->nameNode内存->format初次搭建,我们并没有将数据放入内存,所以初次格式化就没有问题但是如果后面将数据存入后,还进行格式化,那么内存的数据就会被清理掉,无法恢复了
hadoop namenode -format
  1. 执行自定义jar包
[hadoop@node01 common]$ cd /kkb/install/hadoop-3.1.4/share/hadoop/mapreduce/[hadoop@node01 mapreduce]$ lltotal 5604-rw-r--r-- 1 hadoop hadoop  622498 Jul 21  2020 hadoop-mapreduce-client-app-3.1.4.jar-rw-r--r-- 1 hadoop hadoop  803991 Jul 21  2020 hadoop-mapreduce-client-common-3.1.4.jar-rw-r--r-- 1 hadoop hadoop 1656561 Jul 21  2020 hadoop-mapreduce-client-core-3.1.4.jar-rw-r--r-- 1 hadoop hadoop  215337 Jul 21  2020 hadoop-mapreduce-client-hs-3.1.4.jar-rw-r--r-- 1 hadoop hadoop   45333 Jul 21  2020 hadoop-mapreduce-client-hs-plugins-3.1.4.jar-rw-r--r-- 1 hadoop hadoop   85398 Jul 21  2020 hadoop-mapreduce-client-jobclient-3.1.4.jar-rw-r--r-- 1 hadoop hadoop 1682286 Jul 21  2020 hadoop-mapreduce-client-jobclient-3.1.4-tests.jar-rw-r--r-- 1 hadoop hadoop  126144 Jul 21  2020 hadoop-mapreduce-client-nativetask-3.1.4.jar-rw-r--r-- 1 hadoop hadoop   97155 Jul 21  2020 hadoop-mapreduce-client-shuffle-3.1.4.jar-rw-r--r-- 1 hadoop hadoop   57652 Jul 21  2020 hadoop-mapreduce-client-uploader-3.1.4.jar-rw-r--r-- 1 hadoop hadoop  316383 Jul 21  2020 hadoop-mapreduce-examples-3.1.4.jardrwxr-xr-x 2 hadoop h
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

低调的小哥哥

你的关注就是我为你服务的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值