Hadoop初次接触后感
2015-12-29 20:01
281 查看
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劣势?
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劣势?
相关文章推荐
- Linux——用户及文件权限
- hdu1011Starship Troopers【树型dp】
- drbd 高可用工具
- heartbeat 高可用工具
- 企业DevOps:实施过程中需要关注的各项要点
- nginx配置location
- 【创建动态网站-第0讲】专业名词解释
- linux系统的7种运行级别
- [转载]linux下编译php中configure参数具体含义
- [Ubuntu] ubuntu10.04系统维护之Wine的安装
- opencv2 SURF
- 浅谈Linux的硬盘分区和目录结构——新手向
- Hadoop core-site.xml 配置项清单
- 为什么linux下要configure然后make make install?
- linux系统简单搭建iSCSI
- Ubuntu上搭建Hadoop环境(单机模式+伪分布模式)
- nginx启动、重启、关闭
- CentOS下LVM的使用:逻辑卷的压缩、创建
- centos之rpm详解
- Linux编程之一:创建第一个C/C++程序