hadoop常用算法例子

hadoop常用算法例子
hadoop常用算法例子

基本MapReduce模式计数与求和基本MapReduce模式计数与求和

问题陈述:

有许多文档,每个文档都有一些字段组成。需要计算出每个字段在所有文档中的出现次数或者这些字段的其他什么统计值。例如,给定一个log文件,其中的每条记录都包含一个响应时间,需要计算出平均响应时间。

解决方案:

让我们先从简单的例子入手。在下面的代码片段里,Mapper每遇到指定词就把频次记1,Reducer一个个遍历这些词的集合然后把他们的频次加和。

1.class Mapper

2. method Map(docid id, doc d)

3. for all term t in doc d do

4. Emit(term t, count 1)

5.

6.class Reducer

7. method Reduce(term t, counts [c1, c2,...])

8. sum = 0

9. for all count c in [c1, c2,...] do

10. sum = sum + c

11. Emit(term t, count sum)

复制代码

这种方法的缺点显而易见,Mapper提交了太多无意义的计数。它完全可以通过先对每个文档中的词进行计数从而减少传递给Reducer的数据量:

[size=14.166666030883789px]

1. 1 class Mapper

2. 2 method Map(docid id, doc d)

3. 3 H = new AssociativeArray

4. 4 for all term t in doc d do

5. 5 H{t} = H{t} + 1

6. 6 for all term t in H do

7.7 Emit(term t, count H{t})

复制代码

如果要累计计数的的不只是单个文档中的内容,还包括了一个Mapper节点处理的所有文档,那就要用到Combiner了:

[size=14.166666030883789px]

1. 1 class Mapper

2. 2 method Map(docid id, doc d)

3. 3 for all term t in doc d do

4. 4 Emit(term t, count 1)

5. 5

6. 6 class Combiner

7.7 method Combine(term t, [c1, c2,...])

8.8 sum = 0

9.9 for all count c in [c1, c2,...] do

10.10 sum = sum + c

11.11 Emit(term t, count sum)

12.12

13.13 class Reducer

14.14 method Reduce(term t, counts [c1, c2,...])

15.15 sum = 0

16.16 for all count c in [c1, c2,...] do

17.17 sum = sum + c

18.18 Emit(term t, count sum)

复制代码

应用:Log 分析, 数据查询整理归类

问题陈述:

有一系列条目,每个条目都有几个属性,要把具有同一属性值的条目都保存在一个文件里,或者把条目按照属性值分组。最典型的应用是倒排索引。

解决方案:

解决方案很简单。在Mapper 中以每个条目的所需属性值作为key,其本身作为值传递给Reducer。Reducer 取得按照属性值分组的条目,然后可以处理或者保存。如果是在构建倒排索引,那么每个条目相当于一个词而属性值就是词所在的文档ID。

应用:倒排索引,ETL过滤(文本查找),解析和校验

问题陈述:

假设有很多条记录,需要从其中找出满足某个条件的所有记录,或者将每条记录传换成另外一种形式(转换操作相对于各条记录独立,即对一条记录的操作与其他记录无关)。像文本解析、特定值抽取、格式转换等都属于后一种用例。

解决方案:

非常简单,在Mapper 里逐条进行操作,输出需要的值或转换后的形式。

应用:日志分析,数据查询,ETL,数据校验分布式任务执行

问题陈述:

大型计算可以分解为多个部分分别进行然后合并各个计算的结果以获得最终结果。

解决方案:将数据切分成多份作为每个Mapper 的输入,每个Mapper处理一份数据,执行同样的运算,产生结果,Reducer把多个Mapper的结果组合成一个。

案例研究:数字通信系统模拟

像WiMAX 这样的数字通信模拟软件通过系统模型来传输大量的随机数据,然后计算传输中的错误几率。每个Mapper 处理样本1/N 的数据,计算出这部分数据的错误率,然后在Reducer 里计算平均错误率。

应用:工程模拟,数字分析,性能测试排序

问题陈述:

有许多条记录,需要按照某种规则将所有记录排序或是按照顺序来处理记录。

解决方案:简单排序很好办– Mappers 将待排序的属性值为键,整条记录为值输出。不过实际应用中的排序要更加巧妙一点,这就是它之所以被称为MapReduce 核心的原因

(“核心”是说排序?因为证明Hadoop计算能力的实验是大数据排序?还是说Hadoop 的处理过程中对key排序的环节?)。在实践中,常用组合键来实现二次排序和分组。MapReduce 最初只能够对键排序,但是也有技术利用可以利用Hadoop 的特性来实现按值排序。想了解的话可以看这篇博客。

按照BigTable的概念,使用MapReduce来对最初数据而非中间数据排序,也即保持数据的有序状态更有好处,必须注意这一点。换句话说,在数据插入时排序一次要比在每次查询数据的时候排序更高效。

应用:ETL,数据分析非基本MapReduce模式迭代消息传递(图处理)

问题陈述:

假设一个实体网络,实体之间存在着关系。需要按照与它比邻的其他实体的属性计算出一个状态。这个状态可以表现为它和其它节点之间的距离,存在特定属性的邻接点的迹象,邻域密度特征等等。

解决方案:

网络存储为系列节点的结合,每个节点包含有其所有邻接点ID的列表。按照这个概念,MapReduce 迭代进行,每次迭代中每个节点都发消息给它的邻接点。邻接点根据接收到的信息更新自己的状态。当满足了某些条件的时候迭代停止,如达到了最大迭代次数(网络半径)或两次连续的迭代几乎没有状态改变。从技术上来看,Mapper 以每个邻接点的ID 为键发出信息,所有的信息都会按照接受节点分组,reducer 就能够重算各节点的状态然后更新那些状态改变了的节点。下面展示了这个算法:

[size=14.166666030883789px]

1. 1 class Mapper

2. 2 method Map(id n, object N)

3. 3 Emit(id n, object N)

4. 4 for all id m in N.OutgoingRelations do

5. 5 Emit(id m, message getMessage(N))

6. 6

7.7 class Reducer

8.8 method Reduce(id m, [s1, s2,...])

9.9 M = null

10.10 messages = []

11.11 for all s in [s1, s2,...] do

12.12 if IsObject(s) then

13.13 M = s

14.14 else // s is a message

15.15 messages.add(s)

16.16 M.State = calculateState(messages)

17.17 Emit(id m, item M)

复制代码

一个节点的状态可以迅速的沿着网络传全网,那些被感染了的节点又去感染它们的邻居,整个过程就像下面的图示一样:

案例研究:沿分类树的有效性传递

案例研究:沿分类树的有效性传递

问题陈述:

