`

Hadoop(三)之HDFS简单介绍

 
阅读更多

 

    刚启动了hdfs , 那么你就可以通过在浏览器中输入 localhost : 50070 来查看当前的namenode , datanode 以及 hdfs的状态

   

   在配置文件中 ,配置的9000 , 9001端口是干什么用的?为什么这里通过浏览器访问的时候,用的是

   50070端口?

    这个9000表示系统请求到达的端口 ,用户是不能访问到的

    要获得namenode的信息,那就向这个端口发信息.只不过是系统来发.

 

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:9000</value>
    </property>
</configuration>

 

   hdfs-default.xml 与 hdfs-site.xml?

      hdfs-default.xml 则是当hdfs启动时 默认去加载的xml文件,hdfs-site.xml则是

      对hdfs-default.xml中的一些属性值进行修改,然后,加载hdfs-default.xml会使用这些新的

      属性值!

    

 

   hdfs是什么?在linux文件系统中它存在哪里?hadoop.tmp.dir是干什么用?

   通过在上面的浏览器中,看到hdfs跟linux中的文件系统都是一样 , 一个 "/" 下来....

   分布式文件系统 , 集群中存储文件,通过这个Hdfs来进行管理,机子与机子之间通过

   网络进行通信 , 来分享文件。

   Hdfs是一种master/slave的架构,有一个节点是master,相当于调度器一样,其他 节点都是slave

  他们的文件系统的metedata都存储在master上.

  hdfs主要分namenode 和 datanode , namenode 放在master机子上,只有一个,存储整个集群中,

  多少文件的metedata , datanode则每个slave中都有,负责存储数据。

  所以,hdfs就是在集群(分布式)的环境中,帮你管理数据,使得这些数据对用户或者程序员看来就像在

  一台机器上的文件系统一样 , 注意这句话:"一次写多次读!!!"。

 

  tmp.dir就是存储datanode 和 namenode数据的地方,可是当我打开这个文件夹的时候,里面并没有文件系统

  树一样的表示形式,而是一些文件.这个,其实想想,类似windown的文件系统表示形式,它只是为了方便与用户

 进行交互,而额外写的这些客户端程序,就像linux中,如果你用命令行,那同样你不看不到文件系统!! 

 文件系统,就是一道程序或者一个应用,就像webapp , 部署好应用后,后台就会有应用启动,接收请求,然后后台

 程序就会根据你的请求进行处理。同样的道理,如果你不写前端代码,你启动后台的时候,你通过url传入请求,同样可以

 得到想要的结果。!!这里就解释了hdfs文件系统在那这个问题吧!!!!(还是用久了window , 老觉得文件系统就应该有一个

  想他一样的表示形式才叫文件系统!!!!)

 

  NameNode  

   (接收用户请求)

   fsimage : 文件系统镜像,每次启动文件系统能跟上次一样,因为所有文件的metedata都存储在这个

  文件里面.

   edits : 操作日志, 事务文件

 

  SecondaryNameNode

   从NameNode上下载元数据信息(fsimage,edits),然后把二者合并,生成新的fsimage,在本地保存,

   并将其推送到NameNode,同时重置NameNode的edits.

   可以这样理解吗,当我们上传一个文件时,并没有立马在fsimage中写入该文件的metadata, 而是先写入

   edits日志文件,然后通过secondrayNameNode , 合并edits与fsimage , 也就是将操作后的metadata写入

   fsimage。

   但是 , 为什么要交给secondaryNameNode来处理?

     分工,namenode的快速响应。

 

   DataNode

   (存储数据)

   Block : 基本的存储单位

    Replication : 副本 , 默认三个 hdfs-site.xml的dfs.replication属性

 

   DFSClient , DataNode , NameNode之间的通信:

   图片来源 : 智障大师

   

 

  可以简单的看成HDFS由这三个对象组成,三则之间的通信通过箭头表示了,箭头所指的一方就是

  请求的接收者,也就是处理请求的,另一端则是发起者,所以,由图可知,NameNode就是一个纯粹的

  处理,服务器,它不会主动向其他对象发起请求,试想一下,仅有一个NameNode节点的HDFS如果还得

  向DataNode , Client发起请求的话,负载不就增加了吗?再者,它就像一个仲裁者或者调度器一样,不会他找别人

  只有别人找他!

  DataNode 除了应对Client端的读写请求外,还会周期性的发送心跳到NameNode , 表示他还还活着,同时,心跳的返回

  信息中,还可能包含有NameNode对DataNode的控制数据信息。同时,DataNode节点之间也会有消息传递,比如数据备份。

 

  所有的这些通信都是基于RPC!

 

     

   

   hdfs 命令的一点总结

   一般格式 :

     hdfs  [COMMAND] [GENERIC_OPTIONS] [COMMAND_OPTIONS]

    比如 hdfs dfs -ls  -h /

    hdfs 表示这是在hadoop 的 dfs 中,而不是linux的文件系统中

    dfs表示这是对dfs的操作, -ls 则是 dfs操作中的某一种 , -h 则是这种操作

    的一种可选项 , / 则是操作对象 , 或则理解成一个方法必须有的参数

    

-lsr  <目录名> 递归查看
-put  <linux本地文件>  <hdfs目录地址>  上传文件 (如果hdfs目录地址/a不存在,则会创建一个文件a)
-get ......................... 下载hdfs文件到linux中 参数与put相反
-text  <hdfs文件地址>  查看文件
-rm  <地址>  删除文件
- rmr <地址>  删除目录
-help <命令名> 查看命令

   

hdfs dfs -ls hdfs://localhost:9000/
这样 同样可以访问到根目录下的文件 有点像webapp了!

 

   

   参考资源 :Jeoygin  HDFS概述     

                     吴超的HDFS视频

        

     

   

 

  • 大小: 19.6 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics