1.Hadoop是什么?2.Hadoop能做什么?
这两个问题,我相信大家都比较的关心。那么我们就来聊聊它们。
首先,Hadoop是一个由Apache基金会所开发的分布式系统基础架构。
Hadoop是一个能够让用户轻松架构和使用的分布式计算平台。用户可以轻松地在Hadoop上开发和运行处理海量数据的应用程序。它主要有以下几个优点:
1. 高可靠性。Hadoop按位存储和处理数据的能力值得人们信赖。
2. 高扩展性。Hadoop是在可用的计算机集簇间分配数据并完成计算任务的,这些集簇可以方便地扩展到数以千计的节点中。
3. 高效性。Hadoop能够在节点之间动态地移动数据,并保证各个节点的动态平衡,因此处理速度非常快。
4. 高容错性。Hadoop能够自动保存数据的多个副本,并且能够自动将失败的任务重新分配。
5. 低成本。与一体机、商用数据仓库以及QlikView、Yonghong Z-Suite等数据集市相比,hadoop是开源的,项目的软件成本因此会大大降低。
Hadoop带有用Java语言编写的框架,因此运行在 Linux 生产平台上是非常理想的。
其实我们要知道大数据的实质特性:针对增量中海量的结构化,非结构化,半结构数据,在这种情况下,如何快速反复计算挖掘出高效益的市场数据??带着这 个问题渗透到业务中去分析,就知道hadoop需要应用到什么业务场景了!!!如果关系型数据库都能应付的工作还需要hadoop吗?
关于hadoop,我映像比较深刻的是知乎中有人提到的一个“秒级营销”,什么是“秒级营销”呢?说白了就是:
1.通过大数据计算你的个人信息;
2.然后进行精准推送。
hadoop还能够做什么呢?
例如:
· 大数据量存储:分布式存储
· 日志处理: Hadoop擅长这个
· 海量计算: 并行计算
· ETL:数据抽取到oracle、mysql、DB2、mongdb及主流数据库
· 使用HBase做数据分析: 用扩展性应对大量的写操作—Facebook构建了基于HBase的实时数据分析系统
· 搜索引擎:hadoop + lucene实现
· 数据挖掘:目前比较流行的广告推荐
· 大量地从文件中顺序读。HDFS对顺序读进行了优化,代价是对于随机的访问负载较高。
· 任何一台服务器都有可能失效,需要通过大量的数据复制使得性能不会受到大的影响。
· 个性化广告推荐
说了这么多,如果没有理解没有明白,没关系。我们挑其核心讲呗
Hadoop最核心的设计就是HDFS和MapReduce
1.Hdfs提供海量的数据存储。
具体的可参看HDFS详解(个人推荐,该博客拥有比较多的文档支撑)
2.MapReduce提供了对数据的计算。
MapReduce采用"分而治之"的思想,把对大规模数据集的操作,分发给一个主节点管理下的各个分节点共同完成,然后通过整合各个节点的中间结果,得到最终结果。简单地说,MapReduce就是"任务的分解与结果的汇总"。
在Hadoop中,用于执行MapReduce任务的机器角色有两个:一个是JobTracker;另一个是TaskTracker,JobTracker是用于调度工作的,TaskTracker是用于执行工作的。一个Hadoop集群中只有一台JobTracker。
在分布式计算中,MapReduce框架负责处理了并行编程中分布式存储、工作调度、负载均衡、容错均衡、容错处理以及网络通信等复杂问题,把处理过程高度抽象为两个函数:map和reduce,map负责把任务分解成多个任务,reduce负责把分解后多任务处理的结果汇总起来。
需要注意的是,用MapReduce来处理的数据集(或任务)必须具备这样的特点:待处理的数据集可以分解成许多小的数据集,而且每一个小数据集都可以完全并行地进行处理。
在Hadoop中,每个MapReduce任务都被初始化为一个Job,每个Job又可以分为两种阶段:map阶段和reduce阶段。这两个阶段分别用两个函数表示,即map函数和reduce函数。map函数接收一个<key,value>形式的输入,然后同样产生一个<key,value>形式的中间输出,Hadoop函数接收一个如<key,(list of values)>形式的输入,然后对这个value集合进行处理,每个reduce产生0或1个输出,reduce的输出也是<key,value>形式的。
MapReduce处理大数据集的过程
经过这么一讲解,您是不是对hadoop有了新一步的认识呢?