分布式hadoop

来源:互联网 发布:centos编译安装php7.1 编辑:程序博客网 时间:2024/06/04 22:47

来自http://blog.csdn.net/u013926113/article/details/51539306

以网页中图例子为例,写下自己做的两次map reduce结果

第一次map:

输入->输出

A, B -> 

A : A, B

B : A, B


A, H->

A : A, H

H : A, H


B, C->

B : B, C

C : B, C


C, D->

C : C, D

D : C, D


C, F->

C : C, F

F : C, F


C, I->

C : C, I

I : C, I


D, E->

D : D, E

E : D, E


D, F->

D : D, F

F : D, F


E, F->

E : E, F

F : E, F


F, G->

F : F, G

G : F, G


G, H->

G : G, H

H : G, H


G, I->

G : G, I

I : G , I


H, I->

H : H I

I : H I

第一次reduce

输入->输出

A : {A, B A, H}->

{A, B } : "deg1friend"

{A, H} : "deg1friend"

{B, H }:"deg2friend"


B :  {A, B  B, C}->

{A, B} :"deg1friend"

{ B, C} : "deg1friend"

{A, C} : "deg2friend"


C : {B, C  C, D C, F  C, I}->

{B, C} : "deg1friend"

{  C, D} : "deg1friend"

{C, F} : "deg1friend"

{  C, I} : "deg1friend"

{B, D}  : "deg2friend"

{B, F} : "deg2friend"

{B, I} : "deg2friend"

{D, F} : "deg2friend"

{D, I} : "deg2friend"

{F,I} : "deg2friend"


D: {C, D  D, E  D, F}->

{C, D} : "deg1friend"

{  D, E} : "deg1friend"

{  D, F} : "deg1friend

{ C, E}: "deg2friend

{C, F}: "deg2friend

{E, F}: "deg2friend


E: {D, E  E, F}->

{D, E} : "deg1friend"

{  E, F} : "deg1friend"

{D, F} : "deg2friend"


F: {C,F  D,F  E, F  F, G}->

{C,F } : "deg1friend"

{  D,F} : "deg1friend"

{  E, F} : "deg1friend"

{ F, G} : "deg1friend"

{C,D} : "deg2friend"

{C, E} : "deg2friend"

{C, G} : "deg2friend"

{D, E} : "deg2friend"

{D, G} : "deg2friend"

{E, G} : "deg2friend"


G : {F, G  G, H  G, I}->

{F, G   } : "deg1friend"

{ G, H} : "deg1friend"

{G, I} : "deg1friend"

{F, H} : "deg2friend"

{F, I} : "deg2friend"

{H, I} : "deg2friend"


H: {A,H  G, H  H, I}->

{A,H } : "deg1friend"

{ G, H} : "deg1friend"

{  H, I} : "deg1friend"

{A, G} : "deg2friend"

{A, I} : "deg2friend"

{G, I} : "deg2friend"


I : {C,I  G,I  H, I}->

{C,I   } : "deg1friend"

{G,I} : "deg1friend"

{ H, I} : "deg1friend"

{C, G} : "deg2friend"

{C, H} : "deg2friend"

{G, H} : "deg2friend"


第二次map

判断如果有三个元素(表示又是第一度又是第二度人脉)设置key为前两项,value为最后一项

reduce把二度人脉赋值为可能性。

输入->输出

{A, B } : "deg1friend"  "deg1friend"->


{A, C} : "deg2friend"

{A, G} : "deg2friend"

{A, H} : "deg1friend"  "deg1friend"

{A, I} : "deg2friend"

{ B, C} : "deg1friend"  "deg1friend"

{B, D}  : "deg2friend"

{B, F} : "deg2friend"

{B, H }:"deg2friend"

{B, I} : "deg2friend"

{  C, D} : "deg1friend"  "deg1friend"  "deg2friend"

{ C, E}: "deg2friend  "deg2friend"

{C, F} : "deg1friend"  "deg2friend   "deg1friend"

{C, G} : "deg2friend"  "deg2friend"

{C, H} : "deg2friend"

{  C, I} : "deg1friend"   "deg1friend"

{  D, E} : "deg1friend"  "deg1friend"  "deg2friend"

{D, F} : "deg2friend"  "deg1friend "deg2friend"  "deg1friend"

{D, G} : "deg2friend"

{D, I} : "deg2friend"

{E, F}: "deg2friend "deg1friend"  "deg1friend"

{E, G} : "deg2friend"

{ F, G} : "deg1friend" "deg1friend"

{F, H} : "deg2friend"

{F,I} : "deg2friend" "deg2friend"

{ G, H} : "deg1friend"  "deg1friend"  "deg2friend"

{G, I} : "deg1friend" "deg2friend"  "deg1friend"

{H, I} : "deg2friend"  "deg1friend"  "deg1friend"

第二次reduce:

{A, B } : "deg1friend"  "deg1friend"->


{A, C} : "deg2friend"->

1 :  {A, C}

{A, G} : "deg2friend"

1 : {A, G}

{A, H} : "deg1friend"  "deg1friend"

{A, I} : "deg2friend"->

1 : {A, I}

{ B, C} : "deg1friend"  "deg1friend"

{B, D}  : "deg2friend"->

1 : {B, D}