这个问题来自于真实的电子商务应用。将各种货物分类,这些类别可以组成一个树形结构,比较大的分类(像男人、女人、儿童)可以再分出小分类(像男裤或女装),直到不能再分为止(像男式蓝色牛仔裤)。这些不能再分的基层类别可以是有效(这个类别包含有货品)或者已无效的(没有属于这个分类的货品)。如果一个分类至少含有一个有效的子分类那么认为这个分类也是有效的。我们需要在已知一些基层分类有效的情况下找出分类树上所有有效的分类。

解决方案:

这个问题可以用上一节提到的框架来解决。我们咋下面定义了名为getMessage和calculateState 的方法:

[size=14.166666030883789px]

1. 1 class N

2. 2 State in {True = 2, False = 1, null = 0},

3. 3 initialized 1 or 2 for end-of-line categories, 0 otherwise

4. 4 method getMessage(object N)

5. 5 return N.State

6. 6 method calculateState(state s, data [d1, d2,...])

7.7 return max( [d1, d2,...] )

复制代码

案例研究:广度优先搜索

问题陈述:需要计算出一个图结构中某一个节点到其它所有节点的距离。

解决方案: Source源节点给所有邻接点发出值为0的信号,邻接点把收到的信号再转发给自己的邻接点,每转发一次就对信号值加1:

[size=14.166666030883789px]

8. 1 class N

9. 2 State is distance,

10.3 initialized 0 for source node, INFINITY for all other nodes

11.4 method getMessage(N)

12.5 return N.State + 1

13.6 method calculateState(state s, data [d1, d2,...])

14.7 min( [d1, d2,...] )

复制代码

案例研究:网页排名和Mapper 端数据聚合

这个算法由Google提出,使用权威的PageRank算法,通过连接到一个网页的其他网页来计算网页的相关性。真实算法是相当复杂的,但是核心思想是权重可以传播,也即通过一个节点的各联接节点的权重的均值来计算节点自身的权重。[size=14.166666030883789px]

15.1 class N

16.2 State is PageRank

17.3 method getMessage(object N)

18.4 return N.State / N.OutgoingRelations.size()

19.5 method calculateState(state s, data [d1, d2,...])

20.6 return ( sum([d1, d2,...]) )

复制代码

要指出的是上面用一个数值来作为评分实际上是一种简化,在实际情况下,我们需要在Mapper端来进行聚合计算得出这个值。下面的代码片段展示了这个改变后的逻辑(针对于PageRank 算法):

[size=14.166666030883789px]

21.1 class Mapper

22.2 method Initialize

23.3 H = new AssociativeArray

24.4 method Map(id n, object N)

25.5 p = N.PageRank / N.OutgoingRelations.size()

26.6 Emit(id n, object N)

27.7 for all id m in N.OutgoingRelations do

28.8 H{m} = H{m} + p

29.9 method Close

30.10 for all id n in H do

31.11 Emit(id n, value H{n})

32.12

33.13 class Reducer

34.14 method Reduce(id m, [s1, s2,...])

35.15 M = null

36.16 p = 0

37.17 for all s in [s1, s2,...] do

38.18 if IsObject(s) then

39.19 M = s

40.20 else

41.21 p = p + s

42.22 M.PageRank = p

43.23 Emit(id m, item M)

复制代码

应用:图分析,网页索引

值去重(对唯一项计数)

问题陈述:记录包含值域F和值域G,要分别统计相同G值的记录中不同的F值的数目(相当于按照G分组).

这个问题可以推而广之应用于分面搜索(某些电子商务网站称之为Narrow Search)

44. Record 1: F=1, G={a, b}

45. Record 2: F=2, G={a, d, e}

46. Record 3: F=1, G={b}

47. Record 4: F=3, G={a, b}

48.

49. Result:

50. a -> 3 // F=1, F=2, F=3

51. b -> 2 // F=1, F=3

52. d -> 1 // F=2

53. e -> 1 // F=2

复制代码

解决方案I:

第一种方法是分两个阶段来解决这个问题。第一阶段在Mapper中使用F和G组成一个复合值对,然后在Reducer中输出每个值对,目的是为了保证F值的唯一性。在第二阶段,再将值对按照G值来分组计算每组中的条目数。

第一阶段:

54.1 class Mapper

55.2 method Map(null, record [value f, categories [g1, g2,...]])

56.3 for all category g in [g1, g2,...]

57.4 Emit(record [g, f], count 1)

58.5

59.6 class Reducer

60.7 method Reduce(record [g, f], counts [n1, n2, ...])

61.8 Emit(record [g, f], null )

复制代码

第二阶段:

62.1 class Mapper

63.2 method Map(record [f, g], null)

64.3 Emit(value g, count 1)

65.4

66.5 class Reducer

67.6 method Reduce(value g, counts [n1, n2,...])

68.7 Emit(value g, sum( [n1, n2,...] ) )

复制代码

解决方案II:

第二种方法只需要一次MapReduce 即可实现,但扩展性不强。算法很简单

-Mapper 输出值和分类,在Reducer里为每个值对应的分类去重然后给每个所属的分类计数加1,最后再在Reducer结束后将所有计数加和。这种方法适用于只有有限个分类,而且拥有相同F值的记录不是很多的情况。例如网络日志处理和用户分类,用户的总数很多,但是每个用户的事件是有限的,以此分类得到的类别也是有限的。值得一提的是在这种模式下可以在数据传输到Reducer之前使用Combiner来去除分类的重复值。

69.1 class Mapper

70.2 method Map(null, record [value f, categories [g1, g2,...] )

71.3 for all category g in [g1, g2,...]

72.4 Emit(value f, category g)

73.5

74.6 class Reducer

75.7 method Initialize

76.8 H = new AssociativeArray : category -> count

77.9 method Reduce(value f, categories [g1, g2,...])

78.10 [g1', g2',..] = ExcludeDuplicates( [g1, g2,..] )

79.11 for all category g in [g1', g2',...]

80.12 H{g} = H{g} + 1

81.13 method Close

82.14 for all category g in H do

83.15 Emit(category g, count H{g})

复制代码

应用:日志分析,用户计数互相关

问题陈述:有多个各由若干项构成的组,计算项两两共同出现于一个组中的次数。假如项数是N,那么应该计算N*N。

这种情况常见于文本分析(条目是单词而元组是句子),市场分析(购买了此物的客户还可能购买什么)。如果N*N小到可以容纳于一台机器的内存,实现起来就比较简单了。

配对法

第一种方法是在Mapper中给所有条目配对,然后在Reducer中将同一条目对的计数加和。但这种做法也有缺点:

?使用combiners 带来的的好处有限,因为很可能所有项对都是唯一的

?不能有效利用内存

[size=14.166666030883789px]

86.1 class Mapper

87.2 method Map(null, items [i1, i2,...] )

88.3 for all item i in [i1, i2,...]

89.4 for all item j in [i1, i2,...]

90.5 Emit(pair [i j], count 1)

91.6

92.7 class Reducer

93.8 method Reduce(pair [i j], counts [c1, c2,...])

94.9 s = sum([c1, c2,...])

95.10 Emit(pair[i j], count s)

复制代码

Stripes Approach(条方法?不知道这个名字怎么理解)

第二种方法是将数据按照pair中的第一项来分组,并维护一个关联数组,数组中存储的是所有关联项的计数。The second approach is to group data by the first item in pair and maintain an associative array (“stripe”) where counters for all adjacent items are accumulated. Reducer receives all stripes for leading item i, merges them, and emits the same result as in the Pairs approach.

?中间结果的键数量相对较少,因此减少了排序消耗。

?可以有效利用combiners。

?可在内存中执行,不过如果没有正确执行的话也会带来问题。

?实现起来比较复杂。

?一般来说,“stripes” 比“pairs” 更快

[size=14.166666030883789px]

101. 1 class Mapper

102. 2 method Map(null, items [i1, i2,...] )

103. 3 for all item i in [i1, i2,...]

104. 4 H = new AssociativeArray : item -> counter

105. 5 for all item j in [i1, i2,...]

106. 6 H{j} = H{j} + 1

107.7 Emit(item i, stripe H)

108.8

109.9 class Reducer

110.10 method Reduce(item i, stripes [H1, H2,...])

111.11 H = new AssociativeArray : item -> counter

112.12 H = merge-sum( [H1, H2,...] )

113.13 for all item j in H.keys()

114.14 Emit(pair [i j], H{j})

复制代码

应用:文本分析,市场分析

参考资料:Lin J. Dyer C. Hirst G. Data Intensive Processing MapReduce用MapReduce表达关系模式

在这部分我们会讨论一下怎么使用MapReduce来进行主要的关系操作。

筛选(Selection)

[size=14.166666030883789px]

0. 1 class Mapper

1. 2 method Map(rowkey key, tuple t)

2. 3 if t satisfies the predicate

3. 4 Emit(tuple t, null)

复制代码

投影(Projection)

投影只比筛选稍微复杂一点,在这种情况下我们可以用Reducer来消除可能的重复值。

[size=14.166666030883789px]

4. 1 class Mapper

5. 2 method Map(rowkey key, tuple t)

6. 3 tuple g = project(t) // extract required fields to tuple g

7. 4 Emit(tuple g, null)

8. 5

9. 6 class Reducer

10.7 method Reduce(tuple t, array n) // n is an array of nulls

11.8 Emit(tuple t, null)

复制代码

合并(Union)

两个数据集中的所有记录都送入Mapper,在Reducer里消重。

[size=14.166666030883789px]

12.1 class Mapper

13.2 method Map(rowkey key, tuple t)

14.3 Emit(tuple t, null)

15.4

16.5 class Reducer

17.6 method Reduce(tuple t, array n) // n is an array of one or two

nulls

18.7 Emit(tuple t, null)

复制代码

交集(Intersection)

将两个数据集中需要做交叉的记录输入Mapper,Reducer 输出出现了两次的记录。因为每条记录都有一个主键,在每个数据集中只会出现一次,所以这样做是可行的。[size=14.166666030883789px]

19.1 class Mapper

20.2 method Map(rowkey key, tuple t)

21.3 Emit(tuple t, null)

22.4

23.5 class Reducer

24.6 method Reduce(tuple t, array n) // n is an array of one or two

nulls

25.7 if n.size() = 2

26.8 Emit(tuple t, null)

复制代码

差异(Difference)

假设有两个数据集R和S,我们要找出R与S的差异。Mapper将所有的元组做上标记,表明他们来自于R还是S,Reducer只输出那些存在于R中而不在S中的记录。

[size=14.166666030883789px]

27.1 class Mapper

28.2 method Map(rowkey key, tuple t)

29.3 Emit(tuple t, string t.SetName) // t.SetName is either 'R' or

'S'

30.4

31.5 class Reducer

32.6 method Reduce(tuple t, array n) // array n can be ['R'], ['S'],

['R' 'S'], or ['S', 'R']

33.7 if n.size() = 1 and n[1] = 'R'

34.8 Emit(tuple t, null)

复制代码

分组聚合(GroupBy and Aggregation)

分组聚合可以在如下的一个MapReduce中完成。Mapper抽取数据并将之分组聚合,Reducer 中对收到的数据再次聚合。典型的聚合应用比如求和与最值可以以流的方式进行计算,因而不需要同时保有所有的值。但是另外一些情景就必须要两阶段MapReduce,前面提到过的惟一值模式就是一个这种类型的例子。

[size=14.166666030883789px]

35.1 class Mapper

36.2 method Map(null, tuple [value GroupBy, value AggregateBy,

value ...])

37.3 Emit(value GroupBy, value AggregateBy)

38.4

39.5 class Reducer

40.6 method Reduce(value GroupBy, [v1, v2,...])

41.7 Emit(value GroupBy, aggregate( [v1, v2,...] ) )

42.8 // aggregate() : sum(), max(),...

复制代码

连接(Joining)

MapperReduce框架可以很好地处理连接,不过在面对不同的数据量和处理效率要求的时候还是有一些技巧。在这部分我们会介绍一些基本方法,在后面的参考文档中还列出了一些关于这方面的专题文章。

分配后连接(Reduce端连接,排序-合并连接)

这个算法按照键K来连接数据集R和L。Mapper 遍历R和L中的所有元组,以K 为键输出每一个标记了来自于R还是L的元组,Reducer把同一个K的数据分装入两个容器(R和L),然后嵌套循环遍历两个容器中的数据以得到交集,最后输出的每一条结果都包含了R中的数据、L中的数据和K。这种方法有以下缺点:

?Mapper要输出所有的数据,即使一些key只会在一个集合中出现。

?Reducer 要在内存中保有一个key的所有数据,如果数据量打过了内存,那么就要缓存到硬盘上,这就增加了硬盘IO的消耗。

尽管如此,再分配连接方式仍然是最通用的方法,特别是其他优化技术都不适用的时候。

[size=14.166666030883789px]

45.1 class Mapper

46.2 method Map(null, tuple [join_key k, value v1, value v2,...])

47.3 Emit(join_key k, tagged_tuple [set_name tag, values [v1,

v2, ...] ] )

48.4

49.5 class Reducer

50.6 method Reduce(join_key k, tagged_tuples [t1, t2,...])

51.7 H = new AssociativeArray : set_name -> values

52.8 for all tagged_tuple t in [t1, t2,...] // separate values into

2 arrays

53.9 H{t.tag}.add(t.values)

54.10 for all values r in H{'R'} // produce a cross-join of the two

arrays

55.11 for all values l in H{'L'}

56.12 Emit(null, [k r l] )

复制代码

复制链接Replicated Join (Mapper端连接, Hash 连接)

在实际应用中,将一个小数据集和一个大数据集连接是很常见的(如用户与日志记录)。假定要连接两个集合R和L,其中R相对较小,这样,可以把R分发给所有的Mapper,每个Mapper都可以载入它并以连接键来索引其中的数据,最常用和有效的索引技术就是哈希表。之后,Mapper遍历L,并将其与存储在哈希表中的R 中的相应记录连接,。这种方法非常高效,因为不需要对L中的数据排序,也不需要通过网络传送L中的数据,但是R必须足够小到能够分发给所有的Mapper。[size=14.166666030883789px]

57.1 class Mapper

58.2 method Initialize

59.3 H = new AssociativeArray : join_key -> tuple from R

60.4 R = loadR()

61.5 for all [ join_key k, tuple [r1, r2,...] ] in R

62.6 H{k} = H{k}.append( [r1, r2,...] )

63.7

64.8 method Map(join_key k, tuple l)

65.9 for all tuple r in H{k}

66.10 Emit(null, tuple [k r l] )

复制代码

基于Hadoop的研究及性能分析

基于Hadoop的研究及性能分析 摘要 在大数据到来的今天,本文首先介绍了Hadoop及其核心技术MapReduce的工作原理。详细讨论了Hadoop推测执行算法和SALS 推测执行算法并对它们的性能进行分析。最后,分析了MapReduce 框架的通用二路连接算法 RSJ。为了提高性能,提出了一种基于DistributedCache 的改进算法,通过减少 mapper 输出的数据来达到优化的目的。 关键字:Hadoop MapReduce 性能算法

Abstract:In the era of big data, this paper introduces Hadoop, MapReduce and its core technology works.I have discussed the Hadoop speculative execution algorithms and SALS speculative execution algorithm and analyzed their performance.Finally, I analyzed the Common Road Join Algorithm in MapReduce framework.To improve performance, I propose an improved algorithm based DistributedCache by reducing the mapper output data to achieve optimization purposes. Key words:Hadoop; MapReduce; Performance;Algorithm

(完整版)hadoop常见笔试题答案

Hadoop测试题 一.填空题,1分(41空),2分(42空)共125分 1.(每空1分) datanode 负责HDFS数据存储。 2.(每空1分)HDFS中的block默认保存 3 份。 3.(每空1分)ResourceManager 程序通常与NameNode 在一个节点启动。 4.(每空1分)hadoop运行的模式有:单机模式、伪分布模式、完全分布式。 5.(每空1分)Hadoop集群搭建中常用的4个配置文件为:core-site.xml 、hdfs-site.xml 、mapred-site.xml 、yarn-site.xml 。 6.(每空2分)HDFS将要存储的大文件进行分割,分割后存放在既定的存储块 中,并通过预先设定的优化处理,模式对存储的数据进行预处理,从而解决了大文件储存与计算的需求。 7.(每空2分)一个HDFS集群包括两大部分,即namenode 与datanode 。一般来说,一 个集群中会有一个namenode 和多个datanode 共同工作。 8.(每空2分) namenode 是集群的主服务器,主要是用于对HDFS中所有的文件及内容 数据进行维护,并不断读取记录集群中datanode 主机情况与工作状态,并通过读取与写入镜像日志文件的方式进行存储。 9.(每空2分) datanode 在HDFS集群中担任任务具体执行角色,是集群的工作节点。文 件被分成若干个相同大小的数据块,分别存储在若干个datanode 上,datanode 会定期向集群内namenode 发送自己的运行状态与存储内容,并根据namnode 发送的指令进行工作。 10.(每空2分) namenode 负责接受客户端发送过来的信息,然后将文件存储位置信息发 送给client ,由client 直接与datanode 进行联系,从而进行部分文件的运算与操作。 11.(每空1分) block 是HDFS的基本存储单元,默认大小是128M 。 12.(每空1分)HDFS还可以对已经存储的Block进行多副本备份,将每个Block至少复制到 3 个相互独立的硬件上,这样可以快速恢复损坏的数据。 13.(每空2分)当客户端的读取操作发生错误的时候,客户端会向namenode 报告错误,并 请求namenode 排除错误的datanode 后,重新根据距离排序,从而获得一个新的的读取路径。如果所有的datanode 都报告读取失败,那么整个任务就读取失败。14.(每空2分)对于写出操作过程中出现的问题,FSDataOutputStream 并不会立即关闭。 客户端向Namenode报告错误信息,并直接向提供备份的datanode 中写入数据。备份datanode 被升级为首选datanode ,并在其余2个datanode 中备份复制数据。 NameNode对错误的DataNode进行标记以便后续对其进行处理。 15.(每空1分)格式化HDFS系统的命令为:hdfs namenode –format 。 16.(每空1分)启动hdfs的shell脚本为:start-dfs.sh 。 17.(每空1分)启动yarn的shell脚本为:start-yarn.sh 。 18.(每空1分)停止hdfs的shell脚本为:stop-dfs.sh 。 19.(每空1分)hadoop创建多级目录(如:/a/b/c)的命令为:hadoop fs –mkdir –p /a/b/c 。 20.(每空1分)hadoop显示根目录命令为:hadoop fs –lsr 。 21.(每空1分)hadoop包含的四大模块分别是:Hadoop common 、HDFS 、

hadoop练习题--带答案

Hadoop 练习题姓名:分数: 单项选择题 1.下面哪个程序负责HDFS数据存储。 a)NameNode b)Jobtracker c)Datanode √ d)secondaryNameNode e)tasktracker 2.HDfS中的block默认保存几份? a)3份√ b)2份 c)1份 d)不确定 3.下列哪个程序通常与NameNode在一个节点启动? a)SecondaryNameNode b)DataNode c)TaskTracker d)Jobtracker√ 4.Hadoop作者 a)Martin Fowler b)Kent Beck c)Doug cutting√ 5.HDFS默认Block Size a)32MB b)64MB√ c)128MB 6.下列哪项通常是集群的最主要的性能瓶颈 a)CPU b)网络 c)磁盘√ d)内存

7.关于SecondaryNameNode哪项是正确的? a)它是NameNode的热备 b)它对内存没有要求 c)它的目的是帮助NameNode合并编辑日志,减少NameNode启动时间√ d)SecondaryNameNode应与NameNode部署到一个节点 8.一个gzip文件大小75MB,客户端设置Block大小为64MB,请我其占用几个Block? a) 1 b)2√ c) 3 d) 4 9.HDFS有一个gzip文件大小75MB,客户端设置Block大小为64MB。当运行mapreduce 任务读取该文件时input split大小为? a)64MB b)75MB√ c)一个map读取64MB,另外一个map读取11MB 10.HDFS有一个LZO(with index)文件大小75MB,客户端设置Block大小为64MB。当运 行mapreduce任务读取该文件时input split大小为? a)64MB b)75MB c)一个map读取64MB,另外一个map读取11MB√ 多选题: 11.下列哪项可以作为集群的管理工具 a)Puppet√ b)Pdsh√ c)Cloudera Manager√ d)Rsync + ssh + scp√ 12.配置机架感知的下面哪项正确 a)如果一个机架出问题,不会影响数据读写√ b)写入数据的时候会写到不同机架的DataNode中√ c)MapReduce会根据机架获取离自己比较近的网络数据√ 13.Client端上传文件的时候下列哪项正确 a)数据经过NameNode传递给DataNode b)Client端将文件以Block为单位,管道方式依次传到DataNode√ c)Client只上传数据到一台DataNode,然后由NameNode负责Block复制工作 d)当某个DataNode失败,客户端会继续传给其它DataNode √

