一、 设计思路

分布式文件系统

在Hadoop中文件系统是一个顶层的抽象。
分布式文件系统相当与对文件系统进行了一个扩展(类似于java中的接口)。
HDFS是分布式文件系统的一个实现,分布式文件系统还有许多其他的实现。

二、设计目标

1、硬件错误 是常态:特别是硬盘的损坏。所以存在副本机制。
2、数据流访问:所有的访问都是访问大量的数据,
使用IO流一直操作。稳定而不是效率。
3、大数据集:存入到HDFS的数据都是海量的数据,不擅长处理小数据。
因为存入过多小数据,每个小数据都需要元数据,容易导致namenode宕机。
4、简单的相关模型:假定文件是一次写入,多次访问
5、移动计算比移动数据便宜
6、多种软硬件的可移植性

三 HDFS架构图

namenode:主要处理用户请求,维护元数据信息
secondarynode:辅助namenode维护元数据
datanode:存储数据
300M的文件需要划分为3个block块,实际的存储磁盘是300M,与block块个数没关系。

四、HDFS元数据管理

元数据分为两部分:
fsimage 和edits
fsimage :保存着一份相对比较完整的元数据 。内存和磁盘中都有
edits:保存着一段时间内的操作日志、元数据。 内存和磁盘中都有
edits会在一些特定条件下(一段时间内,或者在文件达到多大)合并到fsimage中。

五、HDFS元数据合并

1、当达到条件后,secondarynode会通知namenode将要进行元数据合并,并让namenode进行edits切换。
2、secondarynode通过http的方式获取fsimage和edits
3、将fsimage和edits进行合并
4、将新的fsimage发送给namenide替换旧的fsimage
注意:
sencondarynode进行合并的时候是在内存中进行的,所以需要大的内存,部署的时候最好单独部署。

6、HDFS上传文件

1、client通知namenode需要上传文件
2、namenode检查是否有权限。namenode允许client上传文件
3、client将文件分割成block块,并访问namenode询问第一个block块存入何处。
4、namenode通过机架感知原理,找到离客户端最近的一台机器(跨交换机最少的机器),找到该机器可用的block块,返回给client
5、client找到对应的datanode以及对应的block的id ,建立RPC连接,通过rpc连接简历pipline进行数据传输。(数据传输是通过UDP进行包传输)。
6、当第一个block块传递完毕,数据校验。反向的校验机制会给client一个响应,client进行第二个block传递,直至所有block传递完毕
7、等数据传递完毕后,client通知namenode建立元数据
block复制策略:
第一个block存在namenode返回的datanode中
第二个存储在同一个交换机下的datanode
第三个存在不通的交换机

7、HDFS文件读取

1、client通知namenode读取数据
2、namenode检验权限,如果前线通过,那么namenode通过查找元数据,返回所有block块地址
查找block规则:
离client最近
心跳机制(最近活跃的,namenode和datanode间存在心跳机制,datanode会一直返回给namenode自己的状态)
3、client并行访问datanode,读取所有block块并进行拼接。

注意

数据写入是串行:写入有ack机制,需要一个block块验证数据完整性后才能写入下一个。
数据读取是并行:读取不需要数据校验。
当一个block块读取到一般出现异常?
没有断点续传
client会到到副本中找,然后重新读取。

八、JAVA API

   public void hdfs() throws Exception {
//注册驱动
URL.setURLStreamHandlerFactory(new FsUrlStreamHandlerFactory());
String url = "hdfs://node01:8020/install2.log";
InputStream inputStream = new URL(url).openStream();
FileOutputStream fileOutputStream = new FileOutputStream(new File("c:\\software\\hello1.txt"));
IOUtils.copy(inputStream, fileOutputStream);
IOUtils.closeQuietly(inputStream);
IOUtils.closeQuietly(fileOutputStream);
} @Test
public void fileSystem01() throws IOException {
Configuration configuration = new Configuration();
configuration.set("fs.defaultFS", "hdfs://node01:8020");
FileSystem fileSystem = FileSystem.get(configuration);
System.out.println(fileSystem.toString());
fileSystem.close();
} @Test
public void fileSystem02() throws URISyntaxException, IOException {
Configuration configuration = new Configuration();
FileSystem fileSystem = FileSystem.get(new URI("hdfs://node01:8020"), configuration);
System.out.println(fileSystem.toString());
fileSystem.close();
} @Test
public void fileSystem03() throws IOException {
Configuration configuration = new Configuration();
configuration.set("fs.defaultFS", "hdfs://node01:8020");
FileSystem fileSystem = FileSystem.newInstance(configuration);
System.out.println(fileSystem.toString());
fileSystem.close();
}
@Test
public void fileSystem04() throws IOException, URISyntaxException {
Configuration configuration = new Configuration();
FileSystem fileSystem = FileSystem.newInstance(new URI("hdfs://node01:8020"),configuration);
System.out.println(fileSystem.toString());
fileSystem.close();
}

