Hadoop的分布式文件系统

Hadoop分布式文件系统 Hadoop分布式文件系统在大规模存储和访问中具有广阔的应用空间。从基本概念 、基本结构、元数据管理数据存储、文件管理、数据容错 6个方面对 HDFS的实现原理进行了探究,可为 HDFS应用研究奠定基础。以Hadoop架构作为云平台的实现形式已经得到了广泛的应用。随着 Hadoop集群内节点数量的增加,集群内部的复杂程度和故障率以几何级数增加,集群故障监控越来越重要。集群监控是云计算平台的重要组成部分对提高云计算平台的稳定性发挥重要作用。 阅读详情

     HDFS默认情况下,块的大小是64MB。与磁盘相比它的块是巨大的,数据转换的时间就比需找数据的开始块的时间大的多。因此这转换一个大文件的操作取决于磁盘的速度。

      Namenodes 和Datanodes

     Namenodes管理文件系统的命名空间。它维护文件系统的结构和属性信息对于所有的文件和目录在树形结构。这信息被持续的存储在本地的硬盘以两种文件的格式:命名空间的图像和编辑日志。

   Datanodes是文件系统的工作空间。他们存储和获得块当他们被告知和他们报告回这namenodes带有的他们存储的块的列表。

   命令接口:% hadoop fs -copyFromLocal input/docs/quangle.txt hdfs://localhost/user/tom/
quangle.txt

         % hadoop fs -copyToLocal quangle.txt quangle.copy.txt
       % md5 input/docs/quangle.txt quangle.copy.txt
       MD5 (input/docs/quangle.txt) = a16f231da6b05e2ba7a339320e7dacd9

 

   读取数据从一个Hadoop URL中:

   InputStream in=null;

   try{

       in=new URL("hdfs://host/path").openStream(); 

    }finally{IOUtils.closeStream(in);}

 

 

 

public class URLCat {
static {
URL.setURLStreamHandlerFactory(new FsUrlStreamHandlerFactory());
}
public static void main(String[] args) throws Exception {
InputStream in = null;
try {
in = new URL(args[0]).openStream();
IOUtils.copyBytes(in, System.out, 4096, false);
} finally {
IOUtils.closeStream(in);
}
}
}

获取FileSystem
    public static FileSystem get(Configuration conf) throws IOException
    public static FileSystem get(URI uri, Configuration conf) throws IOException
    public static FileSystem get(URI uri, Configuration conf, String user) throws IOException

获取输入的流:

    public FSDataInputStream open(Path f) throws IOException
   public abstract FSDataInputStream open(Path f, int bufferSize) throws IOException

     其中可以获得文件指针的位置

   public interface Seekable {
void seek(long pos) throws IOException;
long getPos() throws IOException;
}

  写数据:

   public FSDataOutputStream create(Path f) throws IOException获得写入的流

  其中有回调接口

   package org.apache.hadoop.util;
   public interface Progressable {
            public void progress();
   }

    添加内容到文件的末尾

    public FSDataOutputStream append(Path f) throws IOException

   目录的操作:

    public boolean mkdirs(Path f) throws IOException新建目录

   查询文件系统:

   File的属性数据:FileStatus中保存

   这FileStatus类封装文件的属性数据为文件和目录,包括文件的长度,块的大小,重复度,修改时间,拥有者和权限信息。

   这getFileStatus()在文件系统提供一种获得一个FileStatus对象对于一个单独的文件或目录。

   public class ShowFileStatusTest {
          private MiniDFSCluster cluster; // use an in-process HDFS cluster for testing
          private FileSystem fs;
         @Before
          public void setUp() throws IOException {
                Configuration conf = new Configuration();
                if (System.getProperty("test.build.data") == null) {
                System.setProperty("test.build.data", "/tmp");

            }
          cluster = new MiniDFSCluster(conf, 1, true, null);
          fs = cluster.getFileSystem();
          OutputStream out = fs.create(new Path("/dir/file"));
          out.write("content".getBytes("UTF-8"));
          out.close();
  }

}
cluster = new MiniDFSCluster(conf, 1, true, null);
fs = cluster.getFileSystem();
OutputStream out = fs.create(new Path("/dir/file"));
out.write("content".getBytes("UTF-8"));
out.close();
}
@After
public void tearDown() throws IOException {
if (fs != null) { fs.close(); }
if (cluster != null) { cluster.shutdown(); }
}
@Test(expected = FileNotFoundException.class)
public void throwsFileNotFoundForNonExistentFile() throws IOException {
fs.getFileStatus(new Path("no-such-file"));
}

