【Hadoop】HDFS API 操作大全

这篇具有很好参考价值的文章主要介绍了【Hadoop】HDFS API 操作大全。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【Hadoop】HDFS API 操作大全,# 【==== HDFS&YARN ====】,hadoop,hdfs,HDFS API,listStatus,文件上传和下载

🍁 博主 "开着拖拉机回家"带您 Go to New World.✨🍁

🦄 个人主页——🎐开着拖拉机回家_Linux,大数据运维-CSDN博客 🎐✨🍁

🪁🍁 希望本文能够给您带来一定的帮助🌸文章粗浅,敬请批评指正!🍁🐥

🪁🍁🪁🍁🪁🍁🪁🍁 🪁🍁🪁🍁🪁🍁🪁 🪁🍁🪁🍁🪁🍁🪁🍁🪁🍁🪁🍁

🍁🪁🍁 🪁🍁🪁🍁感谢点赞和关注 ,每天进步一点点!加油!🍁🪁🍁 🪁🍁🪁🍁

目录

🍁 博主 "开着拖拉机回家"带您 Go to New World.✨🍁

一、FileSystem文件抽象类

1.1文件读取API

1.2文件操作API

1.3抽象FileSystem类的具体实现子类

1.4FileSystem IO输入系统相关类

1.5FileSystem IO输出系统相关类

二、HDFS的API操作

2.1测试集群版本信息

2.2文件上传下载和移动

2.3文件读写操作

2.4文件状态信息获取

2.5实战案例


一、FileSystem文件抽象类


为了提供对不同数据访问的一致接口,Hadoop借鉴了Linux虚拟文件系统的概念,为此Hadopo提供了一个抽象的文件系统模型FileSystem,HDFS 是其中的一个实现。

FileSystem是Hadoop中所有文件系统的抽象父类,它定义了文件系统所具有的基本特征和基本操作。

1.1文件读取API


HadoopFileSystem操作

Java操作

Linux操作

描述

URL.openStream

FileSystem.open

FileSystem.create

FileSystem.append

URL.openStream

open

打开一个文件

FSDataInputStream.read

InputStream.read

read

读取文件中的数据

FSDataInputStream.write

OutputStream.write

write

向文件中写入数据

FSDataInputStream.close

FSDataOutputStream.close

InputStream.close

OutputStream.close

close

关闭一个文件

FSDataInputStream.seek

RandomAccessFile.seek

lseek

改变文件读写位置

FileSystem.getContentSummary

du/wc

获取文件存储信息

1.2文件操作API


HadoopFileSystem操作

Java操作

Linux操作

描述

FileSystem.getFileStatus

FileSystem.get*

File.get*

stat

获取文件/目录的属性

FileSystem.set*

File.set*

chomd

修改文件属性

FileSystem.createNewFile

File.createNewFile

create

创建一个文件

FileSystem.delete

File.delete

remove

删除一个文件

FileSystem.rename

File.renameTo

rename

移动或先修改文件/目录名

FileSystem.mkdirs

File.mkdir

mkdir

创建目录

FileSystem.delete

File.delete

rmdir

从一个目录下删除一个子目录

FileSystem.listStatus

File.list

readdir

读取一个目录下的项目

FileSystem.setWorkingDirectory

getcwd/getwd

返回当前工作目录

FileSystem.setWorkingDirectory

chdir

更改当前的工作目录

1.3抽象FileSystem类的具体实现子类


【Hadoop】HDFS API 操作大全,# 【==== HDFS&YARN ====】,hadoop,hdfs,HDFS API,listStatus,文件上传和下载

1.4FileSystem IO输入系统相关类


【Hadoop】HDFS API 操作大全,# 【==== HDFS&YARN ====】,hadoop,hdfs,HDFS API,listStatus,文件上传和下载

【Hadoop】HDFS API 操作大全,# 【==== HDFS&YARN ====】,hadoop,hdfs,HDFS API,listStatus,文件上传和下载

