Hadoop 权威指南学习笔记(一)

第一章 初始Hadoop

 由于寻址时间的提升远远不及传输速率的提升,所以不能用数据库来对大量硬盘上的大规模数据进行分析,许多情况下,MapReduce可以视为关系型数据库的补充。MapReduce适合一次写入,多次读取的应用,关系型数据库适用于持续更新的数据集。

MapReduce的核心假设之一是可以进行高速的流读写操作,MapReduce是一种线性的可伸缩编程模型,需要Map函数和Reduce函数来处理数据,如果输入的数据量是原来的两倍,那么运行时间也是原来的两倍,但如果集群是原来的两倍,作业的运行速度却仍然与原来一样快。(这段话理解不是很清楚,集群增加节点了,运行速度仍然不会变吗?)

第二章 关于MapReduce

不同年份的数据大小差异很大,所以有一部分线程会比其他部分线程更早的结束,即使可以再为它们分配下一个任务,但是总的运行时间仍取决于处理最长文件所需要的时间,另一种更好的方法是将输入数据分成固定大小的块,然后每块分到各个进程中去至执行。

Hadoop任务过程分为两部分,Map 和Reduce阶段,每个阶段都以键值对作为输入和输出,类型可以自定义。map函数的输出经由MapReduce框架处理后,最后发送到reduce函数,这个处理过程基于键来对键值进行排序和分组

MapReduce作业(job)是客户端需要执行的一个工作单元:它包括输入数据、MapReduce程序和配置信息。Hadoop将作业分成若干个小任务(task)来执行,其中包括map任务和Reduce任务。jobtracker和tasktracker来控制着作业执行过程,jobtracker通过调度tasktracker上运行的任务来协调所有运行在系统上的作业。

MapReduce作业代码中会定义job对象,job对象指定作业执行规范,我们可以用它控制整个作业的运行。我们咋Hadoop集群上运行这个作业时,要把代码打包成一个JAR文件,在Job对象中设定自己写的mapper和Reduce的类名,Hadoop根据这个类来查找对应的JAR文件。

Hadoop将MapReduce的输入数据划分为等长的小数据块(分片) ,Hadoop为每个分片构建一个map任务,如果我们并行处理每个分片,且每个分片数据较小,那么整个处理过程可以更好的负载均衡。如果分片切得太小,管理分片的总时间和构建map任务的总时间将决定作业的整个执行时间。最佳的分片大小应该是和分块大小相同。Hadoop在存储输入数据的节点上运行map任务可以获得最佳性能(数据本地化优化)

在HDFS系统中,为了便于文件的管理和备份,引入分块概念(block)。这里的 块 是HDFS存储系统当中的最小单位,HDFS默认定义一个块的大小为64MB。当有文件上传到HDFS上时,若文件大小大于设置的块大小,则该文件会被切分存储为多个块,多个块可以存放在不同的DataNode上,整个过程中 HDFS系统会保证一个块存储在一个datanode上 。但值得注意的是 如果某文件大小没有到达64MB,该文件并不会占据整个块空间 。

HDFS中的NameNode会记录在上述文件分块中文件的各个块都存放在哪个dataNode上,这些信息一般也称为 元信息(MetaInfo) 。元信息的存储位置由dfs.name.dir指定

关于分块和分片的详细信息可以参考:https://blog.csdn.net/WYpersist/article/details/80044792

2. Map任务将其输出写入到本地硬盘,而非HDFS(因为map的结果只是一个中间结果,一旦作业完成,中间结果将会删除,不需要在HDFS中实现备份),Reduce的任务不具有数据本地化的优化,因为Reduce任务的输入来自于所有mapper的输出,并且是排过序的map输出,在Reduce端汇聚,由用户定义的reduce函数进行处理,并且将reduce输出结果存储在HDFS中

 如果有多个reduce任务,每个map任务就会针对输出进行分区,即为每个reduce任务创建一个分区(分区是由用户定义的partition函数控制,partition的变量中有多少个组合,那么每个map会有多少分区)

集群上的可用带宽限制了MapReduce作业的数量,因此最好是尽量避免map和reduce任务之间的数据传输,combiner能在map和reduce之间做一个中介处理,减少reduce的输入数据大小,combiner有或者无对reduce的输出结果没有影响。

Hadopp 提供了MapReduce的API,可以使用任何编程语言来写MapReduce函数,MapReduce 框架保证了键的有序性。Hadoop命令不支持Streaming,因此运行map和reduce代码时需要指定输入输出路径、map和reduce脚本等。

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值