Hadoop 100道面试题及答案解析

3.6 误) 3.7Hadoop支持数据的随机读写。(错) (8) NameNode负责管理metadata,client端每次读写请求,它都会从磁盘中3.8 读取或则会写入metadata信息并反馈client端。(错误) (8) NameNode本地磁盘保存了Block的位置信息。(个人认为正确,欢迎提出其它意见) (9) 3.9 3.10 3.11DataNode通过长连接与NameNode保持通信。(有分歧) (9) Hadoop自身具有严格的权限管理和安全措施保障集群正常运行。(错误)9 3.12 3.13 3.14Slave节点要存储数据,所以它的磁盘越大越好。(错误) (9) hadoop dfsadmin–report命令用于检测HDFS损坏块。(错误) (9) Hadoop默认调度器策略为FIFO(正确) (9) 100道常见Hadoop面试题及答案解析 目录 1单选题 (5) 1.1 1.2 1.3 1.4 1.5 1.6 1.7下面哪个程序负责HDFS数据存储。 (5) HDfS中的block默认保存几份? (5) 下列哪个程序通常与NameNode在一个节点启动? (5) Hadoop作者 (6) HDFS默认Block Size (6) 下列哪项通常是集群的最主要瓶颈: (6) 关于SecondaryNameNode哪项是正确的? (6) 2 3多选题 (7) 2.1 2.2 2.3 2.4 2.5 下列哪项可以作为集群的管理? (7) 配置机架感知的下面哪项正确: (7) Client端上传文件的时候下列哪项正确? (7) 下列哪个是Hadoop运行的模式: (7) Cloudera提供哪几种安装CDH的方法? (7) 判断题 (8) 3.1 3.2 3.3 Ganglia不仅可以进行监控,也可以进行告警。(正确) (8) Block Size是不可以修改的。(错误) (8) Nagios不可以监控Hadoop集群,因为它不提供Hadoop支持。(错误) 8 3.4如果NameNode意外终止,SecondaryNameNode会接替它使集群继续工作。(错误) (8) 3.5Cloudera CDH是需要付费使用的。(错误) (8) Hadoop是Java开发的,所以MapReduce只支持Java语言编写。(错 8

hadoop常用算法例子解读

基本MapReduce模式计数与求和基本MapReduce模式计数与求和 问题陈述: 有许多文档,每个文档都有一些字段组成。需要计算出每个字段在所有文档中的出现次数或者这些字段的其他什么统计值。例如,给定一个log文件,其中的每条记录都包含一个响应时间,需要计算出平均响应时间。 解决方案: 让我们先从简单的例子入手。在下面的代码片段里,Mapper每遇到指定词就把频次记1,Reducer一个个遍历这些词的集合然后把他们的频次加和。 1.class Mapper 2. method Map(docid id, doc d) 3. for all term t in doc d do 4. Emit(term t, count 1) 5. 6.class Reducer 7. method Reduce(term t, counts [c1, c2,...]) 8. sum = 0 9. for all count c in [c1, c2,...] do 10. sum = sum + c 11. Emit(term t, count sum) 复制代码 这种方法的缺点显而易见,Mapper提交了太多无意义的计数。它完全可以通过先对每个文档中的词进行计数从而减少传递给Reducer的数据量: [size=14.166666030883789px] 1. 1 class Mapper 2. 2 method Map(docid id, doc d) 3. 3 H = new AssociativeArray 4. 4 for all term t in doc d do 5. 5 H{t} = H{t} + 1

面试必过——50个最受欢迎的Hadoop面试问题

50个最受欢迎的Hadoop面试问题 您是否打算在大数据和数据分析领域找到工作?您是否担心破解Hadoop面试? 我们整理了一份方便的Hadoop面试问题清单。您可能具有关于软件框架的丰富知识,但是在短短的15分钟面试环节中无法测试所有这些知识。因此,面试官会问您一些特定的大数据面试问题,他们认为这些问题易于判断您对主题的了解。 立即注册:Hadoop基础在线培训课程 Hadoop面试的前50名问答 当前,与大数据相关的工作正在增加。五分之一的大公司正在迁移到大数据分析,因此现在是时候开始申请该领域的工作了。因此,我们不需再拖延地介绍Hadoop面试的前50名问答,这将帮助您完成面试。 Hadoop基本面试问题 这些是您在大数据采访中必将面对的最常见和最受欢迎的大数据Hadoop采访问题。通过准备这些Hadoop面试问题,无疑会给您带来竞争优势。 首先,我们将重点关注人们在申请Hadoop相关工作时遇到的常见和基本的Hadoop 面试问题,无论其职位如何。

1. Hadoop框架中使用了哪些概念? 答:Hadoop框架在两个核心概念上起作用: ?HDFS:Hadoop分布式文件系统的缩写,它是一个基于Java的文件系统,用于可扩展和可靠地存储大型数据集。HDFS本身在主从架构上工作,并以块 形式存储其所有数据。 ?MapReduce:这是用于处理和生成大型数据集的编程模型以及相关的实现。 Hadoop作业基本上分为两个不同的任务作业。映射作业将数据集分解为键 值对或元组。然后,reduce作业获取map作业的输出,并将数据元组合并 为较小的元组集。 2.什么是Hadoop?命名Hadoop应用程序的主要组件。 答:Hadoop是“大数据”问题的解决方案。Hadoop被描述为提供许多用于存储和处理大数据的工具和服务的框架。当难以使用传统方法进行决策时,它在大数据分析和制定有效的业务决策中也起着重要作用。 Hadoop提供了广泛的工具集,可以非常轻松地存储和处理数据。以下是Hadoop的所有主要组件:

基于Hadoop的云计算算法研究

基于Hadoop 的云计算算法研究 辛大欣,屈伟 (西安工业大学陕西西安710021) 摘要:随着科技技术的发展,数据呈现几何级的增长,面对这个情况传统存储服务无法满足复杂数据慢慢地暴露出来,传统的存储计算服务不仅浪费着极大的资源,还对于环境有着极大的不利影响。在这个大环境下云计算应势而生。本论文将针对目前的存储服务无法满足复杂数据的问题,研究云存储中的任务调度技术。通过与Hadoop 平台结合的试验对于现有的三种算法进行算法的实现过程的研究以及结果的对比。关键词:云计算;数据存储;任务调度技术;低碳节能中图分类号:TP302 文献标识码:A 文章编号:1674-6236(2013)03-0033-03 Cloud computing algorithm research based on Hadoop XIN Da -xin ,QU Wei (Xi ’an Technological University ,Xi ’an 710021,China ) Abstract:With the development of technologies ,data exponentially growth ,face the situation of traditional storage service can not satisfy the complicated data slowly emerged ,the traditional storage calculation service is not only a waste of a great resource ,but also for the environment has a great adverse effects.In the environment of cloud computing should situation and unripe.This paper will analyze the current storage service can not satisfy the complicated data ,study the cloud task scheduling technology.With the Hadoop platform with experiment for three kinds of existing algorithm algorithm implementation process and research results. Key words:cloudcomputing ;virtualization ;taskscheduling algorithms ;low -carbon energy 收稿日期:2012-09-24 稿件编号:201209170 作者简介:辛大欣(1966—),男,陕西西安人,硕士,副教授。研究方向:计算机网络,人工智能,云计算。 随着信息技术的不断提高,信息和数据呈现几何级的增长,大量的数据需要处理。在这种环境下,单点存储的问题已逐步暴露。 区域问题:单点存储,使用户在外出需要克服相当大的网络延迟访问服务。同时,为了方便维修,升级等问题使得存储数据选择的位置变得相对困难。 灾难恢复问题:当系统崩溃后必须被恢复时,如果数据存储备份被破坏将导致灾难性的后果。假如盲目地支持多个备份,不仅本身就是一种资源浪费,而且多个数据备份之间的一致性和可用性也是一个棘手的问题。 可扩展性问题:单点存储在可扩展性方面有很多问题。每个额外需要增加的功能或者服务都需要重新对硬件软件的结构进行重新设计和配置。同时对于硬件的更新也会带来巨大的麻烦。 管理费用:单点存储需要很多额外的管理开销,如机房,服务集群功率消耗,以及专门的数据管理开销和人员的培训费用。据统计仅数据中心的碳排放量占碳的总排放量百分之二,排放量达到约35000000吨每年。 有些公司电力成本每年超过硬件投资。在电力分配中,服务器设备占52%的总能源消耗,冷却系统和电力系统各38%和9%,只有1%的照明系统。面对这种严峻的形势下,构 建节能绿色数据中心已成为焦点。 云计算在节约能源方面的特点正好符合了”低碳节能”的思想。 1)通过使用云计算,提高了设备的利用资源,减少数据 中心能耗,同时避免经济损失造成的闲置设备。云“自我服务”的计算架构将大大降低成本和管理,可以节省资源。 2)使用公共云服务,企业只需购买云计算服务,根据自 己的需要,不需要购买电脑设备,尤其是不需要购置管理服务和数据中心的服务器,从而达到节约能耗的目的。 3)使用云桌面终端接入,没有笨重的机箱和风扇声。减 少功率消耗,减少热量,每个用户平均耗电量小于25瓦,大大降低了能源消耗,每年可节省近70%的电力供应。 从上面可以看出云计算可以解决目前单点存储的局限性以,而且对于资源的节约有很好的效果。下面对于云计算中的3种方法进行研究。 1 在Hadoop 云计算框架中的调度算法 1.1 FIFO 算法 FIFO 调度算法中所有的用户任务都被提交到一个队列 中,然后由TaskTracker 按照任务的优先级(比如提交时间的 电子设计工程 Electronic Design Engineering 第21卷 Vol.21 第3期No.32013年2月Feb.2013 -33-

hadoop练习题--带答案

Hadoop练习题 姓名:分数: 单项选择题 1.下面哪个程序负责HDFS数据存储。 a)NameNode b)Jobtracker c)Datanode√ d)secondaryNameNode e)tasktracker 2.HDfS中的block默认保存几份? a)3份√ b)2份 c)1份 d)不确定 3.下列哪个程序通常与NameNode在一个节点启动? a)SecondaryNameNode b)DataNode c)TaskTracker d)Jobtracker√ 4.Hadoop作者 a)Martin Fowler

