分享

Hadoop基础概念

 月影晓风 2014-11-20

Hadoop历史:

2002年Apatch Nutch项目启动(Apatch Lucene的创始人Dout Cutting负责),用于解决网页搜索问题

2003年谷歌发表论文,讲述了他们海量数据存储和网页搜索的解决思想,即GFS

2004年,受谷歌启发,Apatch Nutch分布式文件系统项目(NDFS)启动。同年,google用论文向世界介绍了他们的MapReduce

2005年,NDFS上也实现了Mapreduce,而且不仅仅适用与搜索环境。

2006年NDFS和MapReduce移出Nutch,形成Lucene的一个子项目,被称为为Hadoop。同年,Dout Cutting进入雅虎,成立了专门的研究团队,把Hadoop发展成能进行web数据处理的系统。

2008年,Hadoop已经成为Apache的顶级项目

Hadoop分布式文件系统

HDFS设计思想

超大文件

专注大规模数据处理,Hadoop能存储PB级别的数据

流式数据访问,一次写,多次读

流式,指的是批量读取,而非随机读取。由于hadoop设计为做数据分析,所以并不需要修改。

硬件故障是常态,需要冗余。

集群化部署,量变引起质变,对单个节点硬件要求并不太高,不必考虑大型数据库级别的机器。

“数据就近与就远”原则

副本之间距离要远,读取数据时尽量从近的节点读取(机架策略)。

不适应在hadoop上运行的情况:

低延迟访问

Hadoop设计再与处理海量数据,并没有关注实时访问,可以考虑使用Hbase满足低延迟的需求。

大量小文件

因为每个文件都要在namenode内存中存储元数据,每个文件,目录和数据块大约占用150字节,如果小文件太多,势必影响namenode性能.

多用户写入和修改

Hadoop不支持多用户同时写入,也不支持修改。

HDFS概念

数据块:

HDFS中的文件被划分为多个块,独立存储

为了降低磁盘寻址开销时间,即一次读更多的块,可以适当调大块大小

由于map阶段一次读取一个块,如果这个块设置的过大,map任务较少,速度会变慢。

分块的好处:

1.       使一个文件可以存储在不同磁盘上

2.       简化管理,因为元数据由其他系统控制

3.       适用与容错处理和数据备份

列出磁盘中文件的块信息:

[~/hadoop/hadoop-1.2.1/conf]$hadoop  fsck /user/huangxing/input files blocks               

FSCK started by huangxing from /127.0.0.1 for path /user/huangxing/input at Thu Feb 27 23:40:14 CST 2014

.

/user/huangxing/input/README.html:  Under replicated blk_5326121453921514416_1014. Target Replicas is 3 but found 1 replica(s).

Status: HEALTHY

 Total size:    114 B

 Total dirs:    1

 Total files:   1

 Total blocks (validated):      1 (avg. block size 114 B)

 Minimally replicated blocks:   1 (100.0 %)

 Over-replicated blocks:        0 (0.0 %)

 Under-replicated blocks:       1 (100.0 %)

 Mis-replicated blocks:         0 (0.0 %)

 Default replication factor:    1

 Average block replication:     1.0

 Corrupt blocks:                0

 Missing replicas:              2 (200.0 %)

 Number of data-nodes:          1

 Number of racks:               1

FSCK ended at Thu Feb 27 23:40:14 CST 2014 in 4 milliseconds

 

The filesystem under path '/user/huangxing/input' is HEALTHY

 

namenode和datanode

namenode和datanode是HDFS系统的两个重要概念

nodename节点管理系统命名空间,类似mongodb的配置服务器,维护系统文件和目录信息,所以连接namenode就可以查看整个目录树。注意,这些信息以一对文件保存在本地磁盘上:包括命名空间镜像文件和事务日志文件。Namenode还记录每个块的数据节点信息,但是不永久保存,这些信息在系统重启时候由datanode节点建立,然后传输给nodename节点。总结namenade作用:

(1)     管理文件系统的命名空间

(2) 记录每个文件数据块在各个Datanode上的位置和副本信息

(3) 协调客户端对文件的访问

(4) 记录命名空间内的改动或空间本身属性的改动

(5) amenode使用事务日志记录HDFS元数据的变化。使用映像文件存储文件系统的命名空间,包括文件映射,文件属性等

[~/hadoop/hadoop-1.2.1/name]$ls -lR

.:

总用量 12

drwxrwxr-x 2 huangxing huangxing 4096  3月  1 01:24 current

drwxrwxr-x 2 huangxing huangxing 4096  2月 27 01:12 image

-rw-rw-r-- 1 huangxing huangxing    0  3月  1 01:19 in_use.lock

drwxrwxr-x 2 huangxing huangxing 4096  2月 28 11:22 previous.checkpoint

 

./current:

总用量 1040

-rw-rw-r-- 1 huangxing huangxing 1048580  3月  1 01:29 edits

-rw-rw-r-- 1 huangxing huangxing    1501  3月  1 01:24 fsimage

-rw-rw-r-- 1 huangxing huangxing       8  3月  1 01:24 fstime

