Hadoop简介,
Hadoop提供的功能
(1)Hadoop Distributed File System(一个类是google file system)
(2)Hadop Map-reduce
前者是一个文件系统,后者是一种分布式计算
Hadoop起源
- 2001年,google的gfs投入使用,它是goolge的第一个集群文件系统
- 2003年,gfs的论文发表在acm sosp上。
- 2004年10月,MapReduce论文发表,(第一作者设计并实现了Goolge第一版广告系统以及MapReduce)
- 2006年2月,hadoop项目作为Lucene的子项目,在开源社区活动
- 2007年4月,yahoo部署了1000个节点的hadoop。
互联网公司用Hadoop做什么
- 搜索(Yahoo,Amazon)
- 日志处理(Facebook,Yahoo)
- 推荐系统(Facebook)
- 数据仓库(Facebook,AoL)
- 视频以及图像分析(New York Times)
- 备份mysql数据库(Facebook)
Hadoop适合于大规模数据处理的,不具有实时性。
Hadoop构建集群的规模
(Yahoo)
2007年4月,1000个节点
2009年,2.5万台机器,10个集群
最大的集群,300台机器
压缩后,3000T的数据
每周1W个任务
总而言之,现在的Hadoop不能支持更大的规模的集群
GFS文件系统
设计目标: 处理大规模分布式密集数据的可扩展系统
(1)基于廉价的商业硬件(比如磁盘经常坏)
(2)适量的大文件(每个几百MB到GB):文件不要太小,不然太浪费了
(3)对于文件处理主要是进行大型的顺序读(几百MB或者GB)和小型的随机读(几十KB)、大型的追加写
(4)一次写入,多次读取
(5)主要是为了优化吞吐量,而不是延迟(不适合做及时搜索)
(6)可靠,容灾,大集群,多个IDC
GFS的构架图
部署HDFS
- 一个NameNode,需要raid和大内存
- 一个NameNode的冷备
- 若干个DataNode,不需要raid
DataNode硬盘尽量插满,4*300G要好于2*600G(300G便宜,更换成本小)
DataNode的硬盘使用量可通过配置文件限制
NameNode是单点
Ps:根据hadoop指南介绍,HDFS在少于5个DataNodes的情况下工作效率不高
使用HDFS
命令行、JavaApi、C++ Jni、Proxy server ,或者基于HDFS的新协议,自己实现一套,或者使用更高级的接口:BigTable、Flume等等
每个文件可单独设置replica参数
命令行:bin/hadoop hdfs command
详细参见:http://hadoop.apache.org/common/docs/current/file_system_shell.html
MapReduce
mapreduce和HDFS部署在一起:
- Planning:把一个很大的任务分解成很多个小任务
- Mapper:Record->(k1,v1)、(k2,v2)、(k3,v3)
- Sort:对key进行外排序
- Reduce:(k1,(v1,v2,v3))->(k1,v)
其他项目
- Flume:分布式系统日志收集器
- HBase/HyperTable:基于Hadoop的分布式key-value数据库,开源版的BigTable
- Hive:基于Hadoop的数据仓库,支持sql查询,适合做OLAP分析
- Pig:基于Hadoop 的数据分析平台,
- Zookeeper:分布式一致性框架,可在它上面构建Naming Serving、Locking Service、HA、生产者-消费者队列等
- Mahout:分布式机器学习
- Hama:基于Bulk Synchronous Parallel的分布式计算框架
- Sqoop:从关系型数据库中导入数据到HDfs活HBase活这Hive中。