大数据开源技术简介--Hadoop
Posted 狗熊会
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大数据开源技术简介--Hadoop相关的知识,希望对你有一定的参考价值。
自从人类进入信息社会以来,IT技术影响了人们生活的每一个角落。经过了数次技术革新后,大数据技术已经潜移默化的成为了各行各业的必修课,成为了所有企业IT技术的标配。如何才能在信息化浪潮中更好的使用大数据,大数据平台都需要哪些技术,是本文主要阐述的内容。
狗熊会对大数据开源技术也张开了自己热情的臂膀。这些天熊大、熊二迎来了历史上最大的客户——强哥集团,面对逐年增长的业绩,强哥集团的IT建设已经落伍,如何快速搭建一套完整的IT架构这个难题,强哥只能求助其多年的好朋友。
大数据开源历史
强哥集团目前最大的问题就是随着业务的增长,现有的IT环境已经不能满足支撑业务发展的最基本需求,因为对于强哥集团IT部来说,目前的数据量实在是太大了。
这天强哥带着问题来到了狗熊会,首先就跟熊大、熊二提出了自己的问题。熊二听了强哥的问题后,不慌不忙,先跟强哥说了一个词:Hadoop,然后神秘一笑,介绍起了这个开源项目的历史。
说到Hadoop,不得不提大神Doug Cutting,最初Cutting是为了能够实现一个基本的搜索引擎,先是开源搜索引擎函数库Lucene项目,为了能够让更多企业更好的使用搜索技术,紧接着开发了一款能够替代主流搜索引擎的开源产品Nutch。正如Google、百度这样的搜索引擎公司,天生就是大数据产品,很自然Cutting也将开发一套能够处理海量数据及高效的并发计算平台。恰好这时候Google公司发布了三篇论文,该论文描述了Google内部针对大数据的解决方案,基于这三篇论文,Cutting再接再厉,对大数据开源界影响最大的项目Hadoop诞生了,后来Cutting加入Yahoo,Yahoo建了一支团队专门开发Hadoop,Hadoop得而高速发展。
感谢Google,感谢Yahoo,感谢Doug Cutting。
Hadoop简介
熊二继续讲到,先给你介绍几个基本概念。
Hadoop的核心概念包括两个:hdfs和mapreduce。hdfs和mapreduce的思想分别源自<The Google File System>、<MapReduce: Simplified Data Processing on Large Clusters>两篇论文,学习Hadoop首先要了解这两个概念。
熊大急着对强哥说,我们先解决你的两个痛点。第一个,你的数据量目前比较大,只是单纯买机器加硬盘,肯定是不行,你首先需要有一个分布式的文件系统,hdfs就是你想要的。
hdfs,全称Hadoop File System,是一个可扩展的分布式文件系统,用于大型的、分布式的、大量数据进行访问的应用。
本质上说,hdfs就是一个分布式的文件系统,但其在设计上有如下特点使其区别于其他系统,从而保证了它本身的优势:
支持大文件存储,能够支持以T为单位的单文件存储,从而确定了其应对大数据应用的基础。
文件分块存储,hdfs上面的文件是切割成小块存储到集群的不同节点之上,这样在读取文件时集群可以从多个机器上并行读取,从而提高读取的效率。
一次写入多次读取,与传统的文件系统相区别,文件的更新是通过添加新数据完成的,而不是改变已存在的数据,一旦文件写完就只可读。
廉价的硬件设备,hdfs的设计是能够运行在大量的廉价设备上,通过集群系统的容错功能保证集群的正常运转。
数据备份,hdfs认为所有机器都可能会出问题,它将同一个文件块副本分配到多个主机节点上(一般为3个),如果集群中某一台机器挂掉,可以快速的在集群中找到文件副本所在的机器。
综合以上,hdfs运行在廉价的硬件设备上,能够存储海量数据,有备份不怕机器节点故障。它运行于廉价的普通硬件上,但可以提供容错功能,并能为大量的用户提供性能较高的服务。
熊大很骄傲的说,怎么样强哥,满足你的需求了吗?强哥很满意的点了点头。
强哥接着说,数据存储搞定了,计算呢,要知道我现在全国有1万家强哥超市,每天要出一份报表,统计每种商品的销售情况,用来决定第二天的补货量,目前这个报表生成要8个小时,已经耽误第二天补货了。
熊大说,这也是小事,刚才不是还有一个概念mapreduce吗,就是干这个的。
mapreduce是一个分布式计算模型,其基本思想最初源自于函数式编程。通过map和reduce两步操作,能够极大简化分布式计算的复杂度,使得任何程序员都可以通过mapreduce操作完成复杂的分布式计算编程任务。
Hadoop非常完美的实现了这个编程模型,通过mapreduce方式写的程序能够在大规模的Hadoop集群上实现并行化。Hadoop集群提供分布式环境:分割输入数据、任务调度、异常处理、各节点间的通信等。这样就可以让那些没有并行分布式编程经验的程序员以最小的成本完成分布式系统的开发工作。
mapreduce计算模型的输入为key/value集合,通过计算输出key/value集合, 其计算包含如下几个过程:
map过程,接受一个key/value,然后输出map阶段的key/value集合。
shuffle过程,mapreduce模型把所有map输出的所有具有相同key的value聚合在一起,然后把它们传递给reduce函数。
reduce过程,接受一个key和value集合,这个输入都来自于上一个shuffle阶段。reduce函数通过计算生成输出结果,一个新的key/value对。
mapreduce计算示意图
简单来说就,统计商品销售情况,分两步:第一步,很多机器同时把所有单子拆分,然后同样的商品扔给同一台机器;第二步,同一台机器处理同样的商品做简单累加就行了。第一步、第二步里面的具体计算都是被同时分成很多个任务在集群上并行完成的。
这样,销售数据统计就可以扔到Hadoop集群上计算,你现在的数据量再大10倍也能保证10分钟之内统计出来。
熊大拍着胸脯,自豪地说到。
强哥听了熊大、熊二的介绍非常满意,连说谢谢后,起身回公司开始搭建Hadoop集群了。
Spark集群
两个月后,强哥突然再一次拜访狗熊会。强哥对熊大、熊二说,今天我带来两个消息,一个是Hadoop已经在公司搭建起来了,并且销售统计的事情确实分分钟搞定,强哥超市的采购流程比以前好多了;但是,又有了新问题,你知道强哥集团招了很多科学家,他们提出了一个算法,用来优化超市商品的摆放问题,相信你们也听过“啤酒-尿不湿”的故事。问题就出在我们的科学家使用关联规则算法,把程序提交到Hadoop平台,最终运行完要等待很长时间,这和你们之前给我讲的不一样啊。
熊二听完会心一笑,你上次急急忙忙走了之后,我就猜到你还会回来的,因为熊大还没讲完,你就着急先走了。
今天再给你介绍一个新武器,UC伯克利的开源项目——Spark,熊二接着说到。
Spark提供了一套与Hadoop相似的集群计算环境,但其基于内存和迭代优化的设计,使其性能更优。有测试表明,Spark的应用在内存中的运行速度相比Hadoop提升100倍,甚至Spark的应用在磁盘上的运行速度比Hadoop提升10倍。
先等等,强哥抢着问,这样看起来有Spark就够了,为什么还要hadoop,况且听你这么讲,Spark要比hadoop性能好很多。
先别急,听我介绍完,然后再讲Spark和hadoop的关系。
Apache Spark是一个围绕速度、易用性和复杂分析构建的大数据处理框架,可用来构建大型的、低延迟的数据分析应用程序。
至于两者的区别与联系,你可以认为Spark的计算模式与Hadoop的mapreduce并行框架所类似。Spark与Hadoop所不同的是,Spark会直接在内存中保存中间结果,而不是在hdfs中转,所以减少了IO操作,尤其适用那些机器学习、数据挖掘等需要迭代的计算模型,迭代10000次,就少了10000次的中间结果读写,性能提升是必然的。
所以,你应该知道为什么“啤酒-尿不湿”的算法在Hadoop上不灵了吧,熊二补充道。
对于有了Spark还要不要Hadoop这个问题,很多人都有这样的疑问,我自己也思考了很久。我们不应该将Spark看作是Hadoop的替代品,要说是替代品,也是Hadoop mapreduce的替代品。Hadoop是Spark的基础,Spark运行在hdfs之上,其基于内存的计算方式,能够做为Hadoop的补充,提供额外的增强功能。
听你讲的,我都有点激动了,快讲讲Spark都能做些什么吧,强哥迫不及待的问到。
要知道当大数据风靡全球的时候,同时出现了很多计算模型,例如批处理的mapreduce、图算法、流式计算等等,加上大数据本身的多样性和复杂性,用户一般都会将很多系统整合到一起,比如我就将hive和Hadoop整合到一起。即便如此,仍然不能应对各种各样复杂的业务需求。这个时候Spark诞生了,其主旨就是为分布式数据处理设计一个统一的引擎。
Spark具有类似mapreduce的编程模型,但是使用一种称为“弹性分布式数据集”或者叫RDD的概念,通过这个核心思想,Spark得以各种黑科技加持。
RDD是由数据组成的不可变数据集合,Spark在内存中直接处理这种数据集合,所以会比其他大数据技术性能更优。
Spark不仅仅提供map、reduce两种操作,基于RDD数据集,还提供80多种操作函数,可以将其分成两大类,变换(Transformation)和动作(Action),举几个常用的例子。
变换:变换操作总是获得一个新的RDD,如:map、filter、flatMap、union、 intersection。
动作:动作操作会在处理RDD集合后返回一个新的值,如:reduce、collect、count。
除此之外,Spark可以支持复杂的查询;提供简单易用的API接口,而且支持Scala,Java,Python语言;提供交互式Shell操作。
先等等,你说的这些太绕了,我听不懂啊,能直观点吗?强哥摸了摸自己的脑袋,很郁闷的说。
熊二笑了笑说,这样吧,我直接给你讲讲Spark现有的库吧,这些肯定会是你以后常用的。
Spark Streaming
Spark Streaming处理实时的流式数据,易于构建可扩展的容错流式应用程序。
Spark SQL
通过Spark SQL在Spark数据集上执行类似SQL的查询,结构化处理大数据。
Spark MLlib
MLlib是一个可扩展的Spark机器学习库,包含通用的机器学习算法,如二元分类、线性回归、聚类、协同过滤、梯度下降等。
Spark GraphX
GraphX是用于图计算和并行图计算的Spark API。
光头强似乎明白的点了点头,那我们的关联规则算法就可以用Spark的MLlib来搞了。
当然,你回去探索吧,性能好的超乎你意料。熊二拍着胸脯说。
以上是关于大数据开源技术简介--Hadoop的主要内容,如果未能解决你的问题,请参考以下文章