1该技术为了解决什么问题而来?

2是什么?

(1)允许集群服务器使用简单编程模型对大数据集进行分布式处理

(2)可扩展服务器

(3)每台服务器都有本地的计算和存储资源

(4)不依赖硬件,其代码库自身就能在应用层侦测并处理硬件故障

(5)几乎完全模块化

(6)数据处理框架和一个分布式数据存储文件系统(HDFS)

(7)MapReduce真正完成数据处理任务的工具(NoSQL非关系型数据库)

(8)Hive将查询语句转换成MapReduce任务,但MapReduce的复杂性和局限性(单任务批处理)使得Hadoop在更多情况下都被用作数据仓库使用而非数据分析工具

(9)所有功能都是分布式的,而不是传统数据库的集中式系统

(10)开发和运行处理大规模数据的软件平台,实现在大量计算机组成的集群中对海量数据进行分布式计算

(11)HDFS提供对海量数据存储,MapReduce提供了对数据的计算

(12)大文件被默认分成64M一块的数据分布存储在集群机器中

(13)MapReduce:

a.Hadoop为每一个input split创建一个task调用Map计算

b.在此task中依次处理split中的一个个记录record

c.map会将结果以key-value的形式输出

d.hadoop负责按key值将map的输出整理后作为Reduce的输入

e.Reduce Task的输出为整个job的输出,保存在HDFS上

(14)a.NameNode中记录了文件是如何被拆分成block以及这些block都存储到了哪些DateNode节点以及保存了文件系统运行的状态信息

b.DataNode存储了被拆分的blocks

c.Secondary NameNode帮助NameNode收集文件系统运行的状态信息

d.JobTracer当有任务提交到Hadoop集群的时候负责Job的运行,负责调度多个TaskTracker

e.TaskTracker负责某一个map或者reduce任务

3该技术的原理(附加感受)?

(1)Map-Reduce两个步骤:Map和Reduce,每一步都有key-value对作为输入和输出

map阶段的key-value对的格式是由输入的格式所决定的,如果是默认的TextInputFormat,则每行作为一个记录进行处理,其中key为吃饭的开头相对于文件的起始位                    置,value就是此行的字符文本

(2)map阶段的输出的key-value对的格式必须同reduce阶段输入的key-value对的格式相对应

(3)

(4)

(5)setInputFormat:设置map的输入格式,默认为TextInputFormat,key为LongWritable,value为Text

setNumMapTasks:设置map任务的个数,此设置通常不起作用,map任务的个数取决于输入的数据所能分的input split的个数

setMapperClass:设置Mapper 默认为IdentityMapper

setMapRunnerClass:设置MapRunner,map task是由MapRunner运行的,默认为MapRunnable,其功能为读取input split的一个个record,依次调用Mapper的map行数

setMapOutputKeyClass和setMapOutputValueClass:设置Mapper的输出的key-value对的格式

setOutputKeyClass和setOutputValueClass:设置Reducer的输出的key-value对的格式

setPartitionerClass和setNumReduceTasks:设置Partitioner,默认为HashPartitioner,其根据key的hash值来决定进入哪个partition,每一个partition被一个reduce task处理,所以partition的个数等于reduce task的个数

setReducerClass:设置Reducer,默认为IdentityReducer

setOutputFormat:设置任务的输出格式 默认为TextOutputFormat

FileInputFormat.addInputPath:设置输入文件的路径,可以使每一个文件,一个路径,一个通配符,可以被调用多次添加多个路径

FileOutputFormat.setOutputPath:设置输入文件的路径,在job运行前次路径不应该存在

(6)Map-Reduce:

a.客户端Client:用于提交Map-reduce任务job

b.JobTracker:协调整个job的运行,其为一个java进程,其main class为JobTracker

c.TaskTracker:运行此job的task,处理input split,其为一个Java进程,其main class 为TaskTracker

d.HDFS:hadoop分布式文件系统,用于在各个进行间共享Job相关的文件

(7)任务提交:JobClient.runJob()创建一个新的JobClient实例,调用其submitJob()

a.向JobTracer请求一个新的job ID

b.检测此job的output配置

c.计算此job的input splits

d.将Job运行需要的资源拷贝到JobTracker文件系统中的文件夹中,包括job jar文件 job.xml配置文件,input splits

