2016.08.06 笔记
《Hadoop 权威指南》
初识Hadoop
MapReduce 和 关系型数据库
Hadoop
为我们提供了一个可靠的共享存储和分析系统
HDFS
实现数据的存储
MapReduce
实现数据的分析和处理
如果数据库系统只更新一小部分记录,那么B树更有优势(关系型数据库中使用的一种数据结构,受限于寻址的比例)
但数据库系统如果有大量数据更新时,B树的效率就明显落后于MapReduce
,因为需要使用排序合并来重建数据库。
在许多情况下,可以将MapReduce
视为关系型数据库管理系统的补充
MapReduce
比较适合以批处理方式处理需要分析整个数据集的问题,尤其是动态分析;适合一次写入、多次读取数据的应用
RDBMS
(关系型数据库)适用于点查询和更新;适合持续更新的数据集
基于MapReduce
的高级查询语言:
Pig
Hive
Hadoop发展历史
MapReduce
由谷歌的工程师开发,用于构建搜索引擎的索引
Hadoop
是Apache Lucene
创始人创建的
(Lucene是一个开放源代码的全文检索引擎工具包,)
Hadoop
起源于开源网络搜索引擎Apache Nutch
(Nutch
是基于Lucene
的)
Nutch
是一个可以运行的网页爬取工具和搜索引擎系统
Nutch
受GFS
(谷歌分布式文件系统)论文启发,开发了NDFS
(Nutch
分布式文件系统)
NDFS
后来改名HDFS
2004年谷歌发表论文介绍MapReduce
Nutch
完成移植,使用MapReduce
和NDFS
来运行
开发人员将NDFS
和MapReduce
移出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
都有一个输出文件