1.5FileSystem IO输出系统相关类


【Hadoop】HDFS API 操作大全,# 【==== HDFS&YARN ====】,hadoop,hdfs,HDFS API,listStatus,文件上传和下载

【Hadoop】HDFS API 操作大全,# 【==== HDFS&YARN ====】,hadoop,hdfs,HDFS API,listStatus,文件上传和下载


二、HDFS的API操作


2.1测试集群版本信息

【Hadoop】HDFS API 操作大全,# 【==== HDFS&YARN ====】,hadoop,hdfs,HDFS API,listStatus,文件上传和下载

2.2文件上传下载和移动

/**
   * 本地文件上传到 HDFS
   *
   * @param srcPath  本地路径 + 文件名
   * @param dstPath  Hadoop路径
   * @param fileName 文件名
   */
def copyToHDFS(srcPath: String, dstPath: String, fileName: String): Boolean = {
  var path = new Path(dstPath)
  val fileSystem: FileSystem = path.getFileSystem(conf)
  val isFile = new File(srcPath).isFile
  // 判断路径是否存在
  val existDstPath: Boolean = fileSystem.exists(path)
  if (!existDstPath) {
    fileSystem.mkdirs(path)
  }
  // 本地文件存在
  if (isFile) {
    // HDFS 采用 路径+ 文件名
    path = new Path(dstPath + File.separator + fileName)
    // false: 是否删除 目标文件,false: 不覆盖
    fileSystem.copyFromLocalFile(false, false, new Path(srcPath), path)
    return true
  }
  false
}


/**
   * Hadoop文件下载到本地
   *
   * @param srcPath hadoop 源文件
   * @param dstPath 目标文件
   * @param fs      文件访问对象
   */
def downLoadFromHDFS(srcPath: String, dstPath: String, fs: FileSystem): Unit = {
  val srcPathHDFS = new Path(srcPath)
  val dstPathLocal = new Path(dstPath)
  // false: 不删除源文件
  fs.copyToLocalFile(false, srcPathHDFS, dstPathLocal)
}

/**
   * 检查Hadoop文件是否存在并删除
   *
   * @param path  HDFS文件
   */
def checkFileAndDelete(path: String, fs: FileSystem) = {
  val dstPath: Path = new Path(path)
  if (fs.exists(dstPath)) {
    // false: 是否递归删除,否
    fs.delete(dstPath, false)
  }
}

  /**
   * 获取指定目录下,正则匹配后的文件列表
   *
   * @param dirPath   hdfs路径
   * @param regexRule 正则表达式 ,如:"^(?!.*[.]tmp$).*$" ,匹配非 .tmp结尾的文件
   */
  def listStatusHDFS(dirPath: String, regexRule: String, fs: FileSystem): util.ArrayList[Path] = {
    val path = new Path(dirPath)
    val pattern: Pattern = Pattern.compile(regexRule)
    // 匹配的文件
    val fileList = new util.ArrayList[Path]()
    val fileStatusArray: Array[FileStatus] = fs.listStatus(path)
    for (fileStatus <- fileStatusArray) {
      // 文件 全路径
      val filePath: Path = fileStatus.getPath()
      val fileName: String = filePath.getName.toLowerCase
      if (regexRule.equals("")) {
        // 如果匹配规则为空 则获取目录下的全部文件
        fileList.add(filePath)
        log.info("match file : " + fileName)
      } else {
        // 正则匹配文件
        if (pattern.matcher(fileName).matches()) {
          fileList.add(filePath)
          log.info("match file : " + fileName)
        }
      }
    }
    fileList
}


/**
 * 文件移动或重命名到指定目录, 如:文件00000 重命名为00001
 *
 * @param srcPath 源文件路径
 * @param dstPath 源文件路径
 * @param fs      文件操作对象
 */
