0开始之前,我觉得有必要结合所见所学,说说大数据时代下的背景。
首先,对于数据,我们一个是要保存它,二个是要处理它。怎么做呢?很简单,用计算机呗。像一般我们熟知的家用电脑,什么号称高性能的游戏本,对于大多数人处理生活中的数据已经是绰绰有余了,为什么?因为这个数据量只是限于“家用”“个人”,说白了就是规模太小了。然而我们换个地方,我们来统计一下某一个高速路收费站,某一天所有车流量的信息(车牌号,户主等等),成百上千的数据?可以,那我们换成某个市的呢?我们再换成全国的呢?甚至把一天的换成一个星期,一个月的呢?那就恐怖了,根据网上信息,2016年7月份,全国高速公路,光是客车流量就已经高达39073万辆次,更别说加上你家的小轿车。好了,我们现在怎么存储这些数据呢,用你家电脑的硬盘?恐怕会炸的,那换更个大的硬盘?500G?5000G?50000G?先别说你买不买得起,就说你有没有这种硬盘可能都是问题。所以,靠原始思路,单纯的扩充存储容量,无论从科技技术还是经济效益来讲都是不可行的。我们的处理器,CPU,也是同理,打打小游戏估计可以,处理这么大的数据的话,还是得另想办法了。
怎么办?这就是我们Hadoop框架出现的意义了,为规模庞大的数据处理提供了可能性。我个人理解,它的核心思想就是化整为零,并行计算!也就是我们说的“分布式”。简单说来,你500G的硬盘可以有,那我两个250G的硬盘加起来还不是500G;你50000G的硬盘可能找不到,但是我能找到100个500G的硬盘啊。处理数据同理,计算 1*2+3*4 ,你可以一个人算,我也可以先找个人算1*2,再让另外个算3*4,最后汇总加上,结果是不是相同呢?这就是简单的对Hadoop框架的理解。
HDFS
HDFS,是一种,工头指挥一群工人干活的文件系统,大多应该都是是 主/从 (Master/Slave)架构,像我们配置的主节点的有NameNodes,从节点有DataNodes。我们工头NameNodes负责调度,各个DataNodes就负责干活。另外还有一个叫做Secondary NameNode,都简单说说我的理解。
1.NameNodes
顾名思义,名称节点,它就相当于整个班的花名册,但是存的东西更多,包括整个文件系统的东西的信息、文件、结构。比如a数据节点在这个地方,存了xxxx;b数据节点在那个地方,存了xxxx... ...现在要让某数据节点干活,一个一个的找?太蠢了,直接翻花名册呗。NameNodes还监管着文件系统的常用操作,创建文件,重命名文件等。所以我们在使用文件系统时,几乎都是先和这东西打交道的,这也是为什么它被放在主节点的原因。
2.DataNodes
顾名思义,数据节点,这就是我们真正存数据的地方,并且都有单独的计算能力,可以理解为一台简化的电脑(显示屏用不着,键盘鼠标等都用不着)。我们一旦从NameNodes那儿知道了各个DataNodes的具体信息,我们就不再和NameNodes打交道,而直接向DataNodes操作,NameNodes再实时记录这些变化。
3.Secondary NameNode
依旧顾名思义,第二个NameNode,第二个名称节点,干啥的呢?假如你的NameNodes歇火了怎么办?特别是搞金融、个人信息的,一不小心就是分分钟几千万上下的损失,干着急吗?这SecondaryNameNode就可以说是一种预防措施之一,它虽然并不像NameNodes一样实时记录各节点变化,但是它是NameNodes的一种快照,他会与NameNodes进行通信,如果NameNodes发生问题,Secondary NameNode可以及时地作为备用NameNode使用。如果集群庞大,它会部署在一个单独的服务器上(我们那三个节点就... ...算了算了)。
稍微说说Hadoop的“预防措施”:
数据丢失,机器故障这些谁都说不准,最好的做法只能未雨绸缪,怎么办?数据备份,你想备份多少备份多少(HDFS默认的是3份来着),如果实在倒霉得一次性数连备份都丢完了,那怎么办?赔钱呗。具体是怎么备份的,可以去网上找找,我现在理解的还不够。
MapReduce
MapReduce,这个就不能直译了,它是一种编程模型 ,其实是由两个部分,map和reduce组成。如刚才所说,HDFS有 和Master和Slave的区分(其实现在应该是Master和Worker),其中干活的是Slave。而Slave有很多很多台,更有具体的分工,也就是Map和Reduce。
1.Map
简单说就是执行我们规定的函数的地方。 再拓宽来讲,首先Master把具体的job细分,扔给执行Map的Slave,我们想要对数据进行处理的函数模型就是在Map中。
2.Reduce
这个说白了就是统计结果的东西。Map干完活了,零零散散的结果你直接扔给Boss吗?怕不是要一巴掌打死你。Map得到结果后扔给Reduce,Reduce汇总统计后,才会再得出最终的答案。
For Example:
全班60个人,其中班委8个人,我们来统计全班的平均身高:
1. 老师让8个班委中的6个人来算各个小组的平均身高,2个人来汇总
2. 老师把60个人分成了6组,分别给6个班委统计,每个班委统计10个人
3. 6个班委分别得出了每10个人的平均身高,再提交给2个负责统计的同学
4. 2个统计的同学得出全班平均身高
最后,MapReduce就是一种分而治之的数据处理理念。但是实际情况肯定复杂得多,我所说的的只是简单的核心流程。
如果有理解错误的地方,欢迎随时在下方评论。( ̄︶ ̄)↗
。