Hadoop 学习之三

Hadoop一些备受关注的特性与版本演进

Append : 支持文件追加功能,如果想使用Hbase,需要这个特性
RAID: 在保证数据可靠性的前提下,通过引入校验码减少数据块数目。
Symlink: 支持HDFS文件链接。
Security : 安全性。
NameNode HA: (高可用),尽管存在secondary namenode,并通过数据复制保证数据不会丢失,但当namenode出现故障,secondarynamenode无法实现
自动切换。HA可以实现此功能
HDFS Federation 和YARN : 第二代的mapreduce系统

HDFS

1.提供分布式存储机制,提供可线性增长的海量存储能力.
(利用分布式的机器硬盘形成一个总的存储空间.在任何一个节点,无论namenode或者datanode,只要发出操作命令,就可以对整个集群hdfs进行统一操作。
比如A,B,C三个机器,无论A是namenode或者datanode,A节点不仅限于A节点上面的数据,还可以可以操作整个三台机器组成的集群。
)
2.自动数据冗余,无需使用Raid,无需另外备份。(利用服务器因子实现)
3.为进一步分析计算提供数据基础。

HDFS设计基础与目标
1.硬件错误时常态。因此需要冗余。
2.流式数据访问,因此数据批量读取而非随机读写,Hadoop擅长做的是数据分析而不是事务处理。
3.大规模数据集。
4.简单一致性模型,为了降低系统复杂度,对文件采用一次性写多次读的逻辑设计,即是文件已经写入,关闭,
就不再修改
5.程序采用数据就近原则分配节点执行。

读取数据流程
1.客户端要访问HDFS中的一个文件
2.首先从namenode获得组成这个文件的数据块位置列表
3.根据列表知道存储数据块的datanode
4.访问datanode获取数据
5.namenode并不参与数据实际传输 

写入过程流程
1.客户端请求namenode创建新文件
2.客户端将数据写入DFSOutputStream
3.简历pepeline依次将目标数据写入各个datanode,建立多个副本。


HDFS体系结构

NAMENODE:存放元数据,比如命名空间,
1.管理文件系统的命名空间。
2.记录每个文件数据块在各个Datanode的位置和副本信息
3.协调客户端对文件的访问
4.记录命名空间内的改动或空间本身属性的改动
5.Namenode使用事务日志记录HDFS元数据的变化。使用影像文件存储文件系统的命名空间,包括文件映射,文件属性等。
SecondaryNameNode
  
DataNode:存放具体的数据


事务日志
影像文件

HDFS的文件系统映像和编辑日志  
文件系统客户端执行写操作时(例如创建或移动文件),这些操作首先被记录到编辑日志中。NAMENODE在内存中维护文件系统的
元数据;当编辑日志被修改时,相关元数据信息也同步更新。内存中的元数据可支持客户端的读请求。
在每次执行写操作之后,且在向客户端发送成功代码之前,编辑日志都需要更新和同步。当NAMENODE向多个目录写数据时,   
只有在所有写操作均执行完毕之后放可返回成功代码,以确保任何操作都不会因为机器故障而丢失。 

faimage文件时文件系统元数据的一个永久性检查点,并非一个写操作都会更新这个文件,因为fsimage是一个大型文件,
(甚至高达几个GB),如果频繁地执行写操作,会使系统极为缓慢。这个特性根本不会降低系统的恢复能力,因为如果
namenode发生故障,可以先把fsimage载入到内存中重新构造最近的元数据,再执行编辑日志中的各项操作。
如前所述,edits文件会无限增长,尽管这种情况对于namenode的运行没有影响,但由于需要恢复(非常长)编辑日志中的
各项操作,namenode的重启操作会比较慢。对此的解决方式是辅助namenode,为主namenode内存中的文件系统元
数据创建检查点,创建检查点的步骤如下:
1.辅助namenode请求主namenode停止使用edits文件,暂时将新的写操作记录到一个新文件中。
2.辅助namenode从主namenode获取fsimage和edits文件(HTTP GET)
3.辅助namenode将fsimage文件载入到内存,逐一执行edits文件中的操作,创建新的fsimage。
4.辅助namenode将新的fsimage文件发送回主namenode(http post)
5.主namenode从辅助namenode接受的fsimage文件替换旧的fsimage文件,用步骤1所产生的edits文件代替旧的edits文件。
同时更新fstime文件来记录检查点执行的时间。
最终,主namenode拥有最新的fsimage文件和一个更新的edits文件。创建检查点的触发条件受两个配置参数控制。
通常情况下,辅助namenode每隔一小时(fs.checkpoint.period属性设置,以秒为单位)来创建检查点;此外,
当编辑日志达到64MB时,也会创建检查点。系统每隔五分钟检查一次编辑日志的大小。

