
Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。其中集群的概念就是通过多台计算机完成同一个工作,以达到更高的效率。将一个非常大的数据块分成许多小的数据块并交由多台计算机进行处理,最后再汇总得到最终结果。
节点是指一个可以独立按照分布式协议完成一组逻辑的程序个体。在具体的项目中,一个节点表示的是一个操作系统上的进程。
Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,而MapReduce则为海量的数据提供了计算。分布式文件管理系统中的一种,其具体定义就是把客户端的大文件存放在很多节点的数据块中。

NameNode的作用是管理文件目录结构,接受用户的操作请求,是管理数据节点。 ① 文件目录与数据块之间的关系。是静态的,存放在磁盘上的,通过fsimage和edits文件来维护; ② 数据块与节点之间的关系。不持久放到磁盘,每当集群启动的时候,会自动建 立这些信息,所以一般都放在内存中。所以它是整个文件系统的管理节点。它维护着整个文件系统的文件目录树,文件/目录的元信息和每个文件对应的数据块列表,接收用户的操作请求。 ① fsimage(文件系统镜像):元数据的镜像文件。存储某一时段NameNode内存与元数据信息③fstime:保存最近一次checkpoint的时间DataNode的作用是HDFS中真正存储数据的。内部以block块为单位进行读写的,每128M数据为一个block块。(在hadoop目录下的core-default.xml文件中可以对参数dfs.blocksize的block块的大小进行具体设置)。hadoop -fs -touchz 创建空白文件
hadoop -fs -ls 显示当前目录结构
hadoop -fs -du 统计目录下各文件大小hadoop -fs -count 统计文件(夹)数量hadoop -fs -mkdir 创建空白文件夹hadoop -fs -rm 删除文件/空白文件夹hadoop -fs -rm -r 递归删除(删除非空文件夹)大家可以可以看出来大部分的命令还是同之前的shell命令十分相似的

①、使用HDFS提供的客户端开发库,向远程的NameNode中发送RPC请求②、NameNode会检查要创建的文件是否存在,创建者是否有权限进行操作,成功则会为文件创建一个记录,失败将抛出异常。③、当客户端开始写入文件的时候,开发库会将block块分成多个packets(信息包,默认64kb),并在内部以‘data queue’(数据队列:先进先出,且不带数据拷贝)的形式管理这些packets,并向NameNode申请新的Block,获取用来存储replicas(副本,默认是3)的合适的datanodes列表,列表的大小根据在NameNode中对replication的设置而定。④、开始以管道(pipeline)的形式将packet写入到replicas中。开发库以流的形式写入到第一个DataNode,该DataNode把该packet存储之后,再将其再次pipeline的下一个DataNode,直到最后一个DataNode,这种写数据的方式呈流水线的形式。⑤、最后一个DataNode成功存储后会返回一个ack packet(确认包),在pipeline中传递至客户端,在客户端的开发库中维护者ack queue,成功收到DataNode返回的ackpacket后会从ack queue中移除相应的packet。⑥、如果在传输过程中,有某个DataNode出现了故障,那么当前的pipeline会被关闭出现故障的DataNode会从当前的pipeline中移除,剩余的block会继续剩下的DataNode中继续以pipeline的形式传输,同时NameNode会分配一个新的DataNode,保持replicas设定的数量。
①、client访问NameNode,查询元数据信息,获得这个文件的数据块位置列表, 返回输入流对象。②、就近挑选一台datanode服务器,请求建立输入流③、DataNode向输入流中写数据,以packet为单位进行校验
四、HDFS的内部机制
重点:两个参数和NameNode与DataNode宕机所需的时间 因为hdfs具有心跳机制,所以在搭建分布式集群时,必须进行时间同步。 心跳机制的原因:NameNode是集群中的老大,负责进行任务分工,要进行分工,必须知道各个DataNode结点的存活状态。 NameNode怎么知道DataNode的存活状态?DataNode每隔3秒向NameNode发送心跳报告,如果NameNode连续10次没有收到DataNode的心跳报告,则认为DataNode可能死了,但是并没有断定其死亡(NameNode还需去验证)。这个时候,NameNode向DataNode发送一次检查,发送一次检查的时间是5min,如果一次检查没有返回信息,NameNode还会再进行一次检查,如果再没有收到信息,NameNode就认为该DataNode死亡。 所以,NameNode最终判断DataNode死亡(宕机)需要10*3+5*60*2= 630秒。 (1)HDFS的启动和关闭都是先启动NameNode,在启动DataNode,最后在启动 secondarynamenode。在HDFS的启动命令start-dfs.sh执行的时候,HDFS会先自动进入安全模式。为了确保用户的操作是可以高效的执行成功的,在HDFS发现自身不完整的时候,会进入安全模式。保护自己。 (3)在正常启动之后,如果HDFS发现所有的数据都是齐全的,那么HDFS会启动的退出安全模式。hdfs dfsadmin -safemode leave #强制 NameNode 退出安全模式
hdfs dfsadmin -safemode enter #进入安全模式
hdfs dfsadmin -safemode get #查看安全模式状态
hdfs dfsadmin -safemode wait #等待,一直到安全模式结束
安全模式下用户可以进行的操作:不修改元数据的操作,例如ls查询、cat查看文件内容、get下载等。用户不能修改的只有抽象目录树。不可以进行的操作:修改元数据的操作。例如创建目录、上传、修改文件名、文件追加。 默认情况下,每个数据块有三个副本,这三个副本怎么存放呢? 第二个副本一般存放在与第一个副本不同机架的任意结点上 第三个副本一般存放在与第一个副本同一机架的不同结点上 原因:在风险度相同(第三个副本存放在机架1和机架2,机架断电的可能性相同)的情况下,优先选择网络传输少的。
冷备份发生在数据库已经正常关闭的情况下,当正常关闭时会提供给我们一个完整的数据库。冷备份是将关键性文件拷贝到另外位置的一种说法。对于备份数据库信息而言,冷备份是最快和最安全的方法。简单说法就是:离线(没有新的数据来)复制一份保存,有事就直接用这备份来恢复。
(3)容易恢复到某个时间点上(只需将文件再拷贝回去) (4)能与归档方法相结合,作数据库“最新状态”的恢复。 (1)单独使用时,只能提供到“某一时间点上”的恢复。 (2)在实施备份的全过程中,数据库必须要作备份而不能作其它工作。也就是说,在冷备份过程中,数据库必须是关闭状态。 (3)若磁盘空间有限,只能拷贝到磁带等其它外部存储设备上,速度会很慢。值得注意的是冷备份必须在数据库关闭的情况下进行,当数据库处于打开状态时,执行数据库文件系统备份是无效的 。
热备份是在数据库运行的情况下,备份数据库操作的sql语句,当数据库发生问题时,可以重新执行一遍备份的sql语句。简单说就是:在线的保存对数据库操作的sql语句,有事就再跑一遍这些sql语句。
(5)恢复是快速的,在大多数情况下在数据库仍工作时恢复。 (2)若热备份不成功,所得结果不可用于时间点的恢复。 (3)因难于维护,所以要特别仔细小心,不允许“以失败而告终”