Hadoop 笔记

2016.08.06 笔记

《Hadoop 权威指南》

初识Hadoop

MapReduce 和 关系型数据库

Hadoop为我们提供了一个可靠的共享存储和分析系统
HDFS实现数据的存储
MapReduce实现数据的分析和处理

如果数据库系统只更新一小部分记录,那么B树更有优势(关系型数据库中使用的一种数据结构,受限于寻址的比例)

但数据库系统如果有大量数据更新时,B树的效率就明显落后于MapReduce,因为需要使用排序合并来重建数据库。

在许多情况下,可以将MapReduce视为关系型数据库管理系统的补充

MapReduce比较适合以批处理方式处理需要分析整个数据集的问题,尤其是动态分析;适合一次写入、多次读取数据的应用
RDBMS(关系型数据库)适用于点查询和更新;适合持续更新的数据集

基于MapReduce的高级查询语言:
Pig
Hive

Hadoop发展历史

MapReduce由谷歌的工程师开发,用于构建搜索引擎的索引

HadoopApache Lucene创始人创建的
(Lucene是一个开放源代码的全文检索引擎工具包,)

Hadoop起源于开源网络搜索引擎Apache NutchNutch是基于Lucene的)

Nutch是一个可以运行的网页爬取工具和搜索引擎系统

NutchGFS(谷歌分布式文件系统)论文启发,开发了NDFSNutch分布式文件系统)

NDFS 后来改名HDFS

2004年谷歌发表论文介绍MapReduce
Nutch完成移植,使用MapReduceNDFS来运行

开发人员将NDFSMapReduce移出Nutch形成Lucence的一个子项目,命名为Hadoop

Hadoop在雅虎发展成能够处理Web数据的系统

纽约时报案例:
他们把1851年到1980年的存档扫描之后得到4T的文件并用亚马逊的EC2云服务将文件存为PDF格式放到网上共享,整个过程一共使用了100台计算机,所花时间不到24小时。

Hadoop在209秒内完成了对1TB数据的排序

Hadoop已经是公认的大数据通用存储和分析平台

雅虎搜索引擎主要组成部分
Crawler 从网页服务器爬取网页
WebMap 构建一个已知网页的链接图(生成的链接图非常大,需要大批计算机很长时间运行来创建和分析)
Indexer 为最佳页面构建一个反向索引
Runtime 处理用户的查询

关于MapReduce

MapReduce是一种可用于数据处理的编程模型

Hadoop可以运行各种语言版本的MapReduce程序

传统按行存储数据的工具是awk

为了充分利用Hadoop提供的并行处理优势,我们需要将查询表示成MapReduce作业。完成某种本地端的小规模测试之后,就可以把作业部署到集群上运行。

map函数的输出经由MapReduce框架处理后,最后发送到reduce函数

继承Mapper类,重写map()函数
继承Reducer类,重写reduce()函数

运行MapReduce作业
main函数中:

Job job = new Job;
job.setJarByClass(...);
job.setJobName("...");
job.setMapperClass(...);
job.setReducerClass(...);
job.setOutputKeyClass(...);
job.setOutputValueClass(...);
job.waitForCompletion(...);  // 提交作业并等待执行完成

Hadoop集群上运行一个作业时,要把代码打包成一个jar文件,在集群上发布这个文件。

使用hadoop执行程序

每个reducer都有一个输出文件

发布了34 篇原创文章 · 获赞 21 · 访问量 14万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章