您的位置:首页 > 运维架构

hadoop到底是什么玩意?0经验菜鸟的顿悟

2017-08-25 10:24 597 查看
昨天看见一个表结构的后缀,

STORED AS PARQUET                                                                                                                                                                    
 LOCATION 'hdfs://abc/user/hive/warehouse/fin_dw_dev.db/dwd_rsk_court_announ_dd'                                                                                                 

 TBLPROPERTIES ('transient_lastDdlTime'='1501735183')

我就想这是个什么玩意?然后。。。。

一张表莫名的尾部引发的灾难 -- 什么是spark --哎spark和hadoop相似 -- 哎hadoop干啥的 -- 哎hive是啥 -- 哎HDFS为啥叫分布式系统 -- 哎啥是集群 -- 哎啥是信道 -- 哎卧槽还有完没完。。
来吧,开头开好了,

相信刚看见hadoop的同学和我昨天一样,一脸懵逼,只知道和大数据有关系,但具体的就啥也不知道了。。来和我一起搞搞它。

首先了解几个概念,因为接下来你会用到它,不能好好了解这几个概念,你绝对懵的一逼,

集群:顾名思义,一个集合一个群体,就是一堆一样的东西,比如一堆苹果;10个厨师的集合;官方解释:同一个业务部署在多个服务器上,比如做菜,让10个厨师做菜

分布式(HDFS):一个业务拆分成多个性质不同的子业务,再部署到不同服务器上,就好比做菜过程中,有洗菜的,切菜的,炒菜的,做这些事的人是不同的3个人,这个就叫分布式。

既然都说了是处理数据吗,有多大量呢?就是如图的n*n。。。当然太多了,这个考虑到负载均衡 像什么网络吞吐量啥的,就有点崩溃的感觉,反正你想嘛!你最多背十块砖,再给你来100块让你背,是不你就炸了!!!同理同理。



然后来到hadoop下的几个概念:

在Hadoop部署中,有三种服务器角色,他们分别是客户端、Masters节点以及Slave 节点,是不是懵逼了,没事没事接着看

客户端就是干啥的呢,发送请求的呗,比如,它说:我要把file.txt文件分成3块添加到集群中去,就是发号施令,

然后这个Masters节点,它里面有俩核心的东西,HDFS和MapReduce,hdfs就是分布式系统了么,就是以分布式的形式处理数据的系统,MapReduce它呢,你储存确实牛逼,你储存了多少,还不得我给你算数量,它就是并行计算的,啥是并行?你算你的我算我的,咱俩同时算。

还剩Slave 节点这货了,负责具体工作和数据存储,具体工作是啥?你往下看啊你啊你。。

然后hadoop中还有成员呢,像那个谁,Name Node、DataNode、Secondary NameNode;Name Node很牛逼,就是个没有皮肤的王者,就是你客户端干点啥都得先来我这报道,然后我告诉你你去发数据给谁,谁给你处理数据,这个datanode处理数据处理到哪里了,数据处理完了你到哪里去取,反正干啥Name Node都知道,对于hadoop的所有成员的蛛丝马迹,它都有记录,如数家珍,namenode的官方名称说是叫元数据配置,就是描述数据的数据。Secondary
NameNode就是她的替补,有一天Name Node这哥们正在办事的过程中坏了,咋办,那事就不办了?不行啊,Secondary NameNode你上!!

对了,还有一个概念,叫做 机架,它是干啥的呢,其实我也不是很明白,你就知道这个机架意识,客户端下有机架,机架下有集群,集群下分布式系统,系统下有DataNode,你看它的位置,你是不是明白了什么,后续会有一个博客地址,你看完我的再看他的,很多事就好理解了。

客户端给HDFS分配任务并得到任务结果的过程:

【客户端已经准备好将 FILE.txt 分成三块添加到集群中(分别给 Block A
、 Block B、
Block C)。客户端会先告诉 Name Node 它将要把数据写入到集群中,从 Name Node处得到允许后,并受到 Name Node 为其分配的 Data Node 清单,当所有的 Data Node 已经成功的接收到了数据块,它们将会报告给 Name Node,同时也会告知客户端一切准备就绪并关闭回话,此时客户端也会返回一个成功的信息给 Name Node。Name Node 开始更新元数据信息将
Block A 在 File.txt 中的位置记录下来。】【当客户端打算从 HDFS 中取数据的时候,例如一个作业的结果,同样需要首先与 Name Node 打交道,得知想取的数据被存放在哪里,Name Node 同样会给客户端一个清单,然后客户端去 Name Node 指定的某个 Data Node 中拿数据(客户端不会逐个 Data Node 去拿数据,而是由 Name Node 指定的那个 Data Node 分别去其他的 Data Node 那里拿数据)】

Hadoop 是具体如何使用 Map Reduce 框架来进行快速运算:

第一步是 Map 阶段,在我们的例子中,我们要求我们的 Hadoop 集群计算出邮件中“Refund”单词的数量。 在一开始,客户端会提交一个 Map Reduce 作业,例如:“在 File.txt 中有多少个 Refund?”当然,这句话是翻译自 Java 语言,通过 Java 编写好一个 Map Reduce 作业并提交作业给 Job Tracker。Job Tracker 与 Name Node 协调得到哪些 Data Node 包含 File.txt 的数据块。 然后 Job Tracker 开始在这些
Data Node 上激活 Task Tracker。 Task Tracker 开始 Map 作业并监视任务进度。Task Tracker同时也提供心跳和任务状态给 Job Tracker。当所有的 Map 任务完成后,每个节点都会存放一个结果在其本地物理磁盘上,这被称为“中间数据”。接下来,就是将这些中间数据通过网络发送给一个执行 Reduce 任务的节点。 Job Tracker 总会尽量挑选处理 Map 任务的节点来处理 Reduce 任务,因为 Map 处理的数据就在本地,不需要通过网络来传输,但是,Job
Tracker 并不保证一定会挑选本地节点,因为可能 Map 任务较多,没有资源来运行 Reduce 任务,这样就会挑选其他的节点(同样Job Tracker 会根据机架意识来挑选同一机架内的其他节点来完成 Reduce 任务)

第二步就是 Reduce,当 Map 生成了中间数据后,现在我们需要将所有的这些中间数据汇总计算生成最终的数据。 Job Tracker 可能会挑选集群中任意一个节点来作为 Reduce 任务的处理服务器,此时可能会一次性有大量的数据涌向 Reduce 任务所在的节点服务器,这种情况通常被称为“Incast”或“fan-in”。这需要牛逼点的交换机以及内部流量管理和足够的缓冲区(不要太大,也不要太小)。缓冲区的大小最终可能会造成不必要的附带损害(流量相关)。现在 Reduce 已经收集到了所有从 Map 计算得到的中间数据,并可以开始最后阶段的计算,在本文的例子中,我们仅仅是简单的将各个结果相加即可得到“Refund”的数量。然后将结果写入到
Results.txt 文件。客户端可以从HDFS中读取Results.txt 文件,并将工作视为完成。

hadoop也面临着很多问题,这个你就去这哥们这里好好看看吧,相信看完我的你再看他的就事半功倍了。
http://blog.sina.com.cn/s/blog_4aca42510102vuxo.html
ok!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: