Hadoop Distributed File System,简称HDFS,是一个分布式文件系统。
1. 特性:
1.1. 大数据集
运行在HDFS上的应用具有很大的数据集。可以是从GB到TB级的。
1.2. 高容错性
在hadoop集群环境下,每份数据都被保存在多个结点里边。一个结点的不可用不会导致该结点存储的数据不可用。
1.3. 高吞吐量
跑在Hdoop上的应用,更多的是做批处理,HDFS的设计中更多的考虑到了数据批处理,而不是用户交互处理。比之数据访问的低延迟问题,更关键的在于数据访问的高吞吐量。
1.4. 简单一致的模型
采用了"一次写入,多次读取"的模型。这一假设简化了数据一致性问题,并且使高吞吐量的数据访问成为可能。Map/Reduce应用或者网络爬虫应用都非常适合这个模型。目前还有计划在将来扩充这个模型,使之支持文件的附加写操作。
1.5. 可移植性
HDFS在设计的时候就考虑到平台的可移植性。这种特性方便了HDFS作为大规模数据应用平台的推广。 (可以这样理解:基于java,并且在HDFS是在本地FileSystem之上抽象出来的文件系统)
1.6. 移动计算比移动数据更高效
一个应用请求的计算,离它操作的数据越近就越高效,在数据达到海量级别的时候更是如此。因为这样就能降低网络阻塞的影响,提高系统数据的吞吐量。将计算移动到数据附近,比之将数据移动到应用所在显然更好。HDFS为应用提供了将它们自己移动到数据附近的接口。
一个简单的例子:程序X在计算机A上,数据在计算机A,B和C上。普通的做法是在A上运行程序X,读取A,B,C上的数据,然后进行计算(或者是边读取边计算)。hadoop的做法是:将程序X同时也发送到B和C上,A,B,C同时读取本地计算机上的数据进行计算。得出结果之后再进行汇总(当然这里只是通俗的举了个例子,实际上hadoop处理数据更为复杂)。这样就避免了在网络上传输大量数据导致的等待和B,C计算能力的浪费。
2. 概念:
nameNode 和 dataNode
HDFS采用了master/slave架构。HDFS由一个nameNode和若干个dataNode组成。
2.1 nameNode
nameNode类似于一个仓库管理员,负责记录数据存储在哪些仓库(dataNode)的哪些地方,同时也负责和客户端(Client)对文件的访问。nameNode作为一个中心服务器。因此当nameNode出现故障时是比较致命的。为了防止出现恶劣的后果,通常集群环境下还有一个Secondary NameNode 作为备份。
2.2 dataNode
dataNode负责文件的存储(可以理解为仓库)。
一个文件被分为多个文件块存储在一组dataNode里边。Namenode执行文件系统的名字空间操作,比如打开、关闭、重命名文件或目录。它也负责确定数据块到具体Datanode节点的映射。Datanode负责处理文件系统客户端的读写请求。在Namenode的统一调度下进行数据块的创建、删除和复制。
3. 文件流
3.1 读文件
客户端(client)用FileSystem的open()函数打开文件,DistributedFileSystem用RPC调用元数据节点,得到文件的数据块信息。对于每一个数据块,元数据节点返回保存数据块的数据节点的地址。DistributedFileSystem返回FSDataInputStream给客户端,用来读取数据。客户端调用stream的read()函数开始读取数据。DFSInputStream连接保存此文件第一个数据块的最近的数据节点。Data从数据节点读到客户端(client),当此数据块读取完毕时,DFSInputStream关闭和此数据节点的连接,然后连接此文件下一个数据块的最近的数据节点。当客户端读取完毕数据的时候,调用FSDataInputStream的close函数。
整个过程就是如图所示
3.2 写文件
客户端调用create()来创建文件,DistributedFileSystem用RPC调用元数据节点,在文件系统的命名空间中创建一个新的文件。元数据节点首先确定文件原来不存在,并且客户端有创建文件的权限,然后创建新文件。DistributedFileSystem返回DFSOutputStream,客户端用于写数据。客户端开始写入数据,DFSOutputStream将数据分成块,写入data queue。Data queue由Data Streamer读取,并通知元数据节点分配数据节点,用来存储数据块(每块默认复制3块)。分配的数据节点放在一个pipeline里。Data Streamer将数据块写入pipeline中的第一个数据节点。第一个数据节点将数据块发送给第二个数据节点。第二个数据节点将数据发送给第三个数据节点。DFSOutputStream为发出去的数据块保存了ack queue,等待pipeline中的数据节点告知数据已经写入成功。如果数据节点在写入的过程中失败:关闭pipeline,将ack queue中的数据块放入data queue的开始。
整个过程如图所示:
4. 使用命令行操作HDFS
1.添加目录 hadoop fs -mkdir /abc
就在HDFS下创建了一个abc的目录
2.列出HDFS根目录下的文件 hadoop fs -ls /
列出根目录下的所有文件 hadoop fs -ls
3.复制文件 hadoop fs -put /tianlong/test /abc
4.查看文件 hadoop fs -cat /abc/test
5.从HDFS上取文件 hadoop fs -get /abc/test ~/test.txt 把HDFS里的test文件 取回 当前用户目录的test.txt
5. 编程操作HDFS
下边简单介绍几个常用的API,具体的例子网上有很多,就不重复贴了。
FileSystem Hadoop文件系统通过Hadoop Path 对象来代表文件,是一个通用的文件系统API。
Hadoop中关于文件操作类基本上全部是在"org.apache.hadoop.fs"包中,这些API能够支持的操作包含:打开文件,读写文件,删除文件等。
Hadoop类库中最终面向用户提供的接口类是FileSystem,该类是个抽象类,只能通过来类的get方法得到具体类。get方法存在几个重载版本,常用的是这个:
static FileSystem get(Configuration conf) throws IOException;
static FileSystem get(URI uri, Configuration conf) throws IOException;
或者从Path对象中获得FileSystem实例
Path dst = new Path("hdfs://192.168.0.111:9000/home");
// 得到dst的FileSystem.
FileSystem hdfs = dst.getFileSystem(conf);
该类封装了几乎所有的文件操作,例如mkdir,delete等。综上基本上可以得出操作文件的程序库框架:
operator()
{
得到Configuration对象
得到FileSystem对象
进行文件操作
}
- 大小: 16.7 KB
- 大小: 15.6 KB
分享到:
相关推荐
这里 `<hostname>` 是数据库服务器地址,`<port>` 是数据库监听端口,`<database>` 是数据库名,`<tablename>` 是表名,`<username>` 和 `<password>` 是数据库连接的凭证,`<hdfs_path>` 指定HDFS上的目标存储位置...
提供的文档`hadoop学习笔记.doc`可能包含了Hadoop的基础概念、操作指南、实战案例等,建议仔细阅读以深入了解Hadoop的用法和原理。 至此,你已经成功安装了Hadoop,并且具备了运行一个基本Hadoop集群的基础。接...
**Hadoop学习笔记详解** Hadoop是一个开源的分布式计算框架,由Apache基金会开发,主要用于处理和存储海量数据。它的核心组件包括HDFS(Hadoop Distributed File System)和MapReduce,两者构成了大数据处理的基础...
内容概要: 架构、流程、机制、原理、环境、数据...HadoopHDFS-JavaRPC操作代码,含服务端和客户端代码; hadoop生态现状、介绍、部署; hadoop2.4.1伪分布式搭建; 分布式文件系统; 复安装过程详细步骤; hdfs笔记;
【标题】"传智黑马赵星老师hadoop七天课程资料笔记-第一天(全)" 提供的是一份关于Hadoop的全面学习资料,主要聚焦在Hadoop的第一天课程内容。这个资源包涵盖了从基础概念到实际操作的多个方面,旨在帮助初学者快速...
在`/usr/Hadoop_installs/hadoop-1.1.2/conf/hdfs-site.xml`中设置HDFS的数据块副本数量: ```xml <configuration> <property> <name>dfs.replication</name> <value>1</value> </property> </configuration> `...
解决这些问题通常需要对Hadoop的配置机制有深入理解,包括core-site.xml、hdfs-site.xml、yarn-site.xml和mapred-site.xml等配置文件的设置。 总的来说,这个压缩包提供了一个在Windows环境下本地调试Hadoop的起点...
【标题】"传智黑马赵星老师hadoop七天课程资料笔记-第七天(全)" 涵盖了Hadoop技术栈的重要知识点,这是一份关于Hadoop学习的详尽资料,特别关注了课程的最后一天内容。在Hadoop的学习过程中,第七天通常会涉及到系统...
【HADOOP学习笔记】 Hadoop是Apache基金会开发的一个开源分布式计算框架,是云计算领域的重要组成部分,尤其在大数据处理方面有着广泛的应用。本学习笔记将深入探讨Hadoop的核心组件、架构以及如何搭建云计算平台。...
Hadoop的源码项目结构主要包括hadoop-common-project、hadoop-hdfs-project、hadoop-mapreduce-project、hadoop-yarn-project等,每个项目下又有多个子项目,包含了Hadoop运行所需的各个组件和客户端等。 在实际...
三、Hadoop学习笔记之三:用MRUnit做单元测试 MRUnit是针对MapReduce任务的单元测试框架,它允许开发者对MapReduce作业进行单元测试,确保每个Mapper和Reducer的功能正确性。通过MRUnit,可以在不实际运行Hadoop集群...
1. HDFS(Hadoop Distributed File System):这是一个高度容错的系统,设计用来运行在廉价的硬件上。HDFS具有高吞吐量的特点,适合于有大量数据的应用程序。HDFS将数据存储为一系列的块,这些块默认大小为128MB,...
"Hadoop学习笔记整理" 本篇笔记对Hadoop进行了系统的介绍和总结,从大数据的基本流程到Hadoop的发展史、特性、集群整体概述、配置文件、HDFS分布式文件系统等方面都进行了详细的讲解。 一、大数据分析的基本流程 ...
标题和描述中提到的是“传智黑马赵星老师hadoop七天课程资料笔记-第二天(全)”,这表明这是一个关于Hadoop技术的深度学习资源,主要聚焦于赵星老师的Hadoop教学课程中的第二天内容。通常,这样的课程会涵盖Hadoop的...
【描述】这部分内容是赵星老师在传智黑马的Hadoop七天课程中的第三天教学资料,包含了丰富的学习材料,如PPT、文本笔记、示例数据和工作流程详解,旨在通过实例帮助学员消化吸收Hadoop的核心概念和技术。 【标签】...
这个“Hadoop学习笔记”涵盖了Hadoop生态系统中的核心组件,包括HDFS(Hadoop分布式文件系统)、HBase(一个分布式、列式存储的数据库)、Hive(数据仓库工具)以及Spark(一个快速、通用且可扩展的数据处理引擎)。...
在“传智黑马赵星老师hadoop七天课程资料笔记-第四天(全)”的学习中,我们深入探讨了Hadoop这一分布式计算框架的关键概念和技术。Hadoop是Apache软件基金会的一个开源项目,它设计用于处理和存储海量数据,通过...
- elasticsearch开始使用|├── qs-hadoop-file -- 学习相关的资料文件、以及遇到的坑点笔记|├── qs-hadoop-flink -- 分布式数据流处理和批量数据处理框架 flink 初次见面|├── qs-hadoop-hdfs -- hadoop核心...
理解HDFS的架构和工作原理对于深入学习Hadoop和大数据处理至关重要,它是构建大数据解决方案的基石。在实践中,根据具体场景调整HDFS的配置参数,如数据块大小、副本数量、磁盘目录策略等,能够进一步优化性能和可靠...