HDFS的介绍

HDFS

HDFS

什么是HDFS文件系统?
HDFS是大数据开源框架hadoop的组件之一,
全称(Hadoop Distributed File System),
它是一个分布式文件系统,由多台服务器联合起来实现文件存储功能,
通过目录树来定位文件,集群中的服务器都有有各自的角色。

HDFS文件系统有什么特点?
1.数据通过副本存储,提高容错性
2.能够处理PB级及以上数据,可处理百万级文件数量
3.节约成本,可分布在“廉价”机器上
4.不适合低延时数据访问
5.不适合对大量文件的存储和访问
6.单线程操作文件不能多用户执行写操作,并且不支持文件随机修改
Hadoop中需要启动的进程和作用?
namenode:
负责接受客户端读写数据请求
负责数据块副本的存储策略
负责管理快数据的映射关系
储存元数据信息

datanode:
存储实际的数据块
真实处理数据块的读/写操作

Secondary NameNode:
辅助后台程序,与NameNode进行通信,定期合并FSimage和Edits编辑日志,
合并为最新的镜像文件。
保存HDFS元数据的快照。

resourcemanager:
统一资源调度和管理器
处理客户端请求
监控NodeManager
启动或监控ApplicationMaster
资源的分配与调度

nodemanager:提供计算资源
管理单个节点上的资源
处理来自ResourceManager的命令
处理来自ApplicationMaster的命令

HDFS默认数据块得大小是多少?为什么?
HDFS目前默认块大小在Hadoop2.x版本中是128M,老版本中是64M,
因为目前磁盘的传输率约为100M/s,而HDFS读取文件时最佳的寻址
时间为10ms,寻址时间为传输时间的百分之1时最佳,所以定义块
大小为128M,1秒左右可以快速读取完毕;本质上HDFS的块大小取决于
磁盘的传输速率

为什么HDFS中的块的大小不能太大,也不能设置太小
1.HDFS的块设置太小会增加寻址时间,程序一直在找块的开始位置
2.如果块设置的太大,从磁盘传输数据的时间会明显大于定位这个块开始位置所需的时间,
导致程序处理这个数据时会非常慢

为什么HSDFS不支持存储小文件?
1)存储大量小文件会占用NameNode大量的内存和磁盘来存储文件目录和块信息。
是不可取的,因为NameNode的内存是有限的;
2)读取小文件时寻址时间会超过读取时间,不合理,违反了HDFS的设计目标.

Hadoop fs | hdfs dfs 命令分类
本地文件 -> HDFS
-put 将本地数据上传至hdfs
-copyFromLocal 将本地文件数据拷贝到hdfs
-moveFromLocal 将本地文件数据移动到hdfs,成功后本地数据会删除
-appendToFile 追加一个文件到已经存在的文件末尾

HDFS与HDFS之间
-ls 查看hdfs文件目录
-mkdir 在HDFS上创建目录
-rm 删除文件或者文件夹
-rmr | -rm -r 递归删除
-cp 从一个目录拷贝文件至另一目录
-mv 在HDFS目录中移动文件
-chown 修改文件所属用户权限
-chmod 修改文件所属读写权限
-du -h 文件夹暂用的空间大小
-df -h 查看系统分区情况
-cat 查看文件

HFDS -> 本地
-get 从hdfs下载文件至本地
-getmerge 合并hdfs目录下的文件至本地
-copyToLocal 从hdfs拷贝文件至本地

其他
-setrep 设置文件副本数(注意:具体的副本数得看DataNode的数量)
-help 帮助命令

说说hdfs的文件上传(写数据)的流程
1.首先客户端通过Distributed FileSystem模块向NameNode请求上传文件,
NameNode检查目标文件是否已存在,父目录是否存在。
2.NameNode返回是否可以上传。
3.如果文件大于128M则分块存储,
客户端请求第一个 Block上传到哪几个DataNode服务器上。
4.NameNode根据副本储存策略返回3个DataNode节点,假如为dn1、dn2、dn3。
5.客户端通过FSDataOutputStream模块请求dn1上传数据,dn1收到请求调用dn2,
dn2调用dn3,建立通信管道完成,dn1、dn2、dn3逐级应答客户端。
6.客户端以Packet为单位往dn1上传第一个Block数据,
dn1收到Packet就会传给dn2,dn2传给dn3;
dn1,dn2,dn3每接收packet会放入一个待写队列等待写入数据,落盘。
7.当一个Block传输完成之后,客户端再次请求NameNode上传第二个Block的服务器,
重复执行3-6步。