@Test
public void fileStatusForFile() throws IOException {
Path file = new Path("/dir/file");
FileStatus stat = fs.getFileStatus(file);
assertThat(stat.getPath().toUri().getPath(), is("/dir/file"));
assertThat(stat.isDir(), is(false));
assertThat(stat.getLen(), is(7L));
assertThat(stat.getModificationTime(),
is(lessThanOrEqualTo(System.currentTimeMillis())));
assertThat(stat.getReplication(), is((short) 1));
assertThat(stat.getBlockSize(), is(64 * 1024 * 1024L));
assertThat(stat.getOwner(), is("tom"));
assertThat(stat.getGroup(), is("supergroup"));
assertThat(stat.getPermission().toString(), is("rw-r--r--"));
}
@Test
public void fileStatusForDirectory() throws IOException {
Path dir = new Path("/dir");
FileStatus stat = fs.getFileStatus(dir);
assertThat(stat.getPath().toUri().getPath(), is("/dir"));
assertThat(stat.isDir(), is(true));
assertThat(stat.getLen(), is(0L));
assertThat(stat.getModificationTime(),
is(lessThanOrEqualTo(System.currentTimeMillis())));
assertThat(stat.getReplication(), is((short) 0));
assertThat(stat.getBlockSize(), is(0L));
assertThat(stat.getOwner(), is("tom"));
assertThat(stat.getGroup(), is("supergroup"));
assertThat(stat.getPermission().toString(), is("rwxr-xr-x"));
}
}

列出文件:

    发现一个单独文件或目录的信息是有用的,但是你也需要能够列出一个目录中内容。这就是FileSystem的listStatus()方法:

      public FileStatus[] listStatus(Path f) throws IOException

      public FileStatus[] listStatus(Path f,PathFilter filter) throws IOException

      public FileStatus[] listStatus(Path[] files) throws IOException

      public FileStatus[] listStatus(Path[] files,PathFilter filter) throw IOException

 其中,PathFilter可以限制匹配的文件和目录。

  文件模式:

    它是共同需要的在一个单独操作处理一套文件。

     public FileStatus[] globStatus(Path pathPattern) throws IOEXCEPTion

     public FileStatus[] globStatus(Path pathPattern,PathFilter filter) throws IOException

      PathFilter:

   Glob patterns并不是总是足够强大的来描述你想要获得的一套文件。例如,它不能够排除一个特定文件使用一个glob格式。

package org.apache.hadoop.fs;
public interface PathFilter {
boolean accept(Path path);
}

删除数据:

   使用delete()方法在FileSystem来永久的移除文件或者目录:

   public boolean delete(Path f,boolean recursive)

   如果recursive是true则一个非空的目录被删除和它的内容也被删除。

  数据流动:

    HDFS打开 Distributed FileSystem -》get block locations  from NameNode。

    HDFS client读取FSData InputStream,读取数据从DataNode。
数据文件写的分析:

    HDFS client 创建文件在Distributed FileSystem向NameNode请求创建新文件,完成后也要向NameNode发送消息。

     HDFS client写数据通过FSData OutputStream 向datanodes写入数据。完成后关闭。

Hadoop的重复块的放置:

    Hadoop的默认策略是放置第一个从发的在相同的节点和client。第二个重复的块被放在随机选择的一个节点和第一个不同的曺内。第三个放置在和第二个相同的曺但是不同的节点上。

保证一致性:

Path p = new Path("p");
FSDataOutputStream out = fs.create(p);
out.write("content".getBytes("UTF-8"));
out.flush();
out.sync();
assertThat(fs.getFileStatus(p).getLen(), is(((long) "content".length())));

  并行拷贝:

   % hadoop distcp hdfs://namenode1/foo hdfs://namenode2/bar

使用的存档:Hado% hadoop fs -lsr /my/filesop

 

 

 

 

 

 

 

 

            

 

 

【Hadoop】HDFS分布式文件系统 HDFS-分布式文件系统基本知识简介HDFS相关概念块(Block)名称节点(NameNode)数据节点(DataNode)第二名称节点(Secondary NameNode)HDFS体系结构HDFS存储原理 基本知识 简介 1. 分布式文件系统是Hadoop两大核心组成部分之一,提供了在廉价服务器集群中进行大规模分布式文件存储的能力。 2. HDFS具有很好的容错能力,并且兼容廉价的硬件设备,因... 阅读详情