-rw-rw-r-- 1 huangxing huangxing     101  3月  1 01:24 VERSION

 

./image:

总用量 4

-rw-rw-r-- 1 huangxing huangxing 157  3月  1 01:24 fsimage

 

./previous.checkpoint:

总用量 1040

-rw-rw-r-- 1 huangxing huangxing 1048580  2月 28 11:29 edits

-rw-rw-r-- 1 huangxing huangxing    1501  2月 28 11:22 fsimage

-rw-rw-r-- 1 huangxing huangxing       8  2月 28 11:22 fstime

-rw-rw-r-- 1 huangxing huangxing     101  2月 28 11:22 VERSION

Fsimage就是映像文件,edit是事务日志

 

dataNode受客户端或者namenode调度,存储并检索数据块,并且定期向namenode发送他们存储的块的列表,datanode特性:

(1)     负责物理节点的存储管理,

(2)     一次写入,多次读取(不修改)

(3)     数据块组成,典型的块大小是64MB

(4)     据块尽量散布到各个节点

如果namenode节点崩溃,整个集群系统将不可用,hadoop提供两种容错策略:

1.       通过写入多个目的地,例如写入本地和NFS目录

2.       使用辅助namenode节点,定期编辑日志,合并命名空间,防止日志过大。由于他的状态总是落后namenode,所以一旦namenode失效,就会产生数据丢失。失效时,可以把nfs上的数据拷贝到辅助节点,使之以namenode运行。

Hadoop数据读取流程

(1)     客户端向namenode发出请求(集群中每个节点都知道namenode在哪里)

(2)     Namenode收集datanode信息

(3)     Namenode向客户端传送数据

(4)     客户端向datanode查询数据(就近原则读,利用带宽)

所以,namenode只是存储datanode元数据,但是他是放在内存里面的,定位效率较高

HDFS可用性

冗余副本策略

(1)     可以在hdfs-site.xml中设置复制因子指定副本数量

(2)     所有数据块都有副本

(3)     Datanode启动时,遍历本地文件系统,产生一份hdfs数据块和本地文件的对应关系列

表(blockreport)汇报给namenode

机架策略

(1)     集群一般放在不同机架上,机架间带宽要比机架内带宽要小

(2)     HDFS的“机架感知”

(3)     一般在本机架存放一个副本,在其它机架再存放别的副本,这样可以防止机架失效时

丢失数据,也可以提高带宽利用率,而且读取数据尽量不跨越机柜

心跳机制

(1)     Namenode周期性从datanode接收心跳信号和块报告

(2)     Namenode根据块报告验证元数据

(3)     按时发送心跳的datanode会被标记为宕机,不会再给它任何I/O请求(与impala类似)

(4)     如果datanode失效造成副本数量下降,并且低于预先设置的阈值,namenode会检测出这些数据块,并在合适的时机进行重新复制(讨论阈值)

(5)     引发重新复制的原因还包括数据副本本身损坏、磁盘错误,复制因子被增大等

安全模式

(1)     node启动时会先经过一个“安全模式”阶段

