文档章节

Hadoop实战读书笔记(2)

祥林会跟你远走高飞
 祥林会跟你远走高飞
发布于 2014/12/05 17:20
字数 2019
阅读 85
收藏 1

如果是MapReduce如何实现一个WordCount的?

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

运行逻辑

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

reducing阶段,reducer处理来自mapper的所有输出,并给出最终结果。

简而言之

mapper意味着将输入进行过滤与转换,使reducer可以完成聚合。

 

mappingreducingpartitioningshufflingHadoop都是什么玩意?他们是如何的无缝的工作在一起的?

为了使他们无缝的工作在一起,我们需要在通用结构上达成一致。

 

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

本来有链接,但是失效了。童鞋自己搜搜吧。




© 著作权归作者所有

祥林会跟你远走高飞
粉丝 27
博文 50
码字总数 98029
作品 0
昌平
程序员
私信 提问
Hadoop实战读书笔记(5)

HDFS文件操作 你可以把一个大数据集(100TB)在HDFS中存储为单个文件,而大多数其他的文件系统无力实现这一点。虽然该文件存在多个副本分布在多台机器上来支持并行处理,你也不必考虑这些细节...

祥林会跟你远走高飞
2014/12/08
95
0
Hadoop实战读书笔记(7)

输入数据概要 输入数据通常驻留在较大的文件中,通常几十或者数百GB,甚至更大。MapReduce处理的基本原则之一是将输入数据分割成块。这些块可以在多台计算机上并行处理,在Hadoop的术语中这些...

祥林会跟你远走高飞
2014/12/08
132
0
敏捷教练成长记:漫漫长路第三周

看到跆拳道的软文,讲到: 学跆拳道的正确顺序: 第一阶段:有兴趣 第二阶段:没兴趣 第三阶段:逼练习 第四阶段:成习惯 第五阶段:有兴趣 第六阶段:真热爱 大部分家长在孩子第二阶段时放弃...

转型实践者
2017/11/17
0
0
Hadoop实战读书笔记(8)

什么是开发数据集? 一个流行的开发策略是为生产环境中的大数据集建立一个较小的、抽样的数据子集,称为开发数据集。这个开发数据集可能只有几百兆字节。当你以单机或者伪分布式模式编写程序...

祥林会跟你远走高飞
2014/12/08
242
0
敏捷教练成长记:秋高气爽第四周

不知不觉坚持了四周了,这周很忙,写读书笔记时尽显疲态,有厌倦的感觉了。需要自我调整,继续坚持。 1、敏捷方面读不少于50页的书或者文章。 阅读《持续交付-发布可靠软件的系统方法》第三章...

转型实践者
2017/11/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

CSS字体边框?

随着所有新的CSS3边框填充( -webkit ,...),现在是否可以为字体添加边框? (就像蓝色的Twitter徽标周围的纯白色边框一样)。 如果不是,是否有任何不太丑陋的骇客会在CSS / XHTML中完成此...

javail
36分钟前
48
0
是DateTime.Now是测量函数性能的最佳方法吗?

我需要找到一个瓶颈,并且需要准确地测量时间。 以下代码段是衡量性能的最佳方法吗? DateTime startTime = DateTime.Now;// Some execution processDateTime endTime = DateTime.Now;...

技术盛宴
51分钟前
31
0
Hive安装

下载上传apache-hive-2.1.1-bin.tar.gz文件并解压 tar -zxvf apache-hive-2.1.1-bin.tar.gz -C /export/servers 配置环境变量 vi /etc/profileexport HIVE_HOME=/export/servers/apache......

长臂猿猴
今天
55
0
Fedora 31 - 荣耀魔法本问题记录

最近荣耀魔法本装了Fedora31系统,没有像Deepin 15.11那样出现亮度不能调节和网卡不能用的问题。但是也有不少小问题: 触摸板有时启动后失效,需要重启。 触摸板的右键失效。 待机后进入桌面...

wffger
今天
46
0
ElasticSearch深入:内部机制浅析(三)@

前言 上篇从分布式的角度阐述了 ES 的分布式设计和思想,这一篇打算与 Lucene 结合起来,摸透一些 ES 的常遇到的概念,我们可以将了解到的这些东西应用到优化实践中去。 一、Shard Shard 实际...

HLee
今天
42
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部