所谓HDFS(Hadoop Distributed File System),是一种分布式文件管理系统,通过允许文件在不同电脑之间分享。这种文件系统比较适合大文件的存储。HDFS具有通透性,从程序和上层开发人员看来,就像是访问本地文件一样。HDFS在设计的时候考虑到了容错性,每一份文件在不同的电脑上默认存在3个副本,这样在有些电脑故障的时候,仍然可以正常使用整个系统。
HDFS包括Client,NameNode,DateNode。NameNode是文件系统的管理节点,
它记录着DateNode的分配情况(Secondary NameNode和NameNode记录相同的内容,
当NameNode故障时,Secondary NameNode会从standby状态切换到active状态,保证NameNode正常工作)。DateNode是存储数据的节点,文件以block的形式存储,每个block大小默认为128M。
简单的数据读取过程:
当client读取HDFS中的数据时,首先调用FileSystem的open方法,
使用RPC(Remote Procedure Call)通信协议从NameNode中获得数据所在block的locations,
新建一个FSDataInputStream对象。
这个对象被封装进DFSDataInputStream对象,该对象找到距离client最近的DateNode的位置,
调用read方法从DateNode的block中读取数据,
读取结束后,中断连接并指向下一个DateNode,如果DateNode发生异常,会记录异常DateNode,
跳过该节点的读取,从对应的副本中读取数据。并关闭InputStream。
简单的数据存储过程:
当client上传数据时,首先数据在本地缓存,
当数据大小达到1个block的时候,请求NameNode分配一个block,
NameNode会把分配的地址告诉client,然后client直接与DateNode通信,
将数据写入到相应的block中。
HDFS的常见操作
#hadoop fs -ls / 查看HDFS根目录
#hadoop fs -mkdir /test 在根目录创建一个目录test
#hadoop fs -put ./test.txt /test 上传
#hadoop fs -get /test/test.txt 下载
#hadoop fs -rm /test1/test.txt 删除