[优势]html
支持超大文件 超大文件在这里指的是几百M,几百GB,甚至几TB大小的文件。前端
检测和快速应对硬件故障在集群的环境中,硬件故障是常见的问题。由于有上千台服务器链接在一块儿,这样会致使高故障率。所以故障检测和自动恢复是hdfs文件系统的一个设计目标node
流式数据访问应用程序能以流的形式访问数据集。主要的是数据的吞吐量,而不是访问速度。linux
简化的一致性模型 大部分hdfs操做文件时,须要一次写入,屡次读取。在hdfs中,一个文件一旦通过建立、写入、关闭后,通常就不须要修改了。这样简单的一致性模型,有利于提升吞吐量。ios
[缺点]面试
低延迟数据访问如和用户进行交互的应用,须要数据在毫秒或秒的范围内获得响应。因为hadoop针对高数据吞吐量作了优化,牺牲了获取数据的延迟,因此对于低延迟来讲,不适合用hadoop来作。算法
大量的小文件Hdfs支持超大的文件,是经过数据分布在数据节点,数据的元数据保存在名字节点上。名字节点的内存大小,决定了hdfs文件系统可保存的文件数量。虽然如今的系统内存都比较大,但大量的小文件仍是会影响名字节点的性能。数据库
多用户写入文件、修改文件Hdfs的文件只能有一次写入,不支持写入,也不支持修改。只有这样数据的吞吐量才能大。apache
不支持超强的事务没有像关系型数据库那样,对事务有强有力的支持。
详情查看:https://www.cnblogs.com/sxt-zkys/archive/2017/07/24/7229857.html编程
<property> <name>dfs.block.size</name>//block的大小,单位字节,后面会提到用处,必须是512的倍数,由于采用crc作文件完整性校验,默认配置512是checksum的最小单元 <value>5120000</value> </property>
ps.循环冗余校验(Cyclic Redundancy Check, CRC)是一种根据网络数据包或电脑文件等数据产生简短固定位数校验码的一种散列函数,主要用来检测或校验数据传输或者保存后可能出现的错误。它是利用除法及余数的原理来做错误侦测的。
第一套付费产品是 Cloudera Enterpris
1)文件写入Client 向 NameNode 发起文件写入的请求。NameNode 根据文件大小和文件块配置状况,返回给 Client 它所管理部分 DataNode 的信息。Client 将文件划分为多个 Block,根据 DataNode 的地址信息,按顺序写入到每个 DataNode 块中。
2)文件读取Client 向 NameNode 发起文件读取的请求。NameNode 返回文件存储的 DataNode 的信息。Client 读取文件信息。
ps.http://www.makaidong.com/%E5%8D%9A%E5%AE%A2%E5%9B%AD%E6%8E%92%E8%A1%8C/9053.shtml
datanode经过长链接与namenode保持通讯。(正确)【答案有分歧,根据本身理解回答便可】
长链接:Client 方与Server 方先创建通信链接,链接创建后不断开,而后再进行报文发送和接收。这种方式下因为通信链接一直存在,此种方式经常使用于点对点通信。
短链接:Client 方与Server 每进行一次报文收发交易时才进行通信链接,交易完毕后当即断开链接。此种方式经常使用于一点对多点通信,好比多个Client 链接一个Server。
Hadoop自身具备严格的权限管理和安全措施保障集群正常运行。(错误)
slave节点要存储数据,因此它的磁盘越大越好。(错误)
一旦slave节点宕机,数据恢复是一个难题。
Hadoop集群三种做业调度算法介绍
Hadoop集群中有三种做业调度算法,分别为FIFO,公平调度算法和计算能力调度算法。
先来先服务算法FIFO:FIFO比较简单,hadoop中只有一个做业队列,被提交的做业按照前后顺序在做业队列中排队,新来的做业插入到队尾。一个做业运行完后,老是从队首取下一个做业运行。这种调度策略的优势是简单、易于实现,同时也减轻了jobtracker的负担。可是它的缺点也是显然的,它对全部的做业都一视同仁,没有考虑到做业的紧迫程度,另外对小做业的运行不利。
公平调度算法:
这种策略在系统中配置了任务槽,一个任务槽能够运行一个task任务,这些任务就是一个大的做业被切分后的小做业。当一个用户提交多个做业时,每一个做业能够分配到必定的任务槽以执行task任务(这里的任务槽能够理解为能够运行一个map任务或reduce任务)。若是把整个hadoop集群做业调度跟操做系统的做业调度相比,第一种FIFO就至关于操做系统中早期的单道批处理系统,系统中每一个时刻只有一道做业在运行,而公平调度至关于多道批处理系统,它实现了同一个时刻多道做业同时运行。因为linux是多用户的,如有多个用户同时提交多个做业会怎样?在这种策略中给每一个用户分配一个做业池,而后给每一个做业池设置一个最小共享槽个数,什么是最小共享槽个数呢?先要理解一个最小什么意思,最小是指只要这个做业池须要,调度器应该确保可以知足这个做业池的最小任务槽数的需求,可是如何才能确保在它须要的时候就有空的任务槽,一种方法是固定分配必定数量的槽给做业池不动,这个数量至少是最小任务槽值,这样只要在做业池须要的时候就分配给它就好了,可是这样在这个做业池没有用到这么多任务槽的时候会形成浪费,这种策略其实是这样作的,看成业池的需求没有达到最小任务槽数时,名义上是本身的剩余的任务槽会被分给其余有须要的做业池,当一个做业池须要申请任务槽的时候若系统中没有了,这时候不会去抢占别人的(也不知道抢谁的啊),只要当前一个空的任务槽释放会被当即分配给这个做业池。
在一个用户的做业池内,多个做业如何分配槽这个能够自行选择了,如FIFO。因此这种调度策略分为两级:
第一级,在池间分配槽,在多用户的状况下,每一个用户分配一个做业池。
第二级,在做业池内,每一个用户可使用不一样的调度策略。
计算能力调度:计算能力调度和公平调度有点相似,公平调度策略是以做业池为单位分配任务槽,而计算能力调度是以队列为单位分配tasktracker(集群中一个节点),这种调度策略配置了多个队列,每一个队列配置了最小额度的tasktracker数量,同公平调度策略相似,当一个队列有空闲的tasktracker时,调度器会将空闲的分配给其余的队列,当有空闲的tasktracker时,因为这时候可能有多个队列没有获得最小额度的tasktracker而又在申请新的,空闲的tasktracker会被优先分配到最饥饿的队列中去,如何衡量饥饿程度呢?能够经过计算队列中正在运行的任务数与其分得的计算资源之间的比值是否最低来判断的,越低说明饥饿程度越高。
计算能力调度策略是以队列的方式组织做业的,因此一个用户的做业可能在多个队列中,若是不对用户作必定的限制,极可能出如今多个用户之间出现严重不公平的现象。因此在选中新做业运行时候,还须要考虑做业所属的用户是否超过了资源的限制,若是超过,做业不会被选中。
对于在同一个队列中,这种策略使用的是基于优先级的FIFO策略,可是不会抢占。
集群内每一个节点都应该配 RAID,这样避免单磁盘损坏,影响整个节点运行。(错误 )
hadoop 自己就具备冗余能力,因此若是不是很严格不须要都配备 RAID。
每一个 map 槽就是一个线程。(错误)
map 槽---->map slot。(org.apache.hadoop.mapred.TaskTracker.TaskLaucher.numFreeSlots)是一个逻辑值,而不是对应着一个县城或者进程。Mapreduce 的 input split 就是一个 block。(错误)
InputFormat的数据划分、split调度、数据读取三个问题的浅析www.aboutyun.com/thread-6803-1-1.html
Hadoop 环境变量中的 HADOOP_HEAPSIZE 用于设置全部 Hadoop 守护线程的内存。它默认是 200 GB。(错误)
hadoop 为各个守护进程(namenode,secondarynamenode,resourcemanager,datanode,nodemanager)统一分配的内存在 hadoop-env.sh 中设置,参数为 HADOOP_HEAPSIZE,默认为 1000M。
DataNode 首次加入cluster 的时候,若是log 中报告不兼容文件版本,那须要NameNode执行hdfs namenode -format操做格式化磁盘。(错误)
添加了一个新的标识符 ClusterID 用于标识集群中全部的节点。当格式化一个 Namenode,须要提供这个标识符或者自动生成。这个 ID 能够被用来格式化加入集群的其余 Namenode。
持续更新~~~~