HDFS设计思想、元数据、简单JAVAAPI操作HDFS的更多相关文章

  1. HDFS设计思想

    HDFS设计思想 DataNode:用来在磁盘上存储数据 HDFS  数据存储单元( block ) 1 文件被切分成固定大小的数据block块 •默认数据块大小为 64MB(hadoop1.x版本6 ...

  2. 从一般分布式设计看HDFS设计思想与架构

     要想深入学习HDFS就要先了解其设计思想和架构,这样才能继续深入使用HDFS或者深入研究源代码.懂得了"所以然"才能在实际使用中灵活运用.快速解决遇到的问题.下面这篇博文我们就先 ...

  3. 使用javaAPI操作hdfs

    欢迎到https://github.com/huabingood/everyDayLanguagePractise查看源码. 一.构建环境 在hadoop的安装包中的share目录中有hadoop所有 ...

  4. 使用Java Api 操作HDFS

    如题 我就是一个标题党  就是使用JavaApi操作HDFS,使用的是MAVEN,操作的环境是Linux 首先要配置好Maven环境,我使用的是已经有的仓库,如果你下载的jar包 速度慢,可以改变Ma ...

  5. java操作hdfs到数据库或者缓存

    使用hadoop工具将数据分析出来以后,须要做入库处理或者存到缓存中.不然就没了意义 一下是使用javaAPI操作hdfs存入缓存的代码: <span style="font-fami ...

  6. MyBatis 强大之处 多环境 多数据源 ResultMap 的设计思想是 缓存算法 跨数据库 spring boot rest api mybaits limit 传参

    总结: 1.mybaits配置工2方面: i行为配置,如数据源的实现是否利用池pool的概念(POOLED – This implementation of DataSource pools JDBC ...

  7. 三张图片看懂ZKEACMS的设计思想

    前言 如果你还不知道ZKEACMS,不妨先了解一下. ASP.NET MVC 开源建站系统 ZKEACMS 推荐,从此网站“拼”起来 官方地址:http://www.zkea.net/zkeacms ...

  8. React中的响应式设计思想和事件绑定

    这两个点是react入门非常重要的两个点,以前我们是直接操作dom的形式去做,react的设计思想和以前直接操作dom是完全不同的,react是一个响应式的框架,他在做编程的时候,强调的是我们不要直接 ...

  9. 2 weekend110的HDFS的JAVA客户端编写 + filesystem设计思想总结

    HDFS的JAVA客户端编写  现在,我们来玩玩,在linux系统里,玩eclipse 或者, 即,更改图标,成功 这个,别慌.重新换个版本就好,有错误出错是好事. http://www.eclips ...

随机推荐

  1. 再砸4.35亿美元,LG疯狂扩建太阳能电池生产线

    LG在收缩高分辨率电视和其他消费电子产品业务的同时,在太阳能面板业务上却很明显一直在进行扩张.LG公司表示,他们将斥资4.35亿美元在韩国工厂增加超过6条生产线,使其太阳能电池生产量能够在2018年达 ...

  2. ZABBIX自动发现Redis端口并监控

    由于一台服务器开启许多Redis实例,如果一台一台的监控太耗费时间,也非常容器出错.这种费力不讨好的事情我们是坚决杜绝的,幸好ZABBIX有自动发现功能,今天我们就来用该功能来监控我们的Redis实例 ...

  3. 编译原理-第四章 语法分析-4.7 规范的LR分析

    规范的LR分析 一.规范LR(l)项 二.规范LR(l)项集族 1.构建项目集 2.例 三.规范LR(1)语法分析表 1.构造 2.例1 3.例2 四.LALR语法分析表 1.重要性 2.特点 3.构 ...

  4. HDU 3038 (向量图解)

    题意:\(有n个人坐在zjnu体育馆里面,然后给出m个他们之间的距离, A B X, 代表B的座位比A多X.\) \(然后求出这m个关系之间有多少个错误,所谓错误就是当前这个关系与之前的有冲突\) \ ...

  5. P1666前缀单词

    题目传送门点我传送 Ⅰ.字典树+树型DP 非常奇妙的一种解法 第一部分:构建树 先对来的单词读入,插入字典树 然后对于一颗字典树,其实是有很多无用边的,所以我们需要删去一些边 删去非单词节点和非单词节 ...

  6. M - Little Pony and Harmony Chest 状压dp

    M - Little Pony and Harmony Chest 怎么感觉自己越来越傻了,都知道状态的定义了还没有推出转移方程. 首先这个a的范围是0~30   这里可以推出 b数组的范围 0~60 ...

  7. spring mvc从前台往后台传递参数的三种方式

     jsp页面: 第一种:使用控制器方法形参的方式(常用) 第二种:使用模型传参的方式(如果前台往后台传递的参数非常多,如果还使用形参的方式传递,非常复杂.我们可以使用模型传参的方式,把多 个请求的参数 ...

  8. 微信小程序下拉刷新时有部分区域不随着下拉移动

    问题 区域元素使用(position: fixed),小程序页面下拉刷新时,这部分区域不会随页面下拉移动. 如何解决 删除设置的top属性

  9. CodeForces-650B Image Preview 二分+模拟

    CodeForces-650B Image Preview 题意 手机里有n张图片,打开相机出现的是第一张,第一张右滑得到第n张,同理第n张左滑得到第1张,翻页耗费a秒,看照片耗费1s,但是照片有横屏 ...

  10. idea 2020 配置本地 Maven 仓库

    问题: 默认Maven 仓库地址在C盘,C盘是系统盘能少放东西尽量少放. 只需要简单的两步 1.File~Settings 然后搜索 maven 如下图绿框 修改成你自己的 Maven 仓库 2.Fi ...