e.通知JobTracker此Job已经可以运行了

提交任务后,runJob每隔一秒轮询一次job的进度,将进度返回到命令行,直到任务运行完毕

(8)任务初始化

a.当JobTracker收到submitJob调用的时候,将此任务放到一个队列中

b.job调度器将从队列中获取任务并初始化任务

c.初始化首先创建一个对象来封装job运行的tasks、status以及progress

d.在创建task之前,job调度器首先从共享文件系统中获得JobClient计算出的input splits

e.其为每一个input split创建一个map task

f.每个task被分配一个ID

(9)任务分配

a.TaskTracker周期性的向JobTracker发送heartbeat

b.在heartbeat中,TaskTracker告知JobTracker已经准备运行一个新的task,JobTracker将会分配给其一个task

c.在JobTracker为TaskTracker选择一个task之前,JobTracker必须首先按照优先级选择一个Job,在最高优先级的Job中选择一个task

d.TaskTracker有固定数量的位置来运行map task或者reduce task

e.默认的调度器对待map task优先于reduce task

f.但选择reduce task的时候,JobTracker并不在多个task之间进行选择,而是直接取下一个,因为reduce task没有数据本地化的概念

(10)任务执行

TaskTracker被分配了一个task,下面便要运行此task

a.TaskTracker将此job的jar从共享文件系统中拷贝到TaskTracker的文件系统中

b.TaskTracker从distributed cache中将job运行所需要的文件拷贝到本地磁盘

c.其次,其为每个task创建一个本地的工作目录,将jar解压缩到文件目录中

d.其创建一个TaskRunner来运行task,TaskRunner创建一个新的JVM来运行task,被创建的child JVM和TaskTracker通信来报告运行进度

(11)Map的过程

a.MapRunnable从input split中读取一个个的record,然后依次调用Mapper的map函数,将结果输出

b.map的输出并不是直接写入硬盘的,而是将其写入缓存memory buffer

c.当buffer中数据的到达一定的大小,一个背景线程将数据开始写入硬盘

d.在写入硬盘之前,内存中的数据通过partitioner分成多个partition

e.在同一个partition中,背景线程会将数据按照key在内存中排序

f.每次从内存向硬盘flush数据,都会生成一个新的spill文件

g.当此task结束之前,所有的spill文件被合并为一个整的被partition的并且排好序的文件

h.reducer可以通过http协议请求map的输出文件,tracker.http.threads可以设置http服务线程数

(12)Reduce的过程

a.当map task结束后,其通知TaskTracker,TaskTracker通知JobTracker

b.对于一个job,JobTracker知道TaskTracker和map的输出的对应关系

c.reducer中一个线程周期性的向JobTracker请求map输出的位置,直到其取得了所有的map输出

d.reduce task需要其对应的partition的所有的map输出

e.reduce task中的copy过程即当map task结束的时候就开始拷贝输出 因为不同的map task完成时间不同

f.reduce task中有多个copy线程,可以并行拷贝map输出

g.当很多map输出都拷贝到reduce task后,进入sort过程,将所有的map输出合并为大的排好序的文件

h.最后进入reduce过程,调用reducer的reduce行数,处理排好序的输出的每个key,最后的结果写入HDFS

(13)任务结束

当JobTracker获得最后一个task的运行成功的报告后,将job的状态改为成功

当JobClient从JobTracker轮询的时候,发现此job已经成功结束,则向用户打印消息,从runJob函数中返回

4环境的搭建?

5优势?

6劣势?

