Hadoop实战读书笔记(2)

若是是MapReduce如何实现一个WordCount的?node

MapReduce程序执行分为两个主要阶段:为mappingreducing,每一个阶段均定义为一个数据处理函数,分别被称为mapperreducershell

运行逻辑数据库

mapping阶段,MapReduce获取输入数据并将数据单元装入mapperapache

reducing阶段,reducer处理来自mapper的全部输出,并给出最终结果。编程

简而言之网络

mapper意味着将输入进行过滤与转换,使reducer能够完成聚合。架构

 

mappingreducingpartitioningshufflingHadoop都是什么玩意?他们是如何的无缝的工做在一块儿的?app

为了使他们无缝的工做在一块儿,咱们须要在通用结构上达成一致。负载均衡

 

MapReduce的数据原语是?框架

MapReduce使用列表和键/值对做为其主要的数据原语,键与值一般为整数或字符串,但也能够是可忽略的假值,或者是复杂的对象类型。

 

mapreduce函数必须遵循如下对键和值类型的约束?

MapReduce框架中编写应用程序就是定制化mapperreducer的过程。

完整的数据流是?


输入

输出

map

<k1, v1>

list(<k2, v2>)

reduce

<k2, list(v2)>

list(<k3, v3>)

1、应用的输入必须为一个键/值对的列表list(<k1, k2>)

用于处理多个文件的输入格式一般为list(<String filename, String file_content>)

用于处理日志文件这种大文件输入格式为list(<Integer line_number, String log_event>)

2、含有键/值对的列表被拆分,进而经过调用mappermap函数对每一个单独的键/值对<k1,v1>进行处理。在这里,键k1常常被mapper所忽略。mapper转换每一个<k1, v1>对并将之放入<k2, v2>对的列表中。这种转换的细节很大程度上决定了MapReduce程序的行为,值得注意的是,处理键/值对能够采用任意的顺序。并且,这种转换必须是封闭的,使得输出仅依赖于一个单独的键/值对。

2进行解释

       对于单词统计,<String filename, String file_content>被输入mapper,而其中的filename被忽略。mapper能够输出一个<String word, Integer count>的列表。咱们发现计数值将在后续阶段聚合,是否能够提早合并?好比不是输出3<"foo", 1>而是输出1<"foo", 3>,能够看到,前者更容易编程,后者会得到性能上的优化。

3、全部的mapper的输出 (在概念上) 被聚合到一个包含<k2, v2>对的巨大列表中。全部共享相同k2的对被组织在一块儿造成一个新的键/值对<k2, list<v2>>。框架让reducer来分别处理每个被聚合起来的<k2, list(v2)>

3进行解释

       一个文档的map输出的列表中可能出现三次<"foo", 1>,而另外一个文档的map输出列表可能出现两次<"foo", 1>reducer所看到的聚合的对为<"foo", list(1, 1, 1, 1, 1)>。在单词统计中,reducer的输出为<"foo", 5>,表示"foo"在文档集合中总计出现的次数。每个reducer负责不一样的单词。MapReduce框架自动搜索全部的<k3, v3>并将之写入文件。

 

基于MapReduce重写单词统计程序:

map(String filename, String document) {

       List<String> T = tokenize(document);

       for each token in T {

              emit((String)token, (Integer)1);

       }

}

reduce(String token, List<Integer> values) {

       Integer sum = 0;

       for each value in values {

              sum = sum + value;

       }

       emit((String)token, (Integer)sum)

}

 

Hadoop的开发平台和生产平台是什么?

LinuxHadoop公认的开发和生产平台。其余,呵呵...

 

Hadoop须要Java支持?

固然,Java1.6或更高版本。

 

Hadoop 1.X的稳定版本是?

1.0.31.0.4目前我用过这两个版本,2.X没用过...

 

如何配置HadoopJava的链接,使得在运行hadoop时,它能够自动找到Java组件?

$HADOOP_PREFIX/conf/hadoop-env.sh中, 输入export JAVA_HOME=/...