def renameToHDFS(srcPath: String, dstPath: String, fs: FileSystem): Boolean = {
    var renameFlag = false
    val targetPath = new Path(dstPath)
    // 目标文件存在先删除
    if (fs.exists(targetPath)) {
      fs.delete(targetPath, false)
    }
    renameFlag = fs.rename(new Path(srcPath), targetPath)
    if (renameFlag) {
      log.info("renamed file " + srcPath + " to " + targetPath + " success!")
    } else {
      log.info("renamed file " + srcPath + " to " + targetPath + " failed!")
    }
    renameFlag
}

2.3文件读写操作


Hadoop抽象文件系统也是使用流机制进行文件的读写。Hadoop抽象文件系统中,用于读文件数据的流是FSDataInputStream,对应地,写文件通过抽象类FSDataOutputStream实现。


/**
   * 读取HDFS文件
   *
   * @param inPutFilePath 源文件路径
   * @param fs            文件操作对象
   */
def readFromHDFS(inPutFilePath: String, OutputFilePath: String, fs: FileSystem) = {
  var fSDataInputStream: FSDataInputStream = null
  var bufferedReader: BufferedReader = null
  val srcPath = new Path(inPutFilePath)
  if (fs.exists(srcPath)) {
    val fileStatuses: Array[FileStatus] = fs.listStatus(srcPath)
    for (fileStatus <- fileStatuses) {
      val filePath: Path = fileStatus.getPath
      // 判断文件大小
      if (fs.getContentSummary(filePath).getLength > 0) {
        fSDataInputStream = fs.open(filePath)
        bufferedReader = new BufferedReader(new InputStreamReader(fSDataInputStream))

        var line = bufferedReader.readLine()
        while (line != null) {
          print(line + "\n") // 打印
          line = bufferedReader.readLine()
        }
      }
    }
  }
  fSDataInputStream.close()
  bufferedReader.close()
}

/**
   * 读取HDFS文件, 处理完成 重新写入
   *
   * @param inPutFilePath 源文件路径
   * @param OutputFilePath 输出文件到新路径
   * @param fs            文件操作对象
   */
def writeToHDFS(inPutFilePath: String, OutputFilePath: String, fs: FileSystem) = {
  var fSDataInputStream: FSDataInputStream = null
  var fSDataOutputStream: FSDataOutputStream = null
  var bufferedReader: BufferedReader = null
  var bufferedWriter: BufferedWriter = null
  val srcPath = new Path(inPutFilePath)
  var count = 0
  if (fs.exists(srcPath)) {
    val fileStatuses: Array[FileStatus] = fs.listStatus(srcPath)
    for (fileStatus <- fileStatuses) {
      val filePath: Path = fileStatus.getPath
      // 判断文件大小
      if (fs.getContentSummary(filePath).getLength > 0) {
        fSDataInputStream = fs.open(filePath)
        bufferedReader = new BufferedReader(new InputStreamReader(fSDataInputStream))
        val outputFilePath = new Path(OutputFilePath + count)

        fSDataOutputStream = fs.create(outputFilePath)
        bufferedWriter = new BufferedWriter(new OutputStreamWriter(fSDataOutputStream, "UTF-8"))
        var line = bufferedReader.readLine()
        while (line != null) {
          val bytes: Array[Byte] = line.getBytes("UTF-8")
          bufferedWriter.write(new String(bytes) + "\n")
          line = bufferedReader.readLine()
        }
        bufferedWriter.flush()
        count += 1
      }
    }
  }
  fSDataInputStream.close()
  bufferedReader.close()
  bufferedWriter.close()
}

测试结果如下:

【Hadoop】HDFS API 操作大全,# 【==== HDFS&amp;YARN ====】,hadoop,hdfs,HDFS API,listStatus,文件上传和下载

2.4文件状态信息获取


FileSystem. getContentSummary()提供了类似Linux命令du、df提供的功能。du表示"disk usage",它会报告特定的文件和每个子目录所使用的磁盘空间大小;命令df则是"diskfree"的缩写,用于显示文件系统上已用的和可用的磁盘空间的大小。du、df是Linux中查看磁盘和文件系统状态的重要工具。

