码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Hadoop高手之路4-HDFS


    文章目录

    • 一、HDFS的简介
      • 1. HDFS的演变
        • 1) 传统的文件系统
        • 2) 分布式
        • 3) hdfs
      • 2. HDFS的概念
        • 1) NameNode(名称节点)
        • 2) DataNode(数据节点)
        • 3) Block(数据块)
        • 4) Rack(机架)
        • 5) Metadata(元数据)
    • 二、HDFS的特点
      • 1. 优点
        • 1) 高容错
        • 2) 流式数据访问
        • 3) 支持超大文件
        • 4) 高数据吞吐量
        • 5) 可构建在廉价的集群上
      • 2. **缺点**
        • 1) 高延迟
        • 2) 不适合小文件的存储
        • 3) 不适合并发写入
    • 三、HDFS的架构和原理
      • 1. HDFS的存储架构
      • 2. HDFS的文件读写原理
        • 1) HDFS写数据的原理
        • 2) HDFS读数据的流程
    • 四、HDFS的shell操作
      • 1.ls命令
      • 2. **mkdir**
      • 3. put命令
      • 4. get命令
      • 5. du命令
      • 6. mv命令
      • 7. cp
      • 8. rm
      • 9. cat
      • 10. help
    • 五、HDFS的JAVA API操作
      • 1. 下载安装配置JDK
        • 1) 下载JDK 1.8 64位安装包
        • 2) 安装
        • 3) 配置环境变量
      • 2. 下载安装配置MAVEN
        • 1) 下载
        • 2) 解压
        • 3) 配置环境变量
        • 4) 测试是否安装成功
      • 3. 安装idea
      • 4. 创建一个maven项目,测试各环境是否正常允许
        • 1) 启动idea,新建一个maven项目
        • 2) 项目结构
        • 3) 新建一个包
        • 4) 在包下新建一个类
        • 5) 输入代码
        • 6) 运行,查看结果
      • 5. 给idea配置maven国内镜像库
        • 1) 搜索aliyun的maven仓库服务
        • 2)编辑 maven 配置文件
        • 3) 修改idea的配置
      • 6. 案例-Java api操作HDFS
        • 1) 新建一个maven项目
        • 2) 修改pom文件,添加HDFS的依赖包
        • 3) 新建相关的包和类
        • 4) 编写代码,初始化HDFS客户端对象
        • 5) 运行查看结果
        • 6) 在HDFS上创建一个文件夹
        • 7) 启动hdfs集群
        • 8) 再次运行java程序
        • 9) 删除一个文件夹
        • 10) 上传本地文件到HDFS集群
        • 11) 下载HDFS集群的文件到本地
        • 12) 配置本地windows的hadoop环境变量

    一、HDFS的简介

    Hadoop的核心是HDFS和MapReduce。其中,HDFS是解决海量大数据文件存储的问题,是目前应用最广泛的分布式文件系统。

    1. HDFS的演变

    GFS(Google File System)->HDFS

    HDFS 源于 Google 在2003年10月份发表的GFS(Google File System)论文,接下来,我们从传统的文件系统入手,开始学习分布式文件系统,以及分布式文件系统是如何演变而来?

    1) 传统的文件系统

    所谓传统的文件系统指的单机的文件系统,底层不会横跨多台机器实现。比如windows上的文件系统、 Linux上的文件系统、 FTP文件系统等。

    这些文件系统的共同特征包括:

    • 带有抽象的目录树结构,树都是从/根目录开始往下蔓延;
    • 树中节点分为两类: 目录和文件;
    • 从根目录开始,节点路径具有唯一性。

    image-20221028095909822

    缺点:

    • 当数据量越来越大时,会遇到存储的瓶颈,就需要扩容
    • 由于文件过大,上传和下载都非常耗时

    2) 分布式

    扩容有两种方式,一种是纵向扩容,增加磁盘容量和内存,另一种是横向扩容,增加服务器的数量,这种存储形式就是分布式存储的雏形。

    image-20221028095924585

    解决上传和下载就是将一个大文件分成多个数据块,将数据库以并行的方式进行存储

    image-20221028095943223

    3) hdfs

    大文件通过分块存储在服务器集群中,如何获取一个完整的文件呢?需要增加一台服务器,专门用来存储被分割后的数据块信息已经它的存储位置,这就是namenode,也就是HDFS的雏形

    image-20221028111551464

    再添加备份机制,形成HDFS

    image-20221028111613129

    image-20221028095130987

    2. HDFS的概念

    1) NameNode(名称节点)

    主节点(集群老大)以元数据的形式进行管理和存储,用于维护文件系统名称并管理客户端对文件的访问,主节点一旦关闭整个集群就无法访问。

    2) DataNode(数据节点)

    从节点,再namenode的管理下,存储访问数据

    3) Block(数据块)

    默认是128mb,且备份3份,每个数据块尽可能存储在不同的datanode中

    4) Rack(机架)

    用来存放集群服务器的机架,通过交换机进行通信,HDFS通过机架的感知策略,namenode能够确定每个datanode所在的机架id

    5) Metadata(元数据)

    有三种形式,一是维护HDFS的文件和目录的信息,如文件名、目录名、文件大小等,二是记录文件的内容,如数据分块情况,副本个数,每个副本所在的DataNode信息等,三是记录HDFS中所有DataNode的信息,用于DataNode的管理

    二、HDFS的特点

    1. 优点

    1) 高容错

    2) 流式数据访问

    3) 支持超大文件

    4) 高数据吞吐量

    5) 可构建在廉价的集群上

    2. 缺点

    1) 高延迟

    2) 不适合小文件的存储

    3) 不适合并发写入

    三、HDFS的架构和原理

    1. HDFS的存储架构

    主从式

    image-20221028113601220

    2. HDFS的文件读写原理

    Client(客户端)对HDFS中的数据进行读写操作

    1) HDFS写数据的原理

    • 客户端发起文件的上传请求,通过RPC(远程过程调用)与NameNode建立通信
    • NameNode检查元数据目录树
    • 若系统目录树不存在该文件的相关信息,则客户端可以上传文件
    • 客户端请求上传第一个Block,以及副本的数量
    • NameNode检查元数据文件中datanode的信息池,找到可用的节点
    • 将可用节点的IP返回给客户端
    • 客户端请求一台服务器上传数据,建立管道pipeline
    • 开始传送第一个数据块
    • 传送成功后给出相应
    • 依次进行下一个数据块的传送,直到全部数据传送完成。

    2) HDFS读数据的流程

    • 客户端向NameNode发出RPC的请求,获取数据块所在的位置
    • Namenode会检查元数据文件,返回block块信息及副本的信息
    • 客户端会选取排序靠前的Datanode来依次读取Block
    • 客户端合并读取的全部block成一个完整的文件

    四、HDFS的shell操作

    有两种形式:

    hadoop fs

    hdfs dfs

    1.ls命令

    image-20221028115746013

    2. mkdir

    创建子目录

    格式

    hdfs dfs -mkdir [-p] 子目录名

    选项:

    -p:递归创建各级子目录

    image-20221028120119476

    3. put命令

    上传文件

    格式:

    hdfs dfs -put 源文件 目的文件

    image-20221028120333546

    4. get命令

    下载文件

    5. du命令

    统计目录下所有文件的大小

    image-20221028120457990

    6. mv命令

    移动文件

    7. cp

    复制文件

    8. rm

    删除文件

    9. cat

    查看文件内容

    10. help

    获取帮助

    五、HDFS的JAVA API操作

    开发需要java环境,可以测试java是否已经安装,打开命令提示符

    image-20221028120655779

    说明已经安装成功,如果没有出现上述界面,那么还需要安装java

    1. 下载安装配置JDK

    1) 下载JDK 1.8 64位安装包

    可以直接在网上搜索下载

    image-20221028120857883

    当然也可以去官网下载,需要注册且下载速度比较慢

    官网:https://www.oracle.com/java/technologies/downloads/#java8

    进入官网:

    image-20221026104034817

    2) 安装

    找到下载好的文件

    image-20221026095937886

    点击下一步。

    image-20221026100208110

    选择安装目录。

    image-20221026100300976

    image-20221026100509406

    点击下一步

    image-20221026100622191

    image-20221026100658949

    安装完成,点击关闭。

    image-20221026100754288

    3) 配置环境变量

    安装好环境,我们开始进行环境配置。

    右击此电脑,点击属性。

    image-20221026101010467

    点击高级系统设置。

    image-20221026101124494

    点击环境变量。

    image-20221026101234795

    点击新建系统变量。

    image-20221026101834527

    变量名为 JAVA_CLASS,变量值为刚安装的jre的路径,点击确定。

    image-20221026102305731

    然后再新建JAVA_HOME,变量值为刚安装的jdk的路径,点击确定。

    image-20221026102547066

    然后我们找到Path变量。

    image-20221026102859255

    添加变量,完成后一路确定。

    %JAVA_CLASS%\bin
    %JAVA_HOME%\bin
    
    • 1
    • 2

    image-20221026103204266

    2. 下载安装配置MAVEN

    image-20221028130238011

    1) 下载

    image-20221028130839950

    image-20221028130907385

    image-20221028130929439

    image-20221028130827041

    2) 解压

    image-20221028131354669

    3) 配置环境变量

    image-20221028131521904

    image-20221028131650665

    4) 测试是否安装成功

    image-20221028131829546

    说明安装成功

    3. 安装idea

    image-20221028131900865

    image-20221028131907890

    下载后点击启动安装,完成安装

    学生可以申请企业版免费使用,不过需要等7天时间

    4. 创建一个maven项目,测试各环境是否正常允许

    1) 启动idea,新建一个maven项目

    image-20221028132225842

    image-20221028160645415

    点击create按钮,开始构建项目,下载依赖包

    2) 项目结构

    image-20221028161009614

    3) 新建一个包

    image-20221028161135390

    image-20221028161237124

    image-20221028161455120

    4) 在包下新建一个类

    image-20221028161545025

    image-20221028161615217

    image-20221028161700001

    5) 输入代码

    image-20221028161921330

    image-20221028162041216

    注意:这里使用tab和Enter(回车)都可以实现自动填充。

    image-20221028162313858

    6) 运行,查看结果

    image-20221028162444837

    image-20221028162528579

    5. 给idea配置maven国内镜像库

    默认仓库在国外的站点,下载比较慢,需要maven的仓库位国内的镜像,一个配置位阿里的仓库镜像

    1) 搜索aliyun的maven仓库服务

    image-20221028163348602

    image-20221028163525715

    image-20221028163734909

    image-20221028163824561

    2)编辑 maven 配置文件

    image-20221028163953752

    修改仓库为阿里云仓库服务的国内镜像

    image-20221028164420943

    修改maven仓库的存放位置,默认在c盘,容易造成c盘空间满

    image-20221028164603119

    修改为自定义文件夹

    image-20221028165746494

    修改 maven 的配置文件

    image-20221028170246394

    3) 修改idea的配置

    image-20221113123020642

    image-20221028171628546

    6. 案例-Java api操作HDFS

    1) 新建一个maven项目

    image-20221028171850518

    image-20221028171954225

    2) 修改pom文件,添加HDFS的依赖包

    image-20221028172141410

    image-20221028172445460

    image-20221028173926211

    image-20221028174053087

    3) 新建相关的包和类

    image-20221028174244136

    4) 编写代码,初始化HDFS客户端对象

    输入如下代码

    image-20221028175146435

    提示代码有错误

    image-20221028175819024

    image-20221028175958522

    5) 运行查看结果

    image-20221028180057672

    image-20221028180247320

    6) 在HDFS上创建一个文件夹

    image-20221028180422939

    再次运行,查看结果

    出现错误,提示连接拒绝,这是因为没有启动hadoop集群

    image-20221028181215955

    7) 启动hdfs集群

    image-20221028180939857

    webui查看

    image-20221028181113268

    8) 再次运行java程序

    image-20221028181308127

    webui查看执行结果

    image-20221028181401721

    说明运行成功

    9) 删除一个文件夹

    image-20221028181839086

    image-20221028182303051

    10) 上传本地文件到HDFS集群

    准备好本地文件

    image-20221028195212677

    添加上传代码

    image-20221028195332513

    运行查看结果

    image-20221028182739692

    webui查看

    image-20221028195407407

    说明上传成功的

    11) 下载HDFS集群的文件到本地

    添加下载的代码

    image-20221028195522006

    运行,出现错误提示

    image-20221028193451888

    12) 配置本地windows的hadoop环境变量

    下载windoes下的hadoop包,3.0以上版本即可

    image-20221028193618430

    解压

    image-20221028194051220

    image-20221028194526184

    配置环境变量

    image-20221028194408016

    image-20221028194458875

    配置好后,再次运行,查看结果

    image-20221028195650103

  • 相关阅读:
    【Leetcode】【C语言】【合并两个升序单链表】
    计算机毕业设计Java我图你秀图片素材交易平台(源码+系统+mysql数据库+Lw文档)
    pycharm运行后不出结果
    综合能力 ---- 2. 法律法规
    【Flask基础】九,Flask--蓝图模块划分介绍(使用蓝图+不使用蓝图)
    视频基础学习一——色立体、三原色以及像素
    ES-索引管理
    代码示例:基于JAX-WS和JAXB,其中http请求和响应的报文体都是xml数据
    CNCC 2023 | 大模型全面革新推荐系统!产学界多位大咖精彩献言
    002讲:CAD2024下方任务栏不显示坐标解决方案——CAD知识讲堂
  • 原文地址:https://blog.csdn.net/W_chuanqi/article/details/127831399
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号