`

hdfs 学习(一)

阅读更多

HDFS概念:

1.数据块:每个磁盘都有默认的数据块的大小,这是磁盘进行读写的最小单位。构建与单个磁盘上的文件系统通过磁盘块来管理该文

件系统中的块,该文件系统块的大小可以是磁盘块的整数倍

HDFS也有块的概念,默认为64M,与单一磁盘上的文件系统相似,HDFS上的文件也被划分为块的大小的多个分块,作为独

立的存储单元,但是HDFS中小于一个块的大小的文件不会占据整个块的空间

2.为什么HDFS中的数据块如此之大

HDFS数据块比磁盘块大,这是为了最小化寻址开销。如果块设置的足够大,从磁盘传输数据的时间可以明显大于定位这个块开始

位置所需的时间,这样传输一个由多个块组成的文件的时间取决于磁盘传输速率

3.分布式系统中块抽象的好处
1>一个文件的大小可以大于网络中任意一个磁盘的容量
2>简化了存储子系统的设计
3>块适用于数据备份和容错能力

4.namenode 和datanode

HDFS集群中有两类节点。并以管理者-工作者模式运行,namenode(管理者),datanode(工作者)。
namenode 管理文件系统的命名空间,维护者文件系统树及整棵树内所有的目录和文件,这些信息以两类文件的形式永久保存
1>命名空间镜像文件
2>编辑日志文件
namenode 也记录着每个文件中各个块所在的数据节点信息,它并不永久保存块的位置信息

datanode 是文件系统的工作节点。他们根据需要存储并检索数据块,并定期向namenode发送他们所存储的块列表,没有nammode,

文件系统 将无法使用。因为如果namenode失效,则我们不知道如何根据datanode的块来重建文件

hadoop 两种机制来防止namenode失效:

1>备份那些组成文件系统元数据持久状态的文件。hadoop可以通过配置使namenode在多个文件系统上保存元数据的持久状态。这些

写操作时实时的,是 原子的。
2>运行辅助namenode,辅助namenode状态落后滞后于主节点,所以主节点失效时,会丢失部分信息,这种情况下一般把存储在NFS上

的namenode元数据复制到辅助namemode 并作为新的namenode运行


5.dfs.replication

hadoop默认块的副本数为3.

6.基本文件系统操作

1>从本地文件系统将一个文件复制到HDFS
bin/hadoop fs -copyFromLocal input/docs/quangle.txt hdfs://server0:9000/user/suse/quangle.txt

2>将hdfs文件复制回本地文件系统
bin/hadoop fs -copyToLocal quangle.txt quangle.copy.txt

bin/hadoop fs -mkdir newdir 创建目录

7.hadoop 文件系统

HDFS 只是hadoop 抽象文件系统的一个实现,java抽象类 org.apache.hadoop.fs.FileSystem 定义了hadoop的一个文件系统接口

java 接口

DistributedFileSystem

1>hadoop 从URL中读取数据

两种方式:
1>> java.net.URL 类

InputStream in = null;
try{
in = new URL("hdfs://host/path").openStream();

}finally{

IOUtils.closeStream(in);
}

2>>通过FileSystem API 读取数据

hadoop文件系统中通过 Hadoop Path 对象来代表文件,可以将一条路径看做为Hadoop 文件系统的url
获取FileSystem 实例由两种方法
public static FileSystem get(Configuration conf) throws IOException
public static FileSystem get(URL url,Configuration conf) throws IOException
第一个方法返回默认的文件系统
第二个返回给定url的文件系统,url为空则返回默认的文件系统

有了FileSystem 实例后 调用open()函数 来获取文件的输入流

Public FSDataInputStream open(Path f) throws IOExeption //默认缓冲区大小为4kb

Public abstract FSDataInputStream open(Path f,int buffersize)

FSDataInputStream :
实际上open()函数返回的是FSDataInputStream 对象,而不是标准的java.io类对象,这个类是继承了

java.io.DataInputStream 接口的一个特殊的类,支持随机访问,可以从流的任意一个位置读取

public class FSDataInputStream extends DataInputStream implents Seekable,PositionedReadable{
//implements elided

}

Seekable 接口支持在文件中找到指定的位置,并提供一个查询当前位置相对于文件起始位置的偏移量getPos 的查询方法

public interface Seekable{
void seek(long pos) throws IOExpection
long getPos()

}

调用seek()方法定位大于文件长度位置会导致异常。
与java.io.InputStream 中的skip() 不同。seek()可以移动到文件的任何绝对位置,skip()则只能相对于当前位置定位到另一

个新位置

seek 方法是一个相对高开销的操作

2>写入数据

public FSDataOutputStream create (Path f) throws IOException

create()方法 能够为需要写入的且当前不存在的文件创建父目录,如果希望不存在父目录就报错 则先调用
exists()方法


append 新建文件方法

public FSDataOutputStream append(Path f) throws IOException

该追加操作允许一个writer 打开文件后在访问该文件的最后偏移量处追加数据

0
3
分享到:
评论
3 楼 黎明lm 2012-08-17  
inprice 写道
又遇到一个照抄的.....没有贴出实际操作过程.
lz可以使用TestDFSIO来测试HDFS的吞吐量性能....


这个不是抄的.而是我开始接触hadoop的时候看hadoop权威指南 自己做的笔记而已。我知道你想要实际的操作过程也就是代码,但是如果你有能力的话可以自己写,如果没能力的话 就算是抄你可能也不一定抄的明白,不要指望别人给你完整的代码,那样的话 你就是在乞讨像个没有能力的乞丐一样
2 楼 inprice 2012-08-16  
又遇到一个照抄的.....没有贴出实际操作过程.
lz可以使用TestDFSIO来测试HDFS的吞吐量性能....
1 楼 liuxuejin 2011-10-22  
hdfs的性能 不知道 lz有没有测试过

相关推荐

    HDFS命令指南相关学习

    在大数据处理领域,Hadoop HDFS(Hadoop Distributed File System)是核心组件之一,它提供了分布式存储的能力。本文将深入探讨HDFS的一些基本命令,帮助用户更好地管理和操作HDFS中的数据。 1. `appendToFile`命令...

    基于springboot+netty+redis+hdfs实现的一个线上分布式网盘系统,毕业设计项目,个人学习,课设等均可

    基于springboot+netty+redis+hdfs实现的一个线上分布式网盘系统,毕业设计项目,个人学习,课设等均可,项目经过测试,可完美运行! 项目结构 项目主要分为一下几个模块 web-service 主要功能是页面展示,交互 ...

    HDFS实例基本操作

    Hadoop分布式文件系统(HDFS)是Apache Hadoop项目的核心组件之一,它为大数据处理提供了可靠的、可扩展的分布式存储解决方案。...通过不断的实践和学习,可以更好地利用HDFS这一强大的大数据存储工具。

    实验二:熟悉常用的HDFS操作

    实验二:“熟悉常用的HDFS操作”旨在帮助学习者深入理解Hadoop分布式文件系统(HDFS)在大数据处理中的核心地位,以及如何通过Shell命令和Java API进行高效操作。HDFS在Hadoop架构中扮演着存储大数据的核心角色,为...

    Hadoop学习总结之一:HDFS简介

    HDFS(Hadoop Distributed File System)是 Hadoop 生态系统中的一个核心组件,负责存储和管理大规模数据。下面是 HDFS 的基本概念和架构: 数据块(Block) HDFS 中的基本存储单位是 64M 的数据块。与普通文件系统...

    大数据技术原理与应用 第三章 分布式文件系统HDFS 学习指南

    在学习 HDFS 编程实践前,我们需要启动 Hadoop。执行以下命令可以成功启动 Hadoop: ``` ./bin/hadoop ``` 启动后,我们可以访问 Web 界面 http://localhost:50070 查看 NameNode 和 Datanode 信息,还可以在线查看 ...

    Hadoop学习总结之一:HDFS简介.doc

    开文件,这会返回一个FSDataInputStream对象。FSDataInputStream知道如何从HDFS获取数据。 2.2、写文件的过程 写文件时,客户端首先将数据分成多个64M的数据块,每个数据块都会被复制到多个数据节点上以确保容错...

    大数据实验二-HDFS编程实践

    1. **理解HDFS的角色**:HDFS作为Hadoop的核心组件之一,主要负责存储海量数据。理解其在Hadoop生态中的位置对于掌握整个大数据处理流程至关重要。 2. **熟练使用Shell命令**:通过一系列Shell命令的学习与实践,...

    hdfs-over-ftp安装包及说明

    这可能是一个软件模块、插件或完整的应用程序,它的主要目标是为不熟悉HDFS命令行接口的用户提供一个熟悉的FTP界面来访问HDFS。 【压缩包子文件的文件名称列表】: 1. "hdfs-over-ftp使用说明.docx":这份文档详细...

    Hadoop学习总结之二:HDFS读写过程解析

    ### Hadoop学习总结之二:深入理解HDFS读写过程 #### 一、HDFS文件读取流程详解 Hadoop的分布式文件系统(HDFS)是大数据存储与处理的重要基石,其读写机制的设计旨在优化大规模数据集的访问效率与容错性。本文将...

    Hadoop-HDFS-实践教程

    Hadoop-HDFS实践教程是一本专门针对初学者设计的大数据Hadoop分布式存储系统HDFS的学习材料。Hadoop是一个开源的分布式计算框架,它允许用户通过简单易用的编程模型处理大型数据集,而HDFS(Hadoop Distributed File...

    实验二、HDFS shell操作及HDFS Java API编程

    适合刚接触hadoop的学生或小白,内容包括HDFS shell操作及HDFS Java API编程 有图片有代码

    HDFS实验手册.pdf

    通过对HDFS配置文件的学习,我们可以了解到HDFS的核心配置是如何工作的,这对于构建和维护一个高效、可靠的HDFS集群至关重要。理解这些配置的意义和作用可以帮助我们在实际部署和使用HDFS时更好地进行调优和问题排查...

    HDFS文件读写操作

    #### 一、HDFS架构概述 HDFS(Hadoop Distributed File System)是Hadoop项目的核心子项目之一,旨在提供高吞吐量的数据访问,适用于大规模数据集上的应用。HDFS采用了Master/Slave的架构模型,其中包含两大核心...

    动手实验 Hadoop Oracle HDFS直接连接器

    通过这一实验,我们能够学习到如何配置和使用Oracle HDFS直接连接器进行数据的直接访问和操作。 实验1:直接访问单个HDFS文件 实验1的步骤涉及到配置环境、创建外部表、操作Hadoop文件系统以及检查数据库访问结果:...

    python 操作 Hadoop hdfs

    通过学习和理解这些基本操作,你可以构建更复杂的Hadoop HDFS数据处理流程,例如批量读取、并行处理和上传结果等。 总结来说,Python操作Hadoop HDFS主要涉及连接HDFS服务、读取文件、写入文件、下载文件以及执行...

    厦门大学-林子雨-大数据技术基础-第3章 分布式文件系统HDFS-上机练习-熟悉常用的HDFS操作

    HDFS(Hadoop Distributed File System)是Hadoop生态系统中的核心组件之一,它是基于分布式存储技术的文件系统,旨在提供高可靠性、高可扩展性和高性能的数据存储解决方案。HDFS的主要特点是master-slave架构,名称...

    webhdfs-java-client-master

    WebHDFS Java Client是Hadoop生态系统中的一个关键组件,它为开发者提供了在Java环境中与Hadoop分布式文件系统(HDFS)交互的能力。"webhdfs-java-client-master"这个项目很可能是该客户端库的一个源码仓库主分支,...

    数据科学导论实验报告 实验2:熟悉常用的HDFS操作

    在本实验中,我们主要关注的是对Hadoop分布式文件系统(HDFS)的熟悉和操作。HDFS是Hadoop的核心组件之一,它...通过这样的实践,学习者可以更好地理解和掌握Hadoop HDFS的使用,为后续的数据科学项目打下坚实的基础。

Global site tag (gtag.js) - Google Analytics