一、为什么需要hadoop?
在数据量很大的情况下,单机的处理能力无法胜任,必须采用分布式集群的方式进行处理,而用分布式集群的方式处理数据,实现的复杂度呈级数增加。所以,在海量数据处理的需求下,一个通用的分布式数据处理技术框架能大大降低应用开发难点和减少工作量。
我们先来看这么一个例子:我们要从一个用户使用app的日志数据中统计每个用户搜索了哪些关键词,这个日志文件有21G大,而我们的一个服务器只有8G内存,很显然一台服务器无法干这活。那么我们的处理方案应该是这样,见图一:
从图一我们知道,要顺利完成这么一个集群工作,它存在几个问题:
1)如何分发业务应用到集群的各台服务器上
2)设置好每台服务器的运算环境
3)业务逻辑要进行适应性的改造,需要一个专门的汇总程序来处理各台服务器的结果
4)任务的监控和容错,比如B服务器挂掉了就需要重新分配一个服务器去处理B服务器中的1/3数据
5)如何处理中间结果数据的缓存、调度和传输
等等...
要我们自己编写一个程序来处理以上的问题是极其复杂的,我曾经写过一个脚本完成“如何分发业务应用到集群的各台服务器上”这个问题,复杂度也是不小的。
而hadoop却可以帮助我们处理上面的所有问题,我们只需要编写我们的业务程序即可。
二、hadoop是什么?
hadoop是用于处理(运算分析)海量数据的技术平台,并且是采用分布式集群的方式。
hadoop有两大功能:
1)提供海量数据的存储服务。
2)提供分析海量数据框架及运行平台。
关键词为存储、分析海量数据和运行平台。
hadoop三大核心组件:
1)HDFS:hadoop分布式文件系统海量数据存储(集群服务)。
2)MapReduce:分布式运算框架(编程框架),海量数据运算分析。
3)Yarn:资源调度管理集群(可以理解为一个分布式的操作系统,管理和分配集群硬件资源)。
用MapReduce编写一个程序,到Yarn运行平台上去运行。
hadoop两大使用角度:
1)可以把hadoop理解为一个编程框架,类比struts、spring、mybatis,有着自己特定的api封装和用户编程规范,用户可借助这些api来实现数据处理逻辑。
2)从另一个角度,hadoop可以理解为一个提供服务的软件,类比数据库服务的oracle/mysql、索引服务solr、缓存服务redis,用户程序通过客户端向hadoop集群请求服务来实现特定的功能。