相关推荐

Hadoop分布式文件系统(HDFS)快速入门

推荐书目电子版下载 HDFS知识梳理详细版 HDFS快速入门 应用背景 简介 基本原理 优点 缺点 设计 概念 读写流程 文件写入 文件读取 命令行接口 Hadoop分布式文件系统命令行接口详细版 具体说明 Java接口 连接Hadoop集群 Hadoop分布式文件系统Java接口详细版 简介 文件系统 HDFS文件系统详细版 简介 接口

围炉夜敲的博客 3500

计算机中丢失dasfj_v1.2.dll,Qt乱码解决办法(常量中有换行符)

firefox浏览器不支持复制粘贴(linux)在Linux主机下使用firefox在线编辑文章时,提示不支持复制粘贴选项,并给出了解决方法,记录一下 1.先找到本机firefox的配置文件的所在文件夹位置,不知道的请遵循以下步骤 点击菜单栏的帮助 ...linux命令之more转自:http://www.cnblogs.com/peida/archive/2012/11/02/2750588.h...

weixin_36090805的博客 4200

Hadoop的部署与Hadoop分布式文件系统HDFS

一、hadoop简介          Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。         Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-c...

Forever 的博客 1014

启动应用程序出现mprmsg.dll找不到问题解决

其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个mprmsg.dll文件(挑选合适的版本文件)把它放入到程序或系统目录中,当我们执行某一个.exe程序时,相应的DLL文件就会被调用,因此将缺失的文件放回到原目录之后就能打开你的软件或游戏了.那么出现mprmsg.dll丢失要怎么解决?

wbcmbfy的博客 3208

Dll修复小助手 v1.0.0.0

DLL大全出品的系统DLL修复工具。

w95_s7.dll

PC通信必备动态链接库,很多原因会导致系统缺少该DLL,有需求的取之!

hadoop分布式文件系统

分布式文件系统:管理网络中跨多台计算机存储的文件系统称为分布式文件系统。提出背景:当数据集的大小超过一台独立的物理计算机的存储能力时,就有必要对它进行分区(partition)并存储到若干台单独的计算机上。Hadoop的分布式文件系统称为HDFS(Hadoop Distributed Filesystem)。

Anolzo 3053

RGB YUV 转换工具

提供一种RGB和YUV值的转换工具,可很方便直观的查阅这这两者的对应关系,在需要查找这两种数值对比的用户会很好用。

深入理解HDFS:Hadoop分布式文件系统

文本详细介绍了HDFS中的许多概念,对于理解Hadoop分布式文件系统很有帮助。1. 介绍在现代的企业环境中,单机容量往往无法存储大量数据,需要跨机器存储。统一管理分布在集群上的文件系统称为分布式文件系统。而一旦在系统中,引入网络,就不可避免地引入了所有网络编程的复杂性,例如挑战之一是如果保证在节点不可用的时候数据不丢失。传统的网络文件系统(NFS)虽然也称为分布式文件系统,但是其存在一些限制。由于

Spring , Hadoop, Spark , BI , ML 5万+

S7_200_PPI.dll

用VB调用S7_200_PPI这个动态链接库与PLC200通讯

WinTcpS7_1K V34.rar

西门子系列PLC与上位机VB、VC等通过以太网通讯的dll文件,西门子系列PLC与上位机VB、VC等通过以太网通讯的dll文件西门子系列PLC与上位机VB、VC等通过以太网通讯的dll文件西门子系列PLC与上位机VB、VC等通过以太网通讯的dll文件

hadoop分布式文件系统_Hadoop分布式文件系统简介

HDFS是Apache Software Foundation项目和Apache Hadoop项目的子项目(请参阅参考资料 )。 Hadoop是存储诸如TB和PB之类的大量数据的理想选择,并且使用HDFS作为其存储系统。 HDFS使您可以连接包含在其上分布数据文件的群集中的节点 (商品个人计算机)。 然后,您可以将数据文件访问和存储为一个无缝文件系统。 对数据文件的访问以流方式处理,这意味着应...

cuxiong8996的博客 1988

APP S7 PLC C# Siemens PLC Communication Driver APP_S7.dll

