1、分布式文件系统与HDFS
<1>分布式系统文件系统的特点:
	(1)数据量越来越多,在一个操作系统管辖的范围存储不了,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,因此迫切需要一种系统来管理多台机		器上的文件,这就是分布式文件管理系统。
	(2)分布式文件系统是一种允许文件通过网络在多台主机上分享的文件系统,可让多机器上的多用户分享文件和存储空间。
	(3)通透性,让实际上是通过网络来访问文件的动作,由程序与用户看来就是想访问本地磁盘一样。 
	(4)容错性,即使系统中有某些节点脱机,整个系统来说仍然可以持续运作,而不会有数据损失。
	(5)分布式文件管理很多,hdfs知识其中的一种。适用于一次写入多次查询的情况,不支持并发写情况,小文件不合适。
<2> 对HDFS的操作 如:hadoop fs xxxx 的格式。xxxx的命令格式跟linux下的命令类似。

hdfs中的名录路径全称是:hdfs://hadoop:9000/--->表示hdfs的根目录。这个主要是用在集群的时候,用来指定到查看那一个主机的文件.通过主机名和端口来制定相应的数据节点的。

注意:hdfs的根目录是在hadoop安装目录,里面有tmp文件夹目录。在hdfs中操作一般都是以hadoop fs 开头的命令格式,后面接"-"加linux相同的命令格式。
如:hadoop fs -lsr /  --->表示的是主目录下所有文件的列表。
    hadoop fs -mkdir /liujiyu   ---->表示在hdfs的根目录下创建一个liujiyu文件夹
hdfs系统中的文件一般是由主机linux系统中上传上去的,相当于一个ftp系统一样,从linux上上传文件到hadoop的hdfs中即可。

<1>在本地主机上上传文件到hadoop中的hdfs中的命令是:hadoop fs -put /root/install.log  /liujiyu    ---->其中-put表示上传命令,/root/install.log表示linux主机中的文件,/liujiyu表示上传到hdfs中的位置。格式 hadoop fs -put <linux source> <hdfs destination>
	注意:当你上传的目的地是一个不存在的目录时,则上传之后,该目录的最后一个文件夹名就是上传文件的文件名,因此它是一个文件类型。

<2>从hdfs下载文件到本地的linux系统中,其命令如下:
	hadoop fs -get <hdfs source>  <linux destination>
	如:hadoop fs -get /liujiyu/install.log .     ---->.表示的是linux系统当前目录。

<3>直接在hdfs中查看文件的命令如下:
hadoop fs -text <hdfs文件名>   如:
hadoop fs -text /liujiyu/install.log    ---->-text表示的查看

<4>在hdfs中删除文件
hadoop fs -rm /nihao ---->不能删除文件夹,只能删除文件
hadoop fs -rmr /liujiyu   ------>它删除的是文件夹,文件夹中的内容一起删除

<5>帮助命令是 hadoop fs -help 命令
hadoop fs -help ls

注意:在操作hdfs的时候,若是在本机上操作可以不写全称,但是若是在集群下,访问其他节点的hdfs的话,需要写全称。全称的命令格式如下:
hadoop fs -ls hdfs://hadoop:9000/   ----->hdfs://hadoop:9000/中的hadoop表示需要访问的节点的主机名,9000表示端口号。

2、HDFS体系结构与基本概念
由于hdfs体系结构主要由namenode和datanode组成。所以
(1)namenode
	<1>namenode是整个文件系统的管理节点,它维护着整个文件系统的文件目录树,文件/目录的元信息和每个文件对应的数据块列表。接收用户的操作请求。
	<2>namenode包含的文件有:
		1)fsimage文件:元数据镜像文件。存储某一个时间namenode内存元数据信息,记录文件分块存储在哪几个数据节点上。
		2)edits文件:操作日志文件
		3)fstime文件:保存最近一次checkpoint的时间。
		以上文件都是保存在linux的文件系统中。
(2)secondarynamenode
	<1>是HA的一个解决方案。但不支持热备份,配置即可。
	<2>执行过程:从namenode上下载元数据信息(fsimage,edits),然后把二者合并,生成新的fsimage,在本地保存,并将其推送到namenode,同时重置namenode的edits。
	<3>默认在安装namenode节点上,但这样子  不安全。
(3)datanode  其存储的位置在:   hadoop安装主目录/tmp/dfs/data/current 中。
datanode提供真实文件数据的存储服务。它主要包括:
	<1>文件块:最基本的存储单元。对于文件内容而言,一个文件的长度大小是size,那么从文件的0偏移开始,按照固定的大小,顺序对文件进行划分并编号,划分好的每		一个块称一个block,hdfs默认是64M。
	<2>不同于普通文件系统的是,hdfs中,如果一个文件小于一个数据块的大小,并不占用整个数据块存储空间。而是占用实际大小的存储空间。
	<3>Replication。多副本。默认是三个。

3、HDFS的shell操作

4、java接口及常用api

见eclipse的workpace中的testhadoop。

面试题:namenode是不是单节点啊?是的, 
	那namenode如何来保证数据的安全性啊?
	方法一:可以通过备份fsimage文件,由于其在指定的时候会通过修改dfs.name.dir			的值,通过逗号隔开来指定多个目录列表。
	方法二:secondarynamenode节点中有对fsimage的备份,但它有一部分丢失,丢失的			那一部分就是没有合并的部分。   

5、RPC调用(remote procedure call),其实表示的是不同的java进程之间的调用。
不同进程中的不同对象中的对象方法的调用,其中一个是称作服务端(server),一个称作客户端(client)
server端:
server端提供对象,供客户端调用。注意:在服务端的被调用对象的方法的执行是在服务端(server)
client端:

服务端提供的对象必须是一个借口,接口继承extends VersioinedProtocal。
客户端能够调用对象中的方法必须是位于对象的接口中。

RPC是hadoop框架运行的基础。

从namenode的源码中我们可以知道:namenode的主要责任是维护两个表。一是负责文件和文件块之间的关系表,其存放在fsimage中。二是文件块和各物理节点之间的关系表,也就是文件块存放在那个datanode上。


从本地上传文件到hdfs上,其上传方式是通过namenode指定相应的是哪个datanode来存储块,然后本地文件直接跟相应的datanode相连接来进行传输文件。

datanode主动的向namenode报告情况。datanode调用namenode中的方法,namenode执行相应的方法,并返回给datanode中,然后datanode进行处理该返回值。如此循环往复。

6、HDFS的分布式存储架构的源码分析