b)Kent Beck c)Doug cutting√ 5.HDFS默认Block Size a)32MB b)64MB√ c)128MB 6.下列哪项通常是集群的最主要的性能瓶颈 a)CPU b)网络 c)磁盘√ d)内存 7.关于SecondaryNameNode哪项是正确的? a)它是NameNode的热备 b)它对内存没有要求 c)它的目的是帮助NameNode合并编辑日志,减少NameNode启动时间√d)SecondaryNameNode应与NameNode部署到一个节点 8.一个gzip文件大小75MB,客户端设置Block大小为64MB,请我其占用几个Block?a)1 b)2√ c)3 d)4

9.HDFS有一个gzip文件大小75MB,客户端设置Block大小为64MB。当运行mapreduce任务读取该文件时input split大小为? a)64MB b)75MB√ c)一个map读取64MB,另外一个map读取11MB 10.HDFS有一个LZO(withindex)文件大小75MB,客户端设置Block大小为64MB。当运行mapreduce任务读取该文件时input split大小为? a)64MB b)75MB c)一个map读取64MB,另外一个map读取11MB√ 多选题: 11.下列哪项可以作为集群的管理工具 a)Puppet√ b)Pdsh√ c)Cloudera Manager√ d)Rsync + ssh + scp√ 12.配置机架感知的下面哪项正确 a)如果一个机架出问题,不会影响数据读写√ b)写入数据的时候会写到不同机架的DataNode中√ c)MapReduce会根据机架获取离自己比较近的网络数据√ 13.Client端上传文件的时候下列哪项正确 a)数据经过NameNode传递给DataNode

