读书笔记--《hadoop实战》--第一章
2012-05-29 17:11
232 查看
1.2 什么是hadoop
Hadoop是一个开源的框架,可编写和运行分布式应用处理大规模数据。
不同的用户可以从独立的客户端提交计算“作业”到Hadoop,这些客户端可以是远离Hadoop集群的个人台式机。
![](http://my.csdn.net/uploads/201205/29/1338282937_1803.JPG)
1.3 了解分布式系统和hadoop
Hadoop强调把代码向数据迁移。Hadoop集群内部既包含数据又包含计算环境。客户端仅需发送待执行的MapReduce程序,而这些程序一般都很小。
数据被拆分后在集群中分布,并且尽可能让一段数据的计算发生在同一台机器上,即这段数据驻留的地方。
不如让数据不懂,而将可执行代码移动到数据所在的机器上去。
1.4 比较SQL数据库和hadoop
SQL(结构化查询语言)是针对结构化数据设计的,而hadoop最初的许多应用针对的是文本这种非非结构化数据。从这个角度看,Hadoop比SQL提供了一种更为通用的模式。
关系模型具有大量形式化的属性。但当前的应用所处理的许多数据类型并不能很好地适合这个模型。文本、图片和XML文件时最典型的例子。大型数据集往往是非结构化的或半结构化的。在Hadoop中,数据的来源可以有任何形式,但最终会转化为键/值对以供处理。
SQL从根本上是一个高级声明式语言。查询数据的手段是,声明想要的查询结果并让数据库引擎判断如何获取数据。在MapReduce中,实际的数据处理步骤是由你指定的,它很类似于SQL引擎的一个执行计划。SQL使用查询语句,而MapReduce则使用脚本和代码。
Hadoop是专为离线处理和大规模数据分析而设计的,它不适合那种对几个记录随机读写的在线事务处理模式。Hadoop最适合一次写入、多次读取的数据存储需求。
1.5 理解MapReduce
管道有助于进程原语的重用,已有模块的简单链接即可组成一个新的模块;消息队列则有助于进程原语的同步。程序员将数据处理任务以生产者或消费者的形式编写为进程原语,有系统来管理它们何时执行。
在MapReduce模型中,数据处理原语被称为mapper和reducer。
1.5.1 动手扩展一个简单程序(文本中的单词出现频次统计)
如果文件都存在一个中央存储服务器上,那么瓶颈就是该服务器的带宽。
在数据密集型分布式应用中存储和处理不得不紧密的绑定在一起。
为了使它工作在一个分布式计算机上,发现需要添加以下功能:1.存储文件到许多台计算机上 2.编写一个基于磁盘的散列表,使得处理不受内存容量限制 3.划分来自于第一阶段的中间数据(即wordCount) 4.洗牌这些分区到第二阶段中合适的计算机上
1.5.2 相同程序在MapReduce中的扩展
MapReduce程序的执行分为两个主要阶段,为mapping和reducing。在mapping阶段,MapReduce获取输入数据并将数据单元装入mapper。在reducing阶段,reducer处理来自mapper的所有输出,并给出最终结果。
mapper意味着将输入进行过滤与转换,使reducer可以完全聚合。这样就需要编写partitioning和shuffling函数,并与mapping和reducing一起形成常见的设计模式。
为了使它们能够无缝的在一起工作,需要在数据的通用结构上达成一致。
map和reduce函数必须遵循以下键和值类型的约束。
例如map中出现2个<"foo",1>表示在文本中foo出现了两次,然后在reduce中将所有的聚合,输入为<"foo",list(1,1)>,输出为<"foo",2>,
方法为emit((String)token,(Integer)sum)。
Hadoop是一个开源的框架,可编写和运行分布式应用处理大规模数据。
不同的用户可以从独立的客户端提交计算“作业”到Hadoop,这些客户端可以是远离Hadoop集群的个人台式机。
1.3 了解分布式系统和hadoop
Hadoop强调把代码向数据迁移。Hadoop集群内部既包含数据又包含计算环境。客户端仅需发送待执行的MapReduce程序,而这些程序一般都很小。
数据被拆分后在集群中分布,并且尽可能让一段数据的计算发生在同一台机器上,即这段数据驻留的地方。
不如让数据不懂,而将可执行代码移动到数据所在的机器上去。
1.4 比较SQL数据库和hadoop
SQL(结构化查询语言)是针对结构化数据设计的,而hadoop最初的许多应用针对的是文本这种非非结构化数据。从这个角度看,Hadoop比SQL提供了一种更为通用的模式。
关系模型具有大量形式化的属性。但当前的应用所处理的许多数据类型并不能很好地适合这个模型。文本、图片和XML文件时最典型的例子。大型数据集往往是非结构化的或半结构化的。在Hadoop中,数据的来源可以有任何形式,但最终会转化为键/值对以供处理。
SQL从根本上是一个高级声明式语言。查询数据的手段是,声明想要的查询结果并让数据库引擎判断如何获取数据。在MapReduce中,实际的数据处理步骤是由你指定的,它很类似于SQL引擎的一个执行计划。SQL使用查询语句,而MapReduce则使用脚本和代码。
Hadoop是专为离线处理和大规模数据分析而设计的,它不适合那种对几个记录随机读写的在线事务处理模式。Hadoop最适合一次写入、多次读取的数据存储需求。
1.5 理解MapReduce
管道有助于进程原语的重用,已有模块的简单链接即可组成一个新的模块;消息队列则有助于进程原语的同步。程序员将数据处理任务以生产者或消费者的形式编写为进程原语,有系统来管理它们何时执行。
在MapReduce模型中,数据处理原语被称为mapper和reducer。
1.5.1 动手扩展一个简单程序(文本中的单词出现频次统计)
如果文件都存在一个中央存储服务器上,那么瓶颈就是该服务器的带宽。
在数据密集型分布式应用中存储和处理不得不紧密的绑定在一起。
为了使它工作在一个分布式计算机上,发现需要添加以下功能:1.存储文件到许多台计算机上 2.编写一个基于磁盘的散列表,使得处理不受内存容量限制 3.划分来自于第一阶段的中间数据(即wordCount) 4.洗牌这些分区到第二阶段中合适的计算机上
1.5.2 相同程序在MapReduce中的扩展
MapReduce程序的执行分为两个主要阶段,为mapping和reducing。在mapping阶段,MapReduce获取输入数据并将数据单元装入mapper。在reducing阶段,reducer处理来自mapper的所有输出,并给出最终结果。
mapper意味着将输入进行过滤与转换,使reducer可以完全聚合。这样就需要编写partitioning和shuffling函数,并与mapping和reducing一起形成常见的设计模式。
为了使它们能够无缝的在一起工作,需要在数据的通用结构上达成一致。
map和reduce函数必须遵循以下键和值类型的约束。
输入 | 输出 | |
map | <k1,v1> | list(<k2,v2>) |
reduce | <k2,list(v2)> | list(<k3,v3>) |
方法为emit((String)token,(Integer)sum)。
相关文章推荐
- 《深入理解Linux内核》读书笔记 第一章 绪论(2)
- 《python基础教程 》第一章 读书笔记
- 《重构》读书笔记(二)——第一章 第一个重构案例
- 读书笔记--机器学习第一章
- 《Pointers On C》读书笔记(第一章 快速上手)
- 【读书笔记】C++Primer---第一章
- 【读书笔记】算法导论(第三版)第一章
- ucosii第一章读书笔记
- 《构建高性能WEB站点》读书笔记--第一章
- [ARM嵌入式系统开发]读书笔记第一章之ARM对RISC的改进
- C 程序设计语言(第二版)第一章 读书笔记
- [置顶] [编译原理读书笔记][第一章 引论]
- 《机器学习》读书笔记,第一章引言
- 《css3实战》读书笔记 第一章 基于CSS需求而编写的HTML.
- 《信息系统项目管理师教程》读书笔记—第一章 绪论
- 《内核设计与实现》第一章读书笔记
- windows网络编程第二版 第一章 winsock简介 读书笔记
- 《程序是怎么跑起来的》第一章--对程序员来说CPU是什么--读书笔记
- 啊哈!算法读书笔记 | 第一章 排序
- 第一章 代码无错就是优?--简单工厂模式(读书笔记)