我们常说的分布式系统,其实就是分布式软件系统,支持分布式处理的软件系统。他是在通信网络互联多处理机体系结构上执行任务。

 
hadoop是分布式软件系统中文件系统层的软件,他实现了分布式文件系统和部分分布式数据库系统。hadoop中的分布式文件系统hdfs可以实现数据在计算机集群组成的云上,高效的存储和管理。hadoop中的并行编程框架mapreduce可以让用户编写hadoop应用程序。
 
mapreduce应用程序开发是基于mapreduce编程模型,mapreduce编程的原理是:利用输入一个key,value的集合处理后,来输出一个key,value的集合。mapreduce用两个函数表达这儿计算:map和redcue
 
mapreduce处理过程:
从hdfs上读取数据块,由一个个map去处理数据片段,将map任务的输出,按key相同的进行合并(key,value1,value2...)将合并后的结果交给
reduce处理,reduce输出结果文件到hdfs上。
 
分布式文件存储:
 hdfs有一个nameNode(在hadoop2中有两个nameNode)节点和多个dataNode节点组成,一个文件在hdf的底层会分成一个个block,block的默认大小是64M。一个block块会有多个副本(默认有三个),副本会存在不同的dataNode上,以达到容错容灾的目的。nameNode里存储的是文件的源信息(文件权限,拥有者,block块存储在哪台dataNode上等)
 
分布式并行计算:
hadoop中有一个主控的jobTracker和多个taskTracker,主控的jobTracker用于调度和管理其他的taskTracker,TaskTracker负责执行jobTracker分发给他的任务。jobTracker可以运行任意的一台机器上。taskTracker只能运行在dataNode节点上,所以说,dataNode不光是存储文件的节点也是计算节点。jobTracker会把任务分发给空闲的TaskTracker上执行,如果哪个TaskTracker出现故障,任务失败。jobTracker则会把这个任务再分给其他的空闲taskTracker执行
 
本地计算(移动计算而不是移动数据)
数据存储在哪台机器上,就由哪个机器进行计算。这样的好处是可以减少网络io,减少对网络带宽的要求。在hadoop这种分布式集群上,计算节点可以很容易的扩张。数据在不同计算机之间传输,故而网络带宽就成了颈瓶。所以本地计算是一种很有效的节约网络带宽的方法(移动计算比移动数据更经济)
 
任务粒度
把原始文件切成小数据片段,一般来说数据片段的大小要小于或者等于hdfs中block块的大小,这样可以保证一个数据片段是位于一个计算机上的,便于本地计算。n个数据片段由n个map任务执行,注意这n个map任务是分布于n台计算机上,将他们并行处理。reduce的数量可以由用于控制。
 
Mapper和Reduce中全局共享数据
(1)读取hdfs文件
这样可以很直观,缺点是就算是很小的全局数据需要读取hdfs文件,这将会占用网络io,占用系统资源
(2)读取job属性
在task运行的时,可以利用Configuration对象中config.set(name, value);读取job中的属性值,可以将简单的属性封装到配置的作业中,
优点是简单,消耗的资源小,缺点是:对于大的共享资源就没法了
(3)DistributedCache
是为应用提供缓存文件的工具,他可以缓存文本文件,hdfs文件,jar文件,压缩文件
优点是每个job共享文件在启动之后复制一次,可以适合大量的全局文件。缺点是他是只读的
 
shuffle和排序
shuffle就是map端的输出到redcue端的输入整个过程就是shuffle过程。我们为了让reducec端并行处理数据,所以对map的输出 要进行排序和处理。
shuffle的过程可以分为map端和reduce端:
map端shufflle会对map的输出结果进行 划分(pattion),排序(sort),分割(spllit),将划分好的map结果进行排序合并并写到磁盘上,同时按照不同的划分结果发送到对应的reduce上。reduce端会把不同map端送来的相同区域的数据给对应reduceTask去处理。
shuffle过程是mapperReduce的核心过程,shuffle的性能直接影响mapReduce的执行过程(默认shuffle过程并不是最优的,可以根据需求进行定义shuffle过程)
推测式执行
推测式执行就是当做作业启动时,jobTracker会计算整个作业的进度,当发现某一个map执行的速度要慢(cpu负载果高,运行的任务较多等)与整体的平均速度的时候,jobTracker就会重启一个备份的taskTracker去运行这个map. 哪个task先运行完,就kill掉另一个taskMap。
但是这样缺点是,如果是代码的问题,这样另起一个任务并不会有什么效果,反而会增加整个集群的负担(推测式执行要在整个作业都开始之后才会启动,并且只针对运行一段时间之后,执行的速度慢与整个作业),所以可以根据具体的情况而选择开启和关闭推测式执行。
jvm重用
不管是mapTask还是 reduceTask 都是运行在taskTracke节点上的java虚拟机(jvm),每当taskTracker被分配一个任务,就会在本地启动一个新的java虚拟机。对于有大量零碎文件的map来说,启动那么多的虚拟机显然是不明智,优化有待提升的。如果在很多的时间一个map运行结束,让后续的任务继续重用这个虚拟机就是jvm重用。虽然一个taskTracker节点上可以有多个任务,但是他们都是运行在相互独立的虚拟机上的,taskTracker上的其他任务必须等待,就算是jvm重用也只能是顺序执行
控制jvm重用的属性是mapred.job.reuse.jvm.num.tasks  这个属性上定义了一个TaskTracker运行任务的最大数量,默认为1,可以自定义,为-1则表示没有数量限制
跳过坏环节
mapReduce执行的数据量非常的大,所以用户在编写程序是可能会疏忽或者数据中有坏的记录的存在,所以用户的代码在处理某个记录时可能会崩溃,这时虽然hadoop有处理这种错误的机制,即使再次重复执行也无济于事( 默认是会重新执行4次),还是会导致整个作业的失败。但是要在庞大的数据量中找到坏的数据也是很困难,很费时的。所以就是当前代码执行时,遇到坏的记录就直接跳过去,然后继续执行(数据量很大的话,有个别错误数据也是可以忍受的)。
当忽略模式启动后,任务失败两次,他就会将错误信息告诉taskTracker,taskTracker就会重新启动一个任务去运行,当再次收到先前任务运行时所遇到的错误信息时,就会直接跳过改记录。忽略模式只适合忽略个别记录数
任务的执行环境
hadoop能够为执行任务的taskTracker提供任务的运行环境,比如map知道处理文件的名称,集群的id等,jobTracker在分配任务给taskTracker时候,会将作业的配置文件发送给taskTracker,taskTracker会将文件保存在本地。我们知道,taskTracker是运行在本地节点单独的jvm上一子进程的方式运行map和reduce,每一个map或者reduce都会启动一个新的jvm,子的jvm会继承父的jvm的执行环境。

hadoop 笔记的更多相关文章

  1. Hadoop笔记系列 一 用Hadoop进行分布式数据处理(1)

    学习资料参考地址: 1.http://blog.csdn.net/zhoudaxia/article/details/8801769 1.先说说什么是Hadoop? 个人理解:一个分布式文件存储系统+ ...

  2. Hadoop笔记

    教程: Elasticsearch.MongoDB和Hadoop比较:  http://blog.csdn.net/hong0220/article/details/47631409

  3. hadoop 笔记(hbase)

    hbase 基础: hbase是基于列的数据,其数据模式如下: 1.安装 1.1)hbase安装分为单机.伪分布式.分布式,单机下安装不依赖于hadoop:因为不需要分布式文件系统支持: 1.2)安装 ...

  4. Hadoop笔记HDFS(2)

    高级Hadoop MapReduce管理 1 调试部署好的Hadoop的配置 2 运行基准测试检验Hadoop的安装 3 重新利用JVM提升性能 4 容错性 5 调试脚本-分析失败任务原因 6 设置失 ...

  5. Hadoop笔记HDFS(1)

    环境:Hadoop2.7.3 1.Benchmarking HDFS 1.1测试集群的写入 运行基准测试是检测HDFS集群是否正确安装以及表现是否符合预期的好方法.DFSIO是Hadoop自带的一个基 ...

  6. hadoop笔记之Hive的数据存储(内部表)

    Hive的数据存储(内部表) Hive的数据存储(内部表) 基于HDFS 可使用hadoop给我们提供的web管理工具查看数据.打开管理工具localhost:9000–>Utilities下的 ...

  7. hadoop笔记之Hive入门(Hive的体系结构)

    Hive入门(二) Hive入门(二) Hive的体系结构 ○ Hive的元数据 Hive将元数据存储在数据库中(metastore),支持mysql.derby.oracle等数据库,Hive默认是 ...

  8. hadoop笔记之Hive入门(什么是Hive)

    Hive入门(一) Hive入门(一) 什么是Hive? Hive是个数据仓库,数据仓库就是数据库,但又与一般意义上的数据库有点区别 实际上,Hive是构建在hadoop HDFS上的一个数据仓库. ...

  9. hadoop笔记之MapReduce的应用案例(利用MapReduce进行排序)

    MapReduce的应用案例(利用MapReduce进行排序) MapReduce的应用案例(利用MapReduce进行排序) 思路: Reduce之后直接进行结果合并 具体样例: 程序名:Sort. ...

随机推荐

  1. Nginx搭建https服务器

    HTTPS简介 HTTPS(Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单来讲就是HTTP的安全版.即H ...

  2. Asp.Net Core 项目搭建 基础配置 和MySql 的使用

    一.开发环境准备 1.安装Visual Studio 2015,我这里安装的是专业版. 2.安装.NET Core SDK相关 需要安装  Visual Studio 2015 update3和NET ...

  3. Ubuntu默认防火墙安装、启用、配置、端口、查看状态相关信息

    Ubuntu附带了一个相对iptables简单很多的防火墙 配置工具:ufw ufw防火墙 即uncomplicated firewall,不复杂的防火墙,繁琐部分的设置还是需要去到iptables ...

  4. BZOJ4533 [BeiJing2014 WinterCamp] 数据

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转 ...

  5. IE浏览器不能访问网页,google可以访问

    现象:google浏览器可以进行网络访问,ie不能访问 原因:代理服务修改了局域网配置脚本 解决: Internet选项---连接---局域网设置: 去除勾选 “使用自动配置脚本”

  6. IntelliJ IDEA 常用设置讲解

    说明 IntelliJ IDEA 有很多人性化的设置我们必须单独拿出来讲解,也因为这些人性化的设置让我们这些 IntelliJ IDEA 死忠粉更加死心塌地使用它和分享它. 常用设置 IntelliJ ...

  7. SDL简介(网络汇总)

    摄像头视频播放采用sdl,下面简单介绍下.不保证正确及网址永远有效.后面文章采用tao框架http://sourceforge.net/projects/taoframework/      SDL. ...

  8. rsync快速删除海量文件

    rsync --delete-before -avH --progress --stats /tmp/empty/ /var/spool/postfix/maildrop/ 由于业务侧使用时,一些脚本 ...

  9. Python 读写文件中数据

    1 需求 在文件 h264.txt 中的数据如图1,读入该文件中的数据,然后将第1列的地址删除,然后将数据输出到h264_out.txt中: 图1 h264.txt 数据截图             ...

  10. 使用count结合nvl函数时碰到的问题

    count()函数功能:统计表中中某个字段或所有记录个数,字段值为null的不做统计. 手册中解释: COUNT returns the number of rows returned by the ...