hadoop应用案例

Hadoop 是Google MapReduce的一个Java实现。MapReduce是一种简化的分布式编程模式,让程序自动分布到一个由普通机器组成的超大集群上并发执行。就如同java程序员可以不考虑内存泄露一样,MapReduce的run-time系统会解决输入数据的分布细节,跨越机器集群的程序执行调度,处理机器的失效,并且管理机器之间的通讯请求。这样的模式允许程序员可以不需要有什么并发处理或者分布式系统的经验,就可以处理超大的分布式系统得资源。 一、概论 作为Hadoop程序员,他要做的事情就是: 1、定义Mapper,处理输入的Key-Value对,输出中间结果。 2、定义Reducer,可选,对中间结果进行规约,输出最终结果。 3、定义InputFormat 和OutputFormat,可选,InputFormat将每行输入文件的内容转换为Java类供Mapper函数使用,不定义时默认为String。 4、定义main函数,在里面定义一个Job并运行它。 然后的事情就交给系统了。 1.基本概念:Hadoop的HDFS实现了google的GFS文件系统,NameNode作为文件系统的负责调度运行在master,DataNode运行在每个机器上。同时Hadoop实现了Google的MapReduce,JobTracker作为MapReduce的总调度运行在master,TaskTracker则运行在每个机器上执行Task。 2.main()函数,创建JobConf,定义Mapper,Reducer,Input/OutputFormat 和输入输出文件目录,最后把Job提交給JobTracker,等待Job结束。 3.JobTracker,创建一个InputFormat的实例,调用它的getSplits()方法,把输入目录的文件拆分成FileSplist作为Mapper task 的输入,生成Mapper task加入Queue。 4.TaskTracker 向JobTracker索求下一个Map/Reduce。 Mapper Task先从InputFormat创建RecordReader,循环读入FileSplits的内容生成Key 与Value,传给Mapper函数,处理完后中间结果写成SequenceFile. Reducer Task 从运行Mapper的TaskTracker的Jetty上使用http协议获取所需的中间内容(33%),Sort/Merge后(66%),执行Reducer函数,最后按照OutputFormat写入结果目录。 TaskTracker 每10秒向JobTracker报告一次运行情况,每完成一个Task10秒后,就会向JobTracker索求下一个Task。 Nutch项目的全部数据处理都构建在Hadoop之上,详见Scalable Computing with Hadoop。 二、程序员编写的代码

Hadoop应用开发实战案例

Hadoop应用开发实战案例 近年来,大数据分析逐渐火热,成为提升企业竞争力的重要手段。由于传统关系型数据库有难以扩展的弱点,以Hadoop为主流的新兴分布式集群解决方案逐渐击败传统数据库,成为大数据分析领域的霸主。在炼数成金的基础课程《Hadoop数据分析平台》里,对Hadoop的两大支柱技术HDFS和 Map-Reduce以及Hadoop生态圈的各个子产品作了详细的介绍和学习。本课程是《Hadoop数据分析平台》的后续课程。 在本课程里,我们致力于向学员描画若干真正的企业级数据分析项目的全貌,我们会分别站在甲方——需求者,乙方团队——数据架构师、算法设计师、IT 系统架构师、开发工程师等多个角色的角度来审视项目整个过程,向大家展示项目的业务背景,数据建模,算法设计,集群设计和部署,系统开发编码等过程的全貌,使大家有亲历其境的感觉,犹如自己身处于项目团队之中,熟悉大数据分析项目的完成工序。无论你的个人目标是何种角色,都能在课程中有所收获。 本课程覆盖互联网,电子商务,电信运营商,金融行业,地理位置应用等多个领域,每一次课就是一个独立的项目,这些实战内容将可以使大家在基础课程之后,更加理解Hadoop在实际中是如何使用,同时吸取跨行业的项目知识经验,对将来的个人发展将大有裨益。

《Hadoop应用开发实战案例》课程内容: 第1课Hadoop基础回顾 第2课Hadoop应用情况综述 第3课巨型网站日志系统分析,提取KPI数据(Map-Reduce) 第4课电信运营商LBS应用,分析手机用户移动轨迹(Map-Reduce) 第5课电信运营商用户分析,通过通话指纹判断重入网用户(map-Reduce) 第6课电子商务推荐系统设计(Map-Reduce) 第7课更复杂的推荐系统场景(Mahout) 第8课社交网络,判断微博用户关系亲疏程度,发现社区(Pig) 第9课在社交网络中衡量节点的重要程度(Map-Reduce) 第10课聚类算法应用,分析优质客户(Map-Reduce,Mahout) 第11课金融数据分析,从历史数据中提取逆回购信息(Hive) 第12课通过数据分析制定股票策略(Map-Reduce,Hive) 第13课GPS应用,签到数据分析(Pig) 第14课Map-Reduce全排序实现和优化 第15课中间件开发,让多个Hadoop集群协作起来 授课对象: 具有Hadoop基础知识(例如修完我们《Hadoop数据分析平台》课程),对将Hadoop 应用到各种实际系统感兴趣的朋友 授课讲师:

2015 Hadoop应用案例大全

最新hadoop大数据行业应用案例集