Hadoop初次接触后感相关推荐

  1. 汇编语言的准备知识--给初次接触汇编者 (1-4) 转载

    汇编语言的准备知识--给初次接触汇编者 1 在接触到游戏修改后发现需要很多的汇编知识,于是找汇编基础知识恶补,到网上搜索到一篇不错的文章,给各位想我一样的初学者一起学习! 教程: 汇编语言的准备知识- ...

  2. 汇编语言的准备知识--给初次接触汇编者 之三

    "汇编语言"作为一门语言,对应于高级语言的编译器,我们需要一个"汇编器"来把汇编语言原文件汇编成机器可执行的代码.高级的汇编器如MASM, TASM等等为我们写 ...

  3. 初次接触GWT,知识点总括

    初次接触GWT,知识点概括 前言 本人最近开始研究 GWT(Google Web Toolkit) ,现将个人的一点心得贴出来,希望对刚开始接触 GWT的程序员们有所帮助,也欢迎讨论,共同进步. 先说 ...

  4. 读《刻意练习》后感,与原文好句摘抄

    第一章,有目的的练习 所谓"天真的练习",基本上只是反复的做某件事情,并指望只靠这种反复的练习,就能够提高表现和水平. 有目的练习的四个特点 有目的的练习具有定义明确的特定目标 有 ...

  5. 《程序员的自我修养》后感【1】

    阅读<程序员的自我修养>后感,自我感觉对计算机内部的运转有了一个更清晰的认知. (我想用我的生活实例去结合这本书的知识,如若出现错误希望能够指点一二.谢谢!) 在我第一次接触计算机的时候, ...

  6. SAP FIORI专题之一:初次接触fiori,用sap hana studio开发发布UI5程序

    初次接触fiori 1 准备环境 2 一个简单的CURD怎么搞 2.1 后端建service 2.1.1 SEGW进入后端主界面 2.2.2 建个表 2.2.3 引用结构创建实体 2.2.4 发布生成 ...

  7. 台大教授张文亮-台湾大学公开课-《人生的意义-爱情的意义》课程听后感

    目录 1.张文亮个人简介 1.1. 从问题学生成为台大教授 1.2. 问题学生在传统学校机制下的遭遇 1.3. 问题学生认识和提升自我的机遇 2.<人生的意义>-爱情的意义节选 2.1.为 ...

  8. 全国计算机设计大赛参后感

    全国计算机设计大赛参后感 经验心得 年少轻狂,不知愁滋味. 比赛或者汇报需要注意的几项: 经验心得 在这次比赛中,最大的收获就是让我明白了,做东西不能太散.一定要专一的去研究一个方向,否则就会多而不精 ...

  9. (Python入门)学习笔记一,初次接触尝试使用Python——环境搭建与配置

    (Python入门)学习笔记一,初次接触尝试使用Python 早就耳闻Python大名,搞大数据.做人工智能.整机器学习,就得了解Python.之前一直没有去了解,现在由于之前一个项目涉及到一点Pyt ...

最新文章

  1. awk 分隔符_awk命令使用实例
  2. 观念什么意思_俗语“女怕午时生,男怕子夜临”是啥意思?古人的忌讳有道理吗?...
  3. java面向对象小程序_java运用面向对象的思想实现计算器的小程序
  4. 根据文件扩展名得到文件对应该类型Icon方法
  5. ERC721藏品合约详解,附代码实现
  6. 大数据_Flink_流式处理_简介_Flink的特点---Flink工作笔记0006
  7. 为什么git的“ pull request”不称为“ push request”?
  8. python教程视频哪个好-python视频教程哪家好
  9. 计算机telnet命令大全,Telnet命令
  10. 如何将一个长URL转换为一个短URL?
  11. 【转】Oracle知识点汇总
  12. 运用GoogleSketchUp创作城市雕塑
  13. 撤销commit操作
  14. 前端input操作,修改光标颜色,去除背景色
  15. linux如何给脚本等创建一个桌面启动图标
  16. 那是计算机房吗不他不是用英语怎么说,他有一个录音棚。,He has a recording studio.,音标,读音,翻译,英文例句,英语词典...
  17. wss2016 作文件服务器,Nodejs搭建wss服务器教程
  18. stack-es-标准篇-ElasticsearchClient-fields
  19. reduce函数的用法
  20. C#实现万年历(农历、节气、节日、星座、属相、生肖、闰年等)

热门文章

  1. 入职必备两小时入门SVN(二)
  2. node php环境变量配置,关于NodeJS、NPM安装配置步骤(windows版本) 以及环境变量的介绍...
  3. java array 元素的位置_208道高频 Java面试题答案2
  4. Zeppelin 可视化操作spark sql
  5. github get 请求指定页面的代码
  6. hausaufgabe--python 20- usage of Closure
  7. jqgrid for asp.net 单页全选记录ID
  8. 类和接口的使用-类和成员可访问性最小化
  9. Java调用Lua脚本(热载实现)
  10. iOS 文字样式处理总结(字体、前背景色、斜体、加粗、对齐、行间距、段间距、动态获取字符串label宽高等)...