Hadoop-HDFS架构和Shell

  Hadoop分布式文件系统(HDFS),一个高度容错性的系统,适合部署在廉价的机器上。HDFS提供了高吞吐量的数据访问,适合大规模数据集的应用。HDFS采用master/slave架构HDFS集群是由一个NameNode和一定数目的DataNodes组成

HDFS架构和设计

Hadoop HDFS架构图

  1. 硬件错误
    硬件错误是常态而不是异常HDFS可能由成百上千的服务器所构成,每个服务器上存储着文件系统的部分数据,面对成百上千的服务器,难免会出现某些主件出现异常现象。对于Hadoop来说错误检测和快速、自动的恢复是它最核心的架构目标

  2. 大规模数据集
    在HDFS上文件大小一般都在G字节至T字节,于是HDFS被调节以支持大文件存储。能在一个集群里扩展到数百个节点,具有很大的数据集。

  3. 流式数据访问
    HDFS的设计中更多的考虑到了数据批处理,而不是用户交互处理。比之数据访问的低延迟问题,更关键的在于数据访问的高吞吐量。

  4. 一致性模型
    一次写入多次读取的文件访问模型。一个文件经过创建、写入和关闭之后就不需要改变。这一假设简化了数据一致性问题,并且使高吞吐量的数据访问成为可能。

  5. 移动计算
    一个应用请求的计算,离它操作的数据越近就越高效,在数据达到海量级别的时候更是如此。因为这样就能降低网络阻塞的影响,提高系统数据的吞吐量。将计算移动到数据附近,比之将数据移动到应用所在显然更好。

  6. 平台移植
    HDFS在设计的时候就考虑到平台可移植性。这种特性方便了HDFS作为大规模数据应用平台的推广。

FS Shell

(FS)Shell命令应使用bin/hadoop fs <args>的形式。 所有的shell命令使用URI路径作为参数。eg:hadoop fs -ls hdfs://xiaoxiaomo01:9000/

  1. 所用(FS)Shell命令都是以“hadoop fs”开头(1.0),2.0修改为“hdfs dfs”开头
  2. -ls 为命令选项,记住和linux里面是有区别的,这里每个命令前面有“-”
  3. xiaoxiaomo01是我hadoop的主机名
  4. hdfs://xiaoxiaomo01:9000/可简写为“/”,> hadoop fs -ls /
  • 例如
    hadoop fs -ls命令

  • (FS)Shell命令

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    -help [cmd]	//显示命令的帮助信息
    -ls(r) <path> //显示当前目录下所有文件
    -du(s) <path> //显示目录中所有文件大小
    -count[-q] <path> //显示目录中文件数量
    -mv <src> <dst> //移动多个文件到目标目录
    -cp <src> <dst> //复制多个文件到目标目录
    -rm(r) //删除文件(夹)
    -put <localsrc> <dst> //本地文件复制到hdfs
    -copyFromLocal //同put
    -moveFromLocal //从本地文件移动到hdfs
    -get [-ignoreCrc] <src> <localdst> //复制文件到本地,可以忽略crc校验
    -getmerge <src> <localdst> //将源目录中的所有文件排序合并到一个文件中
    -cat <src> //在终端显示文件内容
    -text <src> //在终端显示文件内容
    -copyToLocal [-ignoreCrc] <src> <localdst> //复制到本地
    -moveToLocal <src> <localdst>
    -mkdir <path> //创建文件夹
    -touchz <path> //创建一个空文件

上述的命令需要多去练习,下面据简单的举例一下上传下载,创建文件,移动复制,事例如下:

  1. 创建文件夹
    hadoop fs -ls和mkdir 查看和创建文件夹
    说明:我们首先递归查看了/test文件夹,下面只有一个文件,然后在该目录下创建了/momo目录

  2. 上传文件到指定目录(上传文件到momo目录)
    hadoop fs -put 上传本地数据到hdfs
    hadoop fs -lsr 查看命令,递归

  3. 下载文件
    hadoop fs -get 获取hdfs数据到本地

  4. 移动文件夹
    hadoop fs -mv 移动hdfs上的数据

  5. 复制文件
    hadoop fs -cp 复制hdfs上的数据

Namenode

  1. Namenode,是整个文件系统的管理节点;
  2. 它维护着整个文件系统的文件目录树,文件/目录的元信息和每个文件对应的数据块列表接收用户的操作请求;
  3. NameNode 只有三种交互。
    3.1. client访问NameNode获取相关DataNode信息。
    3.2. DataNode心跳汇报当前block情况。
    3.3. SecondaryNameNode做checkpoint交互。

Datanode

  • Datanode:提供真实文件数据的存储服务

文件块(block):最基本的存储单位。HDFS默认Block大小是64MB(1.0版本),128(2.0版本),如果一个文件小于一个数据块的大小,HDFS并不占用整个数据块存储空间。
Replication:多复本,默认是三个。

SecondaryNameNode

  • HA的一个解决方案。但不支持热备。配置即可

执行过程从NameNode上下载元数据信息(fsimage,edits),然后把二者合并,生成新的fsimage,在本地保存并将其推送到NameNode同时重置NameNode的edits.(默认在安装在NameNode节点上,但这样…不安全!)

  • 参考资料
  1. http://www.colabug.com/thread-1090990-1-1.html
  2. http://hadoop.apache.org/docs/r1.0.4/cn/hdfs_design.html

当前网速较慢或者你使用的浏览器不支持博客特定功能,请尝试刷新或换用Chrome、Firefox等现代浏览器