为何不用HADOOP_HOME,由于它废弃了。

 

Hadoop脚本有哪些?

在不启动hadoop时,也可使用该脚本。由于它是shell脚本。

bin目录下,执行bin/hadoop获得:

Usagehadoop [--config confdir] COMMAND


这里COMMAND为下列其中一个


namenode -format

格式化DFS文件系统

secondarynamenode

运行DFSsecondarynamenode

namenode

运行DFSnamenode

datanode

运行DFSdatanode

dfsadmin

运行DFSadmin客户端

fsck

运行DFS的文件系统检查工具

fs

运行普通文件系统用户客户端

balancer

集群负载均衡工具

jobtracker

运行MapReducejobTracker节点

pipes

运行一个Pipes做业

tasktracker

运行MapReducetasktracker

job

处理MapReduce做业

version

打印版本

jar

运行一个jar文件

distcp <srcurl> <desturl>

递归地复制文件或者目录

archive -archiveName NAME <src>*   <dest>

生成一个Hadoop档案

daemonlogCLASSNAME

获取或设置每一个daemonlog级别

运行名为CLASSNAME的类大多数命令会在使用w/o参数时打出帮助信息

 

Hadoop历史

LuceneNutchHadoop的关系

Hadoop开始时时Nutch的一个子项目,而Nutch又是Apache Lucene的一个子项目。这3个项目都是Doug Cutting所创立的,每一个项目在逻辑上都是前一个项目的演进。

Lucene是什么?

Lucene是一个功能全面的文本索引和查询库。给定一个文本集合,开发者就可使用Lucene引擎方便地在文档上添加搜索功能。桌面搜索、企业搜索,以及许多领域特定的搜索引擎使用都是Lucene

Nutch是什么?

做为Luncene的扩展,Nutch的目标可谓雄心勃勃,它试图以Lucene为核心创建一个完整的Web搜索引擎。NutchHTML提供了解析器,还具备网页抓取工具、连接图形数据库和其余网络搜索引擎的额外组件。Doug Cutting所设想的Nutch是开放与民主的,能够替代Google等商业产品的垄断技术。

 

网络搜索引擎与基本的文档搜索引擎的区别是?

除了增长了像抓取器和解析器这样的组件,他俩最大区别就在于规模。

 

Nutch团队想要打破Google等商业产品的垄断技术,都面临哪些困难?

首先:Lucene的目标是索引数百万的文档,而Nutch应该可以处理十亿的网页,并且不能带来过分的操做开销,这在量级上已经不能相提并论。

其次:Nutch得运行在由商用硬件组成的分布式集群上,Nutch团队面临的挑战是解决软件可扩展性问题,即要在Nutch中创建一个层,来负责分布式处理、冗余、自动故障恢复和负载均衡。

以上这些挑战绝非易事。

 

Doug Cutting此时在干啥捏?

2004年左右,Google发表了两篇论文来论述Google文件系统(GFS)MapReduce框架。Google称使用了这两项技术来扩展本身的搜索系统。Doug Cutting当即看到了这些技术能够适用于Nutch,接着他的团队实现了一个新的框架,将Nutch移植上去。这种新的实现立刻提高了Nutch可扩展性。它开始可以处理几亿个网页,并可以运行在几十个节点的集群上。

Doug认识到设计一个专门的项目能够充实两种网络扩展所需的技术,因而就有了Hadoop

 

雅虎挺给力哈。

雅虎在20061月聘请Doug,让他和一个专项团队一块儿改进Hadoop,并将其做为一个开源项目。两年后Hadoop成为Apache的顶级项目。后来,在2008219,雅虎宣布其索引网页的生产系统采用了在10000多个核的Linux集群上运行的Hadoop

资源

Hadoop的官方网站:http://hadoop.apache.org/.

Google文件系统和MapReduce的原始论文很值得一读,能够了解它们的底层设计和架构:

The Google File System

MapReduce: Simplified Data Processing on Large Clusters

原本有连接,可是失效了。童鞋本身搜搜吧。

相关文章
相关标签/搜索