我们在上传文件的时候如何namenode选取的datanode存储副本?有什么优势?
HDFS的放置策略是将一个副本放置在本地机架中的一个节点上,
将另一个副本放置在本地机架中的另一个节点上,
最后一个副本放置在不同机架中的另一个节点上
(一个副本在Client所处的节点上。如果客户端在集群外,
随机选一个,第二个副本和第一个副本位于相同机架,
随机节点,第三个副本位于不同机架,随机节点)。
优点:该策略减少了机架间的写流量,通常可以提高写性能。
机架故障的机会远小于节点故障的机会。此策略不会影响数据的可靠性和可用性保证

说说文件的下载流程
1.客户端通过Distributed FileSystem向NameNode请求下载文件,
NameNode通过查询元数据,找到文件块所在的DataNode地址。
2.挑选一台DataNode(就近原则,然后随机)服务器,请求读取数据。
3.DataNode开始传输数据给客户端(从磁盘里面读取数据输入流,
以Packet为单位来做校验)。
4.客户端以Packet为单位接收,先在本地缓存,然后写入目标文件。

描述一下Namenode和secondarynamenode的工作机制
1. NameNode启动和工作内容
1.1第一次启动NameNode格式化后,创建Fsimage和Edits文件。
如果不是第一次启动,会加载编辑日志和镜像文件到内存。
1.2客户端对元数据进行增删改的请求。
1.3NameNode记录操作日志,更新滚动日志。
1.4NameNode在内存中对元数据进行增删改。
2. Secondary NameNode工作内容
2.1 2NN询问NN是否需要CheckPoint(合并镜像和编辑日志),并带回NameNode是否执行结果。
2.2 2NN请求执行CheckPoint
2.3 NN滚动正在写的Edits编辑日志。
2.4 将滚动前的编辑日志和镜像文件拷贝到2NN。
2.5 2NN加载编辑日志和镜像文件到内存,并执行合并,生成新的镜像文件fsimage.chkpoint。
2.6 2NN拷贝fsimage.chkpoint到NN。
2.7 NN将fsimage.chkpoint重新命名成fsimage,替换之间旧的fsimage

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ava实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),可运行高分资源 Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现
C语言是一种广泛使用的编程语言,它具有高效、灵活、可移植性强等特点,被广泛应用于操作系统、嵌入式系统、数据库、编译器等领域的开发。C语言的基本语法包括变量、数据类型、运算符、控制结构(如if语句、循环语句等)、函数、指针等。下面详细介绍C语言的基本概念和语法。 1. 变量和数据类型 在C语言中,变量用于存储数据,数据类型用于定义变量的类型和范围。C语言支持多种数据类型,包括基本数据类型(如int、float、char等)和复合数据类型(如结构体、联合等)。 2. 运算符 C语言中常用的运算符包括算术运算符(如+、、、/等)、关系运算符(如==、!=、、=、<、<=等)、逻辑运算符(如&&、||、!等)。此外,还有位运算符(如&、|、^等)和指针运算符(如、等)。 3. 控制结构 C语言中常用的控制结构包括if语句、循环语句(如for、while等)和switch语句。通过这些控制结构,可以实现程序的分支、循环和多路选择等功能。 4. 函数 函数是C语言中用于封装代码的单元,可以实现代码的复用和模块化。C语言中定义函数使用关键字“void”或返回值类型(如int、float等),并通过“{”和“}”括起来的代码块来实现函数的功能。 5. 指针 指针是C语言中用于存储变量地址的变量。通过指针,可以实现对内存的间接访问和修改。C语言中定义指针使用星号()符号,指向数组、字符串和结构体等数据结构时,还需要注意数组名和字符串常量的特殊性质。 6. 数组和字符串 数组是C语言中用于存储同类型数据的结构,可以通过索引访问和修改数组中的元素。字符串是C语言中用于存储文本数据的特殊类型,通常以字符串常量的形式出现,用双引号("...")括起来,末尾自动添加'\0'字符。 7. 结构体和联合 结构体和联合是C语言中用于存储不同类型数据的复合数据类型。结构体由多个成员组成,每个成员可以是不同的数据类型;联合由多个变量组成,它们共用同一块内存空间。通过结构体和联合,可以实现数据的封装和抽象。 8. 文件操作 C语言中通过文件操作函数(如fopen、fclose、fread、fwrite等)实现对文件的读写操作。文件操作函数通常返回文件指针,用于表示打开的文件。通过文件指针,可以进行文件的定位、读写等操作。 总之,C语言是一种功能强大、灵活高效的编程语言,广泛应用于各种领域。掌握C语言的基本语法和数据结构,可以为编程学习和实践打下坚实的基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值