getContentSummary()方法的输入是一个文件或目录的路径,输出是该文件或目录的一些存储空间信息,这些信息定义在ContentSummary,包括文件大小、文件数、目录数、文件配额,已使用空间和已使用文件配额等。

 /**
   * HDFS路径下文件信息统计
   *
   * @param dirPath hdfs路径
   **/
  def listHDFSStatus(dirPath: String, fs: FileSystem) = {
    val path = new Path(dirPath)
    // 匹配的文件
    val contentSummary: ContentSummary = fs.getContentSummary(path)
    println("/tmp/kangll 目录下子目录个数: ", contentSummary.getDirectoryCount)
    println("/tmp/kangll 目录下文件个数: ", contentSummary.getFileCount)
    println("/tmp/kangll 目录下文件大小: ", contentSummary.getLength)
    println("/tmp/kangll 目录下文件和子目录个数: ", contentSummary.getFileAndDirectoryCount)

  }

/tmp/kangll目录信息获取结果:

【Hadoop】HDFS API 操作大全,# 【==== HDFS&amp;YARN ====】,hadoop,hdfs,HDFS API,listStatus,文件上传和下载

2.5实战案例


案例说明: HDFS 文件清理, 根据文件大小、个数、程序休眠时间控制 匀速 批量删除 HDFS 文件,当文件越大 ,需要配置 删除个数更少,休眠时间更长,防止 NameNode 负载过大,减轻DataNode磁盘读写压力,从而不影响线上业务情况下清理过期数据。

package com.kangll.common.utils

import java.text.SimpleDateFormat
import java.util.concurrent.TimeUnit
import java.util.{Calendar, Date, Properties}
import org.apache.hadoop.conf.Configuration
import org.apache.hadoop.fs.{ContentSummary, FileStatus, FileSystem, Path}
import org.apache.log4j.Logger

import scala.collection.mutable.ListBuffer

/** ***************************************************************************************
 *
 * @auther kangll                               
 * @date 2023/09/12 12:10                                  
 * @desc HDFS 文件清理, 根据文件大小、个数、程序休眠时间控制 匀速 批量删除
 *       HDFS 文件,当文件越大 ,需要配置 删除个数更少,休眠时间更长,防止
 *       NameNode 负载过大,减轻DataNode磁盘读写压力,从而不影响线上业务下删除
 *
 *
 *       1.遍历文件夹下的文件个数据, 当遍历的文件夹下的文件个数到达阈值时 将
 *        文件所述的 父路径直接删除
 *
 * ****************************************************************************************/
object CleanHDFSFileUtil {

  // 删除文件总数统计
  var HDFS_FILE_SUM = 0
  // 批次删除文件个数显示
  var HDFS_FILE_BATCH_DEL_NUM = 0
  val start = System.currentTimeMillis()