当大数据遇上SSD 大数据时代,人们越来越清楚地意识到数据中蕴藏的价值。海量数据的拥有者——运营商,银行,物流公司等等——都在积极地寻求方法利用手中的数据。然而,爆发式增长的数据量正在超出传统数据库的处理能力。为了应对这样的增长,企业需要对数据库进行升级。基于小型机DB2或Oracle架构的传统数据库升级依靠纵向扩展,也就是通过提升服务器本身的性能来提高处理能力。更大更强的服务器价格高昂,但性能的提升却是有限的。企业为自己的传统数据库做纵向扩展只会钱越花越多,收效越来越少。 Hadoop架构很好地解决了扩展的瓶颈,它设计部署在经济实惠的硬件上,通过横向扩展,便可无限地提升数据处理能力。基于Hadoop的大数据软件因为其强大的处理能力和高性价比在数据分析市场崭露头角。星环信息科技(上海)有限公司(以下简称星环科技)的企业级一站式大数据综合平台Transwarp Data Hub (以下简称TDH)是Hadoop发行版中的佼佼者。它在国内拥有最多的上线案例,已经为众多企业解决了棘手的大数据难题。TDH下的分布式内存分析引擎Transwarp Inceptor将数据和计算中间结果放在内存中,依靠内存的高速读写,克服了大数据处理中常见的I/O瓶颈,加上它对SQL和R的全面支持,可以轻松地应对海量数据的复杂计算,极大地提高了数据处理的效率,解放了企业的生产力。然而,星环科技的开发人员并不满足于此。 一方面,Transwarp Inceptor运行在JVM上,使用大内存的时候,对GC的影响非常严重,用户体验不够平滑;另一方面,完全使用内存作为存储介质价格较高。星环科技的开发人员发现,随着硬件技术的发展,SSD的读写速度已经远远甩开机械硬盘,向内存靠拢,但在价格上,SSD相对昂贵的内存有巨大的优势,这让SSD成为了内存强有力的竞争者。“我们相信,大数据分析应该朝着更经济更普及的方向发展,”星环科技的CTO孙元浩说道,“我们的产品为企业提高生产力,而将内存替换为SSD可以在不影响性能的情况下提升用户体验并且降低成本。” 在为某省级移动通信运营商部署大数据解决方案时,星环科技第一次将SSD作为内存的替代应用在了生产中。在比较市场上各品牌型号的固态盘的信息之后,星环科技最终选择了具备高稳定性技术的英特尔固态盘DC S3500系列来构建新的解决方案。对于固态盘而言,影响读写能力的最大因素在于固态盘的控制芯片和固件算法。英特尔在芯片技术和固件算法上的优势让英特尔固态盘DC S3500系列在处理读写任务时拥有得天独厚的优势。英特尔 固态盘DC S3500系列具有50微秒的顺序读取延迟,在 99.9% 的时间内 500 微秒的最大读取延迟,以及4KB 随机读取性能高达75,000的每秒输入输出操作次数(IOPS)。同时具备较低的有功读取 功率(小于 1.3 瓦)。这些特点保证了英特尔固态盘数据存储和读取的出色能力以及在频繁操作情况下的性能稳定性。作为一款优秀的企业级固态盘,除了高性能优势之外,英特尔固态盘DC S3500系列还具备防止数据丢失和损坏的特性。英特尔固态盘DC S3500系列提能够供端到端数据安全性保护,使数据从进入硬盘到离开硬盘时刻处于保护之中。此外,英特尔还将固态盘将NAND、SRAM和DRAM内存的高级错误纠正方案结合起来,通过奇偶校验、循环冗余检查(CRC),以及逻辑块地址(LBA)标记验证来保护传输中的数据。它还使用高级加密标准(AES)和增强的电源损耗保护进一步增强数据的安全性。英特尔固态盘DC S3500系列产品稳定的高性能使星环科技的解决方案得到了有效的保障。而英特尔固态盘技术人员专业而严谨的前期产品测试、积极响应的售后服务方案和强大的渠道供货能力,更是为项目提供了强有力的后盾。 与传统方案相比,星环科技的解决方案有如下几点优势:

HADOOP学习提纲

HADOOP学习提纲 1 Cloudera授权Hive和Pig培训 课程目标 专门为数据分析和数据挖掘人员量身定做的培训科目。学员将学习和掌握使用高级脚本语言或类SQL语言来编写MapReduce任务,而无需掌握Java编程语言和熟悉Hadoop API。通过掌握Hive和/或Pig,将极大缩短数据分析人员设计编写和调试常见数据分析问题的周期,提高工作效率;从而为企业节省费用,缩短分析结果市场化的周期。 学员基础 应具备基本SQL或者高级脚本语言编程经验;对Hadoop组成和工作原理有基本了解。 课时 为期2天 课程内容 ?Hive如何扩展MapReduce ?如何使用Hive创建和操作表 ?Hive基本和高级数据类型 ?对数据进行分区和分组 ?高级Hive特性 ?如何用Pig加载和操作数据 ?PigLatin编程语言的特性 ?用Pig解决实际数据分析问题 授课形式 采取教师讲解和学员上机操作相结合的形式。上机实验有机地穿插在重要课题讲解后,学员能马上学以致用,巩固刚刚所学的概念和知识,转化为自身的技能应用到实战中。我们鼓励学员在课堂上大胆自由地提问,和授课教师进行互动,获得最大的收益。 课程大纲 Hive导引 ?什么是Hadoop ?Hive的动机 将数据导入到Hive

?Hive体系结构 ?创建Hive表 ?导入数据 ?创建不同的数据库 ?上机实验 Hive数据操作 ?使用SELECT语句检索数据 ?合并表格 ?将查询结果存入HDFS ?基本Hive函数 ?上机实验 对数据进行分区和分组 ?数据分区 ?数据分组 ?上机实验 Hive高级特性 ?更多高级HiveQL表 ?Hive变量 ?创建用户自定义函数 ?跟踪调试Hive查询 Hive最佳实践 ?配置共享元数据 ?处理日期 ?使用SerDes Pig 读写数据 ?加载数据 ?Pig数据结构 ?写数据 ?上机实验 PigLatin深入

常见的hadoop十大应用误解

常见的Hadoop十大应用误解 1.(误解)Hadoop什么都可以做 (正解) 当一个新技术出来时,我们都会去思考它在各个不同产业的应用,而对于 平台的新技术来说,我们思考之后常会出现这样的结论“这个好像什么都能做”,然而,更深入的去想,你就会发现“好像什么都需要重头做”。对于Hadoop,我常喜欢举Database来当例子。三十年前数据库(Database)刚出来时,上面并没有什么现成的应用方案(Application),所以厂商在销售的过程中常需要花很多的时间 去告诉客户说,如果今天你有了这个数据库,你就可以做什么什么的应用,而看起来的确好像数据库什么应用都可以做,因为毕竟大部分的应用都会需要一个数据库。 只是三十年前所有的应用都得重头打造,我们今天习以为常的ERP、CRM等应用系统,当时并不存在的,那都是后来的事了。今天的Hadoop,正好有点像当年 database 刚出来的时候,毕竟今天所有的应用或多或少都会开始去处理半结构、非结构化数据,而这些东西的确都是Hadoop擅长的,所以平台的适用性其实问题不大,重点还是在应用要由谁来搭建。 2.(误解)Hadoop无法扮演HPC (High Performance Computing) or Grid Computing 的角色 (正解) 由于Hadoop本身是由并行运算架构(MapReduce)与分布式文件系统 (HDFS)所组成,所以我们也看到很多研究机构或教育单位,开始尝试把部分原本执行在HPC 或Grid上面的任务,部分移植到Hadoop集群上面,利用Hadoop 兼顾高速运算与海量储存的特性,更简易且更有效率地来执行工作。目前国外高能

相关文档
最新文档