看到了吗,一只小象在向我们走来
认识一下吧!
是什么
Hadoop是一个使用JAVA开发的开源框架,是一个可以分析和处理海量数据的软件平台。它允许在整个集群使用简单编程模型计算机的分布式环境存储并处理大数据。它的目的是从单一的服务器到上千台机器的扩展,每一个台机都可以提供本地计算和存储。
发展历史
雏形开始于2002年的Apache的Nutch,Nutch是一个开源Java 实现的搜索引擎。它提供了我们运行自己的搜索引擎所需的全部工具。包括全文搜索和Web爬虫。
2003年Google发表了一篇论文谷歌文件系统GFS(google File System),google公司为了存储海量搜索数据而设计的专用分布式文件系统,可运行在普通的廉价硬件上。
2004年Nutch创始人Doug Cutting基于Google的GFS论文实现了分布式文件存储系统名为NDFS。
2004年Google发表了一篇技术学术论文MapReduce。
2005年Doug Cutting基于MapReduce,在Nutch搜索引擎实现了该功能。
2006年,Yahoo雇用了Doug Cutting,Doug Cutting将NDFS和MapReduce升级命名为Hadoop,Yahoo开建了一个独立的团队给Goug Cutting专门研究发展Hadoop。
不得不说Google和Yahoo对Hadoop的贡献功不可没。
架构
- HDFS: 分布式文件存储
- YARN: 分布式资源管理
- MapReduce: 分布式计算
- Others: 利用YARN的资源管理功能实现其他的数据处理方式
内部各个节点基本都是采用Master-Woker架构
核心内容
Hadoop的核心就是HDFS和MapReduce,而两者只是理论基础,不是具体可使用的高级应用。
Hadoop旗下有很多经典子项目,比如HBase、Hive等,这些都是基于HDFS和MapReduce发展出来的。
要想了解Hadoop,就必须知道HDFS和MapReduce是什么。
HDFS
HDFS(Hadoop Distributed File System,Hadoop分布式文件系统),它是一个高度容错性的系统,适合部署在廉价的机器上。HDFS能提供高吞吐量的数据访问,适合那些有着超大数据集(large data set)的应用程序。
HDFS的设计特点是:
- 大数据文件,非常适合上T级别的大文件存储。
- 文件分块存储,将一个完整的大文件平均分块存储到不同计算器上,可以同时从多个主机进行更高效的操作。
- 流式数据访问,一次写入多次读写,跟传统文件不同,它不支持动态改变文件内容,而是要求让文件一次写入就不做变化,要变化也只能在文件末添加内容。
- 廉价硬件,HDFS可以应用在普通PC机上,这种机制能够让给一些公司用几十台廉价的计算机就可以撑起一个大数据集群。
- 硬件故障,为了防止某个主机失效读取不到该主机的块文件,它将同一个文件块副本分配到其它某几个主机上,如果一台主机失效可以迅速找副本取文件。
HDFS的关键元素:
- Block:将一个文件进行分块,通常是64M。
- NameNode:保存整个文件系统的目录信息、文件信息及分块信息,这是由唯一一台主机专门保存,当然这台主机如果出错,NameNode就失效了。在Hadoop2.*开始支持activity-standy模式(如果主NameNode失效,启动备用主机运行NameNode)。
- DataNode:分布在廉价的计算机上,用于存储Block块文件。
MapReduce
MapReduce是Hadoop体系中数据存储管理的基础,mapreduce意为映射和规约,可简单理解为把指令分发到各个块上进行操作(映射)然后把各个块的计算结果合并(规约)。
MapReduce的关键元素:
- Client:切分文件,访问HDFS,与NameNode(JobTracker)交互获取文件位置,与DataNode(TaskTracker)交互读写数据
- JobTracker:仅一个的master节点,分解并下派任务给TaskTracker,并监控
- TaskTracker:常为多个,允许map任务和reduce任务,与JobTracker交互、汇报任务状态
总结
Hadoop典型应用有:搜索、日志处理、推荐系统、数据分析、视频图像分析、数据保存等。
Hadoop可运行于一般的商用服务器上,具有高容错、高可靠性、高扩展性等特点
特别适合写一次,读多次的场景
适合
- 大规模数据
- 流式数据(写一次,读多次)
- 商用硬件(一般硬件)
不适合
- 低延时的数据访问
- 大量的小文件
- 频繁修改文件(基本就是写1次)
最后
要知道,Hadoop的使用范围远小于SQL或Python之类的脚本语言,所以不要盲目使用Hadoop,看完这篇文章,要知道Hadoop是否适用于你的项目。
另外,对于没有项目需求的童鞋们,小媛在面试时被问到了大量的大数据题目,主要都与MapReduce有关,有面试相关需求的童鞋记得重点关注MapReduce原理与应用鸥!
参考:
https://www.cnblogs.com/austinspark-jessylu/p/8746843.html
https://www.w3cschool.cn/hadoop/i1la1jyc.html
https://blog.csdn.net/liuxe1990/article/details/89577927