安全模式阶段不会产生数据写,此阶段Namenode收集各个datanode的报告,当数据块达到最小副本数以上时,会被认为是“安全”的(否则不安全.

(2)     在一定比例(可设置)的数据块被确定为“安全”后,再过若干时间,安全模式结束。检测到副本数不足的数据块时,该块会被复制直到达到最小副本数。

校验和

校验和文件如下所示:

[~/hadoop/hadoop-1.2.1/data/current]$ls -lh

总用量 82M

-rw-rw-r-- 1 huangxing huangxing  138  2月 27 23:09 blk_-1148524011628330155

-rw-rw-r-- 1 huangxing huangxing   11  2月 27 23:09 blk_-1148524011628330155_1020.meta

-rw-rw-r-- 1 huangxing huangxing  64M  3月  1 01:29 blk_2941913032423535550

-rw-rw-r-- 1 huangxing huangxing 513K  3月  1 01:29 blk_2941913032423535550_2280.meta

-rw-rw-r-- 1 huangxing huangxing    4  3月  1 01:20 blk_3165250348914594670

-rw-rw-r-- 1 huangxing huangxing   11  3月  1 01:20 blk_3165250348914594670_1025.meta

-rw-rw-r-- 1 huangxing huangxing  114  2月 27 19:14 blk_5326121453921514416

-rw-rw-r-- 1 huangxing huangxing   11  2月 27 19:14 blk_5326121453921514416_1014.meta

-rw-rw-r-- 1 huangxing huangxing 9.1K  2月 28 11:18 blk_-7495815267218679520

-rw-rw-r-- 1 huangxing huangxing   83  2月 28 11:18 blk_-7495815267218679520_1023.meta

-rw-rw-r-- 1 huangxing huangxing  17M  3月  1 01:29 blk_-7878323630152692968

-rw-rw-r-- 1 huangxing huangxing 130K  3月  1 01:29 blk_-7878323630152692968_2280.meta

-rw-rw-r-- 1 huangxing huangxing 9.1K  2月 28 11:19 blk_-9178443108632575838

-rw-rw-r-- 1 huangxing huangxing   83  2月 28 11:19 blk_-9178443108632575838_1024.meta

-rw-rw-r-- 1 huangxing huangxing 1.7K  3月  1 02:02 dncp_block_verification.log.curr

drwxrwxr-x 2 huangxing huangxing 4.0K  3月  1 01:25 subdir0

1.         在文件创立时,每个数据块都产生校验和

2.         校验和会作为单独一个隐藏文件保存在命名空间下

3.         客户端获取数据时可以检查校验和是否相同,从而发现数据块是否损坏

4.         如果正在读取的数据块损坏,则可以继续读取其它副本

回收站

(1)       删除文件时,其实是放入回收站/trash

(2)       回收站里的文件可以快速恢复

(3)       可以设置一个时间阈值,当回收站里文件的存放时间超过这个阈值,就被彻底删除,

(4)       并且释放占用的数据块

(5)       可以设置不需要回收站

元数据保护

十分核心的内容:

(1)       映像文件刚和事务日志是Namenode的核心数据。可以配置为拥有多个副本(类似oracle的控制文件多个复制)

(2)       副本会降低Namenode的处理速度,但增加安全性

(3)       Namenode依然是单点,如果发生故障要手工切换

快照

类似oracle的回滚:

(1)       支持存储某个时间点的映像,需要时可以使数据重返这个时间点的状态

(2)       Hadoop目前还不支持快照,已经列入开发计划

命令行接口

基本文件系统操作(fs)

查看帮助:

[root@hexel /hadoop/hadoop-1.2.1/name]#hadoop fs –help

复制本地文件到hdfs:(或者put)

[~]$hadoop dfs -copyFromLocal ./notice.html /user/huangxing/input

[~]$hadoop dfs -copyFromLocal ./notice.html /user/huangxing/input/notice1.html

把文件复制到本地:(或者get命令)

[~]$hadoop dfs -copyToLocal /user/huangxing/input/notice1.html ./

进行md5验证:

[~]$md5sum notice.html

a00d6f9ab542be7babc2d8b80d5d2a4c  notice.html

[~]$hadoop dfs -copyToLocal /user/huangxing/input/notice1.html ./

[~]$md5sum notice1.html

a00d6f9ab542be7babc2d8b80d5d2a4c  notice1.html

[~]$

显示hdfs文件:

[~]$hadoop dfs -ls /user/huangxing/input

Found 3 items

-rw-r--r--   3 huangxing supergroup        114 2014-02-27 19:14 /user/huangxing/input/README.html

-rw-r--r--   1 huangxing supergroup       9230 2014-02-28 11:18 /user/huangxing/input/notice.html

-rw-r--r--   1 huangxing supergroup       9230 2014-02-28 11:19 /user/huangxing/input/notice1.html

第一列是权限信息,第二列表示副本数

查看统计信息

[~/hadoop/hadoop-1.2.1/data/current]$hadoop dfsadmin -report

Configured Capacity: 19359907840 (18.03 GB)

Present Capacity: 13920987045 (12.96 GB)

DFS Remaining: 13920464896 (12.96 GB)

DFS Used: 522149 (509.91 KB)

DFS Used%: 0%

Under replicated blocks: 2

Blocks with corrupt replicas: 0

Missing blocks: 0

 

-------------------------------------------------

Datanodes available: 1 (1 total, 0 dead)

 

Name: 191.255.255.250:50010

Decommission Status : Normal

Configured Capacity: 19359907840 (18.03 GB)

DFS Used: 522149 (509.91 KB)

Non DFS Used: 5438924891 (5.07 GB)

DFS Remaining: 13920460800(12.96 GB)

DFS Used%: 0%

DFS Remaining%: 71.9%

Last contact: Sat Mar 01 02:12:12 CST 2014

进入和退出安全模式

Dananode启动时候发送数据块信息给namenode,块副本量达到阈值时,才会退出安全模式,接受读写。手动进入安全模式:

[~/hadoop/hadoop-1.2.1/data/current]$hadoop dfsadmin -safemode enter

Safe mode is ON

Safemode下无法读写了!!

[~]$hadoop dfs -put ./notice.html /user/huangxing/hxnotice.xml

put: org.apache.hadoop.hdfs.server.namenode.SafeModeException: Cannot create /user/huangxing/hxnotice.xml. Name node is in safe mode.

离开安全模式:

[~/hadoop/hadoop-1.2.1/data/current]$hadoop dfsadmin -safemode leave

这个时候可以正常操作了。

添加节点

(1)       在新节点安装好hadoop(linux,hadoop,配置文件,java)

(2)       把namenode的有关配置文件复制到该节点

(3)       修改masters和slaves文件,增加该节点

(4)       设置ssh免密码进出该节点

(5)       单独启动该节点上的datanode和tasktracker(hadoop-daemon.sh start datanode/tasktracker)

(6)       运行start -balancer.sh进行数据负载均衡

负载均衡

作用:当节点出现故障,或新增加节点时,数据块分布可能不均匀,负载均衡可以重新平衡各个datanode上数据块的分布(比较耗时间)

API

需要熟练上传,删除,重命名文件相关java类和方法.

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多