hdfsgo语言接口 hdfs教程( 五 )


快照能够存储某一特殊时刻的数据副本 , 从而支持HDFS在发生错误时会滚到上一个稳定版本 。
HDFS的应用场景是大的数据集下 , 且数据只需要写一次但是要读取一到多次并且支持流速读取数据 。一般情况下一个块大小为128MB,因此一个文件被切割成128MB的大块,且每个快可能分布在不同的DataNode 。
当客户端在复制系数是3的条件下写数据时,NameNode通过目标选择算法收到副本要写入的DataNode的集合,第1个DataNode开始一部分一部分的获取数据,把每个部分存储到本地并转发给第2个DataNode,第2个DataNode同样的把每个部分存储到本地并转发给第3个DataNode,第3个DataNode将数据存储到本地,这就是管道复制 。
HDFS提供了多种访问方式,比如 FileSystem Java API 、 C language wrapper for this Java API 和 REST API ,而且还支持浏览器直接浏览 。通过使用 NFS gateway,客户端可以在本地文件系统上安装HDFS 。
HDFS使用目录和文件的方式管理数据 , 并提供了叫做 FS shell 的命令行接口,下面有一些简单的命令:
DFSAdmin命令集合用于管理HDFS集群,这些命令只有集群管理员可以使用,下面有一些简单的命令:
正常的HDFS安装都会配置一个web服务,通过可配的TCP端口对外暴露命名空间,从而使得用户可以通过web浏览器查看文件内容 。
如果垃圾回收配置打开,通过FS shell移除的文件不会立刻删除,而是会移动到一个垃圾文件专用的目录(/user/username/.Trash),类似回收站,只要文件还存在于那个目录下,则随时可以被回复 。绝大多数最近删除的文件都被移动到了垃圾目录(/user/username/.Trash/Current) , 并且HDFS每个一段时间在这个目录下创建一个检查点用于删除已经过期的旧的检查点,详情见 expunge command of FS shell。在垃圾目录中的文件过期后 , NameNode会删除这个文件,文件删除会引起这个文件的所有块的空间空闲,需要注意的是在文件被删除之后和HDFS的可用空间变多之间会有一些时间延迟(个人认为是垃圾回收机制占用的时间) 。下面是一些简单的理解删除文件的例子:
当文件复制系数减小时,NameNode会选择多余的需要删除的副本,在收到心跳包时将删除信息发送给DataNode 。和上面一样,这个删除操作也是需要一些时间后,才能在集群上展现空闲空间的增加 。
HDFS Architecture
golang hdfs连接方式Go的HDFS
这是hdfs的本地golang客户端 。它使用协议缓冲区API直接连接到namenode 。
它尝试通过在可能的情况下对stdlib os包进行os.FileInfo来使其成为惯用语言 , 并从中实现接口,包括os.FileInfo和os.PathError。
这是实际的样子:
client , _ := hdfs . New ( "namenode:8020" )
file , _ := client . Open ( "/mobydick.txt" )
【hdfsgo语言接口 hdfs教程】buf := make ([] byte , 59 )
file . ReadAt ( buf , 48847 )
fmt . Println ( string ( buf ))
// = Abominable are the tumblers into which he pours his poison.
有关完整的文档,请查阅。
hdfs二进制
除库外 , 此存储库还包含HDFS的命令行客户端 。像库一样,它的主要目的是通过启用您喜欢的unix动词来实现惯用语:
$ hdfs --help
关于hdfsgo语言接口和hdfs教程的介绍到此就结束了 , 不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

推荐阅读