APP S7 PLC C# Siemens PLC Communication Driver APP S7 PLC C# Siemens PLC Communication Driver APP S7 PLC C# Siemens PLC Communication Driver

hadoop 分布式文件系统的部署

hadoop 分布式文件系统的部署 2. 集群 虚拟集群的搭建 (1)创建用户 hadoop ,给创建的用户设定密码; [root@server1 ~]# useradd hadoop ##新建用户,以普通用户的身份去搭建 hadoop 平台 [root@server1 ~]# echo westos | passwd --stdin hadoop Changing password for user hadoop. passwd: all authentication tokens updat

weixin_54720351的博客 2670

解决QT汉化乱码DLL文件.rar

软件介绍: QT开发的程序在进行汉化中可能会遇到乱码,原因是调用了不支持中文的库函数,可以下载这个修改版的DLL库函数来解决。QtCore4-修改object.dllQtCore4-修改translate.dllQtCore4-原版.dll

cadence CIS 库建立--建立自己维护的CIS数据库

遇到一个问题,在使用cadecnce的时候,就是没有自己的本地/分享的数据库。 在画原理图或者PCB的时候,如果能搭建一个自己的数据库,在局域网或者本地 就好了。出于这样的想法,做了一些探索,找到了一种可能的答案。 由于数据库编制知识的缺乏,要自己建一个数据库似乎花费的时间会比较多。 偶发奇想,如果能够改编CIS 自带的数据库 另建立副本进行维护 就能够省下不少麻烦。 先说下CIS 是个啥。网上一搜:总之CIS 是个好东西。 功能强大。 点击CIS capture 中的 Options CIS Config

qq_29776365的博客 2万+

Hadoop 之分布式文件系统

文章目录Hadoop 之分布式文件系统HDFS 的设计HDFS 核心概念数据块块设计的好处namenode 和 datanodenamenodedatanode块缓存 Hadoop 之分布式文件系统 HDFS 的设计 超大文件:指的是几百 MB,几百 GB 设置几百 TB 大小的文件 流式数据访问: 一次写入、多次读取是最高效的访问模式。每次分析都将涉及该数据集的大部分甚至全部,因此读取整个数据集的时间延迟比读取第一条记录的时间延迟更为重要 商用硬件:不必运行在昂贵且高可靠的硬件上。所以 HDFS 遇到节点

CodeFlight 332

rk3399 linux 5.10 usb 2.0设备上电概率性注册失败

先排除硬件上的问题,然后就烧录kernel 4.1的的镜像,多次测试也没有发现这个问题,所以排除了硬件上的问题,然后。查下usb hub和usb 4G的复位脚,写驱动都给它们配上了,但是还是存在这个问题。最后通过对比rk3399.dtsi发现少了个power-domains = ;多次开关机,发现usb hub和4G都通信失败了,这就有点奇怪了,按理说usb驱动是没啥问题的。加上后,重新编译烧录,重新测试没有发现这个问题了!先查看usb log。

qq_32017483的博客 2673

Hadoop之01:HDFS分布式文件系统

1. 理解分布式思想 2. 学会使用HDFS的常用命令 3. 掌握如何使用java api操作HDFS 4. 能独立描述HDFS三大组件namenode、secondarynamenode、datanode的作用 5. 理解并独立描述HDFS读写流程 6. HDFS如何解决大量小文件存储问题

我的博客 1649

HID设备开发避坑指南:如何利用Windows内置驱动快速实现USB键盘模拟

本文详细解析了HID设备开发中的免驱方案与USB键盘模拟技术,重点介绍了HID协议的核心优势、开发基础架构及Windows平台的实现方法。通过实战案例和代码示例,帮助开发者快速掌握USB键盘模拟技术,避免常见开发陷阱,提升设备兼容性和性能。

lambda的博客 683

Ollama 在不同操作系统上的详细使用,及用python进行调用实战

本文介绍了Ollama的安装配置及Python调用方法。主要内容包括:1)Windows/macOS/Linux/Docker等多种安装方式;2)Ollama基础命令,涵盖模型管理、运行和服务控制;3)Python调用教程,包含官方库使用、自定义客户端、多轮对话、参数设置等高级功能,以及直接API调用示例。文章提供了完整的代码片段,适合开发者快速上手使用Ollama进行本地大模型部署和开发。

数据知道的博客 1233
上一篇: 这Hadoop分布式文件系统
下一篇: VC中文字的输出
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值