  /**
   *
   * @param fs             文件操作对象
   * @param pathName       文件根路径
   * @param fileList       批次清理的 buffer
   * @param saveDay        根据文件属性 获取文件创建时间  选择文件保留最近的天数
   * @param sleepTime      休眠时间,防止一次性删除太多文件  导致 datanode 文件负载太大
   * @param fileBatchCount 批次删除文件的个数, 相当于是 上报到 namenode 文件清理队列的大小,参数越大 队列越大,datanode 磁盘负载相对来说就高
   * @return
   */
  def listPath(fs: FileSystem, pathName: String, fileList: ListBuffer[String], saveDay: Int, sleepTime: Long, fileBatchCount: Int): ListBuffer[String] = {
    val fm = new SimpleDateFormat("yyyy-MM-dd")
    // 获取当前时间
    val currentDay = fm.format(new Date())
    val dnow = fm.parse(currentDay)
    val call = Calendar.getInstance()
    call.setTime(dnow)
    call.add(Calendar.DATE, -saveDay)
    // 获取保留天前的时期
    val saveDayDate = call.getTime
    // 遍历文件
    val fileStatuses = fs.listStatus(new Path(pathName))

    for (status <- fileStatuses) {
      // 获取到文件名
      val filePath = status.getPath
      if (status.isFile) {
        // 获取到文件修改时间
        val time: Long = status.getModificationTime
        val hdfsFileDate = fm.parse(fm.format(new Date(time)))
        if (saveDayDate.after(hdfsFileDate)) {
          fileList += filePath.toString
          // 获取文件个数
          val cs: ContentSummary = fs.getContentSummary(filePath)
          HDFS_FILE_SUM += cs.getFileCount.toInt
          HDFS_FILE_BATCH_DEL_NUM += cs.getFileCount.toInt
          if (HDFS_FILE_BATCH_DEL_NUM >= fileBatchCount) {
            val end = System.currentTimeMillis()
            println("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++")
            println("++++++++++++++++ 遍历文件数量达到 " + HDFS_FILE_BATCH_DEL_NUM + " 个,删除HDFS文件 ++++++++++++++++")
            println("++++++++++++++++++++++++++++ 休眠 " + sleepTime + " S ++++++++++++++++++++++++++++")
            println("++++++++++++++++++++++++ 删除文件总数:" + HDFS_FILE_SUM + " ++++++++++++++++++++++++++")
            println("++++++++++++++++++++++++ 程序运行时间:" + (end - start) / 1000 + " s ++++++++++++++++++++++++")
            println("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++")
            HDFS_FILE_BATCH_DEL_NUM = 0
            TimeUnit.MILLISECONDS.sleep(sleepTime)

          }

          // 文件删除根据绝对路径删除
          println("+++++ 删除文件: " + filePath + "+++++")
          // 递归删除
          fs.delete(filePath, true)
        }

      } else {
        // 递归文件夹
        listPath(fs, filePath.toString, fileList, saveDay, sleepTime, fileBatchCount)
      }
    }
    println("+++++++++++++++++++++++++   删除文件总数:" + HDFS_FILE_SUM + " +++++++++++++++++++++++++")
    fileList
  }

   /**
   * 删除空文件夹
   *
   * @param fs              文件操作对象
   * @param pathName        路径
   * @param pathSplitLength 文件按照"/"拆分后的长度
   */
  def delEmptyDirectory(fs: FileSystem, pathName: String, pathSplitLength: Int) = {

    // 遍历文件
    val fileStatuses = fs.listStatus(new Path(pathName))
    for (status <- fileStatuses) {
      if (status.isDirectory) {
        val path: Path = status.getPath
        // /kangll/winhadoop/temp/wmall_batch_inout/day/1660878372 = 7
        val delPathSplitLength = path.toString.substring(6, path.toString.length).split("/").length
        //  filePath  /kangll/winhadoop/temp/wmall_batch_inout/day  子时间戳文件夹两个
        //        val hdfsPathListCount = fileStatuses.length
        val hdfsPathListCount = fs.listStatus(path).length
        if (delPathSplitLength == pathSplitLength && hdfsPathListCount == 0) {
          println("+++++++++++++++++ 删除空文件夹 : " + path + " +++++++++++++++++++")
          fs.delete(path, true)
        }
      }
    }
  }

  def main(args: Array[String]): Unit = {
    val logger = Logger.getLogger("CleanHDFSFileUtil")
    val conf = new Configuration()
    conf.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem")
    conf.set("fs.file.impl", "org.apache.hadoop.fs.LocalFileSystem")
    val fs = FileSystem.get(conf)

    val fileList = new ListBuffer[String]
    
    val hdfsDir = if (args.size > 0) args(0).toString else System.exit(0).toString
    val saveDay = if (args.size > 1) args(1).toInt else 2
    val sleepTime = if (args.size > 2) args(2).toLong else 10
    val fileBatchCount = if (args.size > 3) args(3).toInt else 5
    /*
     默认不启用文件夹删除,参数为 文件夹绝对路径Split后的数组长度
     如 路径  /winhadoop/temp/wmall_batch_inout/thirty"  配置为 7
     */
    val pathSplitLength = if (args.size > 4) args(4).toInt else 20
    // 删除文件
    listPath(fs, hdfsDir, fileList, saveDay, sleepTime, fileBatchCount)
    // 删除空文件夹
    delEmptyDirectory(fs, hdfsDir, pathSplitLength)
    fs.close()
  }
}

调用脚本

#                                                                                                         
# 脚本功能: 过期文件清理                                                                                              
# 作    者: kangll                                                                                             
# 创建时间: 2023-09-14                                                                                           
# 修改内容: 控制删除文件的批次个数,程序休眠时间传入                                                              
# 当前版本: 1.0v                                                                                                 
# 调度周期: 一天一次                                                                                                 
# 脚本参数: 删除文件夹、文件保留天数、程序休眠时间、批次删除个数                                                  
#  1.文件根路径,子文件夹递归遍历                                                                                                   
#  2.文件保留天数                                                                                                 
#  3.程序休眠时间 防止 DataNode 删除文件负载过大,单位  秒                                                        
#  4.批次删除文件个数 ,如配置 100,当满足文件个数100时, 整批执行 delete,紧接着程序休眠                           
#  5.默认不启用文件夹删除,也就是不传参,参数为 文件夹绝对路径Split后的数组长度                                   
#        /winhadoop/temp/wmall_batch_inout/thirty/时间戳/ Split后 长度为7,默认删除时间戳文件夹                                                                         
#

###  对应的新删除程序
jarPath=/hadoop/project/del_spark2-1.0-SNAPSHOT.jar

### 集群日志
java -classpath $jarPath com.kangll.common.utils.CleanHDFSFileUtil /spark2-history 3 10 100

【Hadoop】HDFS API 操作大全,# 【==== HDFS&amp;YARN ====】,hadoop,hdfs,HDFS API,listStatus,文件上传和下载

参考 :

hadoop抽象文件系统filesystem框架介绍_org.apache.hadoop.fs.filesystem_souy_c的博客-CSDN博客文章来源地址https://www.toymoban.com/news/detail-722942.html

Hadoop FileSystem文件系统的概要学习 - 回眸,境界 - 博客园

hadoop抽象文件系统filesystem框架介绍_org.apache.hadoop.fs.filesystem_souy_c的博客-CSDN博客

到了这里,关于【Hadoop】HDFS API 操作大全的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 从零开始的Hadoop学习(五)| HDFS概述、shell操作、API操作

    1.1 HDFS 产出背景及定义 1) HDFS 产生背景 随着数据量越来越大,在一个操作系统存不下所有的数据,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,迫切 需要一种系统来管理多台机器上的文件 ,这就是分布式文件管理系统。 HDFS只是分布式文件管理系统

    2024年02月10日
    浏览(56)
  • Windwos安装Hadoop 并在IDEA中利用Maven实现HDFS API操作

    本次hadoop的安装系统为Windows10、Hadoop版本为3.3.6、Maven版本为3.9.4、Java版本为17.0.2。本教程基于前篇教程Hadoop集群、Java安装均完成后的后续教程,如未完成安装请查看前置教程。Hadoop、java安装 ############################################################################################# 此外,大数

    2024年01月18日
    浏览(40)
  • Hadoop生态 | HDFS | Yarn | Hive | Hbase

    ⭐ 简单说两句 ⭐ 作者: 后端小知识 , CSDN后端领域新星创作者|阿里云专家博主 CSDN 个人主页 :后端小知识 🔎 GZH : 后端小知识 🎉 欢迎关注 🔎 点赞 👍 收藏 ⭐️ 留言 📝 进入大数据阶段就意味着进入NoSQL阶段,更多的是面向OLAP场景,即数据仓库、BI应用等。 大数据技

    2024年04月08日
    浏览(54)
  • 单机搭建hadoop环境(包括hdfs、yarn、hive)

    单机可以搭建伪分布式hadoop环境,用来测试和开发使用,hadoop包括: hdfs服务器, yarn服务器,yarn的前提是hdfs服务器, 在前面两个的基础上,课可以搭建hive服务器,不过hive不属于hadoop的必须部分。 过程不要想的太复杂,其实挺简单,这里用最糙最快最直接的方法,在我的单

    2024年02月20日
    浏览(54)
  • Middleware ❀ Hadoop功能与使用详解(HDFS+YARN)

    Hadoop是一个开源的分布式计算和存储框架,由Apache基金会开发和维护。Hadoop 为庞大的计算机集群提供可靠的、可伸缩的应用层计算和存储支持,它允许使用简单的编程模型跨计算机群集分布式处理大型数据集,并且支持在单台计算机到几千台计算机之间进行扩展。 Hadoop使用

    2024年02月07日
    浏览(41)
  • Hadoop三大“金刚”完美剖析 ─────── HDFS、MapReduce、YARN

    因为HDFS是分布式储存文件的模式,所以在储存文件的数据时,会将文件切分为大小一致的数据块, 如果出现文件大小不是128M的倍数时,那么最后一个文件会与之前切分文件大小不一致。 被切分成的数据块就是Block块,NameNode将Block块进行分布式储存到DataNode中。    (Block块

    2024年04月10日
    浏览(43)
  • Hadoop——HDFS、MapReduce、Yarn期末复习版(搭配尚硅谷视频速通)

    1.1 HDFS定义 HDFS(Hadoop Distributed File System),它是一个文件系统,用于存储文件,通过目录树来定位文件;其次, 它是分布式的 ,由很多服务器联合起来实现其功能,集群中的服务器有各自的角色。 HDFS的使用场景 :适合一次写入,多次读出的场景。一个文件经过创建、写入和关

    2024年01月17日
    浏览(42)
  • 【运维】hadoop 集群安装(三)hdfs、yarn集群配置、nodemanager健康管理讲解

    上篇简单说明了多节点的hadoop节点怎么安装,但是没有细致的分析hadoop相关配置,具体怎么根据环境进行配置,接下来我们对这些配置进行讲解 Daemon Environment Variable NameNode HDFS_NAMENODE_OPTS DataNode HDFS_DATANODE_OPTS Secondary NameNode HDFS_SECONDARYNAMENODE_OPTS ResourceManager YARN_RESOURCEMANAGER_OP

    2024年02月10日
    浏览(43)
  • 【Hadoop-HDFS】HDFS常用操作命令

    hadoop fs -ls / 普通创建: hadoop fs -mkdir /xiaolin 递归创建: hadoop fs -mkdir -p /xiaolin/xiaoyin mkdir xuan.txt hadoop fs -moveFromLocal xuan.txt /xiaolin hadoop fs -copyFromLocal xuan.txt / hadoop fs -put xuan.txt / 文件名称相同时覆盖hdfs上的文件: -f hadoop fs -put -f xuan.txt / hadoop fs -copyToLocal /xiaolin ./ hadoop fs -get

    2024年02月05日
    浏览(52)
  • hadoop调用HDFS java api实现在HDFS上创建文件夹

    目录 一、前期准备 1、Hadoop集群已配置完毕 2、Linux系统安装jdk 3、安装并破解IntelliJ IDEA 二、通过JAVA API操纵HDFS 1.在IDEA中创建项目  2.在hdfs项目的src-main-java路径下创建一个包,然后在包下创建一个java类实现hdfs的文件操作  3.java类的代码 4.对JAVA程序传入参数后运行程序  5

    2024年02月08日
    浏览(74)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包