{B, F} : "deg2friend"->

1 : {B, F}

{B, H }:"deg2friend"->

1 : {B, H}

{B, I} : "deg2friend"->

1 : {B, I}

{  C, D} : "deg1friend"  "deg1friend"  "deg2friend"

{ C, E}: "deg2friend  "deg2friend"->

2 : {C, E}

{C, F} : "deg1friend"  "deg2friend   "deg1friend"

{C, G} : "deg2friend"  "deg2friend"->

2 : {C, G}

{C, H} : "deg2friend"

1 : {C, H}

{  C, I} : "deg1friend"   "deg1friend"

{  D, E} : "deg1friend"  "deg1friend"  "deg2friend"

{D, F} : "deg2friend"  "deg1friend "deg2friend"  "deg1friend"

{D, G} : "deg2friend"

1 : {D, G}

{D, I} : "deg2friend"

1 : {D, I}

{E, F}: "deg2friend "deg1friend"  "deg1friend"

{E, G} : "deg2friend"

1 : {E, G}

{ F, G} : "deg1friend" "deg1friend"

{F, H} : "deg2friend"

1 : {F, H}

{F,I} : "deg2friend" "deg2friend"

2 : {F, I}

{ G, H} : "deg1friend"  "deg1friend"  "deg2friend"

{G, I} : "deg1friend" "deg2friend"  "deg1friend"

{H, I} : "deg2friend"  "deg1friend"  "deg1friend"

一下部分来自:http://blog.csdn.net/u010385646/article/details/50590448
Hadoop=HDFS(文件系统,数据存储技术相关)+HBase(数据库)+MapReduce(数据处理)
物理实体:
参入mapreduce作业执行涉及4个独立的实体:


客户端(client):编写mapreduce程序,配置作业,提交作业,这就是程序员完成的工作;
JobTracker:初始化作业,分配作业,与TaskTracker通信,协调整个作业的执行;
TaskTracker:保持与JobTracker的通信,在分配的数据片段上执行Map或Reduce任务,TaskTracker和JobTracker的不同有个很重要的方面,就是在执行任务时候TaskTracker可以有n多个,JobTracker则只会有一个(JobTracker只能有一个就和hdfs里namenode一样存在单点故障,我会在后面的mapreduce的相关问题里讲到这个问题的)
Hdfs:保存作业的数据、配置信息等等,最后的结果也是保存在hdfs上面
在分布式存储和分布式计算方面,Hadoop都是用从/从(Master/Slave)架构。在一个配置完整的集群上,想让Hadoop这头大 象奔跑起来,需要在集群中运行一系列后台(deamon)程序。不同的后台程序扮演不用的角色,这些角色由NameNode、DataNode、 Secondary NameNode、JobTracker、TaskTracker组成。其中NameNode、Secondary  NameNode、JobTracker运行在Master节点上,而在每个Slave节点上,部署一个DataNode和TaskTracker,以便 这个Slave服务器运行的数据处理程序能尽可能直接处理本机的数据。对Master节点需要特别说明的是,在小集群中,Secondary  NameNode可以属于某个从节点;在大型集群中,NameNode和JobTracker被分别部署在两台服务器上。
nameNode: 它维护着文件系统树(filesystem tree)以及文件树中所有的文件和文件夹的元数据(metadata)。
dataNode: 文件系统的工作节点,他们根据客户端或者是namenode的调度存储和检索数据,并且定期向namenode发送他们所存储的块(block)的列表。
secondaryNameNode:一个用来监控HDFS状态的辅助后台程序.它会与NameNode进行通信,以便定期地保存HDFS元数据的 快照。如果NameNode发生问题,Secondary  NameNode可以及时地作为备用NameNode使用。
jobTracker:用来连接应用程序与Hadoop。用户代码提交到集群以后,由JobTracker决定哪个文件将被处理,并且为 不同的task分配节点。同时,它还监控所有的task,一旦某个task失败了,JobTracker就会自动重新开启这个task
TaskTracker:与负责存储数据的DataNode相结合,其处理结构上也遵循主/从架构。JobTracker位于主节点,统领 MapReduce工作;而TaskTrackers位于从节点,独立管理各自的task。
mapreduce的主要思想是将自动分割要执行的问题拆解成map(映射)和reduce(化简)的方式。在数据
被分割后通过map函数的程序将数据映射成不停的区块,分配给计算机机群处理达到分布式运算的效果。在通过reduce函数的程序将结果汇整,从而输出开发者需要的结果。
MapReduce 借鉴了函数式程序设计语言的设计思想,其软件实现是指定一个Map 函数,把键值对(key/value)映射成新的键值对(key/value),形成一系列中间结果形式的key/value 对,然后把它们传给Reduce(规约)函数,把具有相同中间形式key 的value 合并在一起。map阶段,当map task开始运算,并产生中间数据后并非直接而简单的写入磁盘,它首先利用内存buffer来对已经产生的buffer进行缓存,并在内存buffer中 进行一些预排序来优化整个map的性能。而上图右边的reduce阶段则经历了三个阶段,分别Copy->Sort->reduce。我们能 明显的看出,其中的Sort是采用的归并排序,即merge sort。


 hadoop框架详细分析



0 0
原创粉丝点击