1.辅助namenode的目录结构   
2.创建检查点的过程不仅为namenode创建检查点数据,还使namenode最终也有一份检查点数据(存储在previous.checkpoint子目录中)。   
3.这份数据可用作namenode元数据的备份。(尽管非最新)。   
4.辅助namenode的previous.checkpoint目录,辅助接点的current目录和主namenode的current目录的布局相同。这种设计方案的好处   
5.是,在主namenode发生故障时,可以从辅助namenode恢复数据。   
6.一种方法时将相关存储目录复制到新的namenode中;   
7.另外一张方法是使用-importCheckpoint选项重启辅助namenode守护进程,从而将辅助namenode用作新的主namenode。   
8.借助这个选项,dfs.name.dir属性定义的目录中没有元数据时,辅助namenode就从fs.checkpoint.dir目录载入最新的检查点数据。   
9.因此无需担心操作会覆盖现有的元数据。


HDFS文件操作

1.命令行方式
2.API方式

1.1列出HDFS下的文件
注意,hadoop没有当前目录的概念,没有cd命令

[anker@anker hadoop-1.1.2]$ ./bin/hadoop fs -ls
Found 2 items
drwxr-xr-x   - anker supergroup          0 2014-04-25 22:46 /user/anker/in
drwxr-xr-x   - anker supergroup          0 2014-04-25 22:51 /user/anker/out

1.2上传文件到HDFS

[anker@anker ~]$ echo "hello hadoop hdfs" > test3.txt
[anker@anker ~]$ cat test.txt
[anker@anker hadoop-1.1.2]$ bin/hadoop fs -put ../test3.txt ./in
[anker@anker hadoop-1.1.2]$ bin/hadoop fs -cat ./in/test3.txt
hello hadoop hdfs

1.3 数据写在了那儿(从OS看)
[anker@anker current]$ pwd
/home/anker/hadoop-1.1.2/tmp/dfs/data/current


以blk开头,没有结尾为数据文件。blk的大小缺省是64M,大于64M时会自动分割,变成
多个blk文件。
meta文件为元数据文件,比如数据块跟文件的对应,以及校验和



[anker@anker current]$ ls
blk_3157498903036687291             blk_7575711193623193077_1249.meta
blk_3157498903036687291_1250.meta   blk_8019284162881630727
blk_-4941071068077027141            blk_8019284162881630727_1265.meta
blk_-4941071068077027141_1257.meta  blk_-8411529019236825895
blk_-6003480761789770138            blk_-8411529019236825895_1259.meta
blk_-6003480761789770138_1260.meta  blk_8558884646323201157
blk_-7444048057069378050            blk_8558884646323201157_1264.meta
blk_-7444048057069378050_1262.meta  dncp_block_verification.log.curr
blk_7575711193623193077             VERSION

1.4 将HDFS文件复制到本地
将in目录下的文件复制到上层目录中
[anker@anker hadoop-1.1.2]$  bin/hadoop fs -get ./in/test3.txt ../

1.5删除HDFS下的文档(无论哪个节点,实际上各个节点文件都删除掉了)

[anker@anker hadoop-1.1.2]$ bin/hadoop fs -rmr ./in/test3.txt
Deleted hdfs://anker.centos1:9000/user/anker/in/test3.txt

1.6 查看HDFS下某个文件的内容
[anker@anker hadoop-1.1.2]$ bin/hadoop fs -ls ./in
Found 2 items
-rw-r--r--   2 anker supergroup         12 2014-04-25 22:46 /user/anker/in/test1.txt
-rw-r--r--   2 anker supergroup         13 2014-04-25 22:46 /user/anker/in/test2.txt

1.7查看HDFS基本统计信息

[anker@anker hadoop-1.1.2]$ bin/hadoop dfsadmin -report
Configured Capacity: 6945988608 (6.47 GB)
Present Capacity: 5998563328 (5.59 GB)
DFS Remaining: 5997989888 (5.59 GB)
DFS Used: 573440 (560 KB)
DFS Used%: 0.01%
Under replicated blocks: 1
Blocks with corrupt replicas: 0
Missing blocks: 0

-------------------------------------------------
Datanodes available: 2 (2 total, 0 dead)

Name: 192.168.1.203:50010
Decommission Status : Normal
Configured Capacity: 3464716288 (3.23 GB)
DFS Used: 286720 (280 KB)
Non DFS Used: 473300992 (451.38 MB)
DFS Remaining: 2991128576(2.79 GB)
DFS Used%: 0.01%
DFS Remaining%: 86.33%
Last contact: Sun Apr 27 21:20:55 CST 2014


Name: 192.168.1.202:50010
Decommission Status : Normal
Configured Capacity: 3481272320 (3.24 GB)
DFS Used: 286720 (280 KB)
Non DFS Used: 474124288 (452.16 MB)
DFS Remaining: 3006861312(2.8 GB)
DFS Used%: 0.01%
DFS Remaining%: 86.37%
Last contact: Sun Apr 27 21:20:58 CST 2014


1.8 如何添加节点
 1.在新节点安装好hadoop
 2.把namenode的有关配置文件复制到该节点
 3.修改masters和slaves文件,增加该节点
 4.设置ssh免密码进入该节点
 5.单独启动该节点的datanode和tasktracker(hadoop-daemon.sh start datanode/tasktracker)
 6.运行start-balancer.sh进行数据负载均衡
 7.是否要重启集群?

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值