hadoop

---恢复内容开始---

HADOOP:海量数据的计算和存储

HDFS

不管读还是写,客户端都要先访问NN

NN:hdfs系统中的文件与真实的block之间的映射,由NN管理。

hdfs的shell操作:

hadoop fs -cat/-put /-get/ls /

HDFS上传文件的流程

1.客户端向NN节点发出请求;

2.NN向客户端返回可以存数据的DN,并且往edits log文件中记录元数据操作日志;

3.客户端根据返回的信息将文件分块(1个block128M);

(客户端上传文件成功后,NN在内存中写入这次上传操作产生的元数据)

4.通过NN返回的DN信息,直接发送给DN,同时复制到其他两台机器;

5. DN向客户端通信,表示传完数据,同时向NN报告。

NN元数据管理机制

1.写副本

-对于客户端,只用写1个副本;剩余两个副本,由1个DN复制到另一个DN(管道)【这个过程与客户端写副本过程是异步进行的】。

客户端在连上的DN上写第一个副本,第二个副本放在另外一个机架上,第三个副本在本机架上随便找一个。

3个副本的保证,由NN进行管理。

-下一个副本成功复制后,会向上一个副本返回响应,如果返回失败响应,最终NN会接收到这个响应,然后重新分配1个DN进行复制。

2.元数据管理

磁盘fsimage(定期与edits log做合并) +内存(查询)+edits log(记录元数据)

当 edits log写满时,需要将这一段时间的新的元数据刷到fsimage中去

3.SN:fsimage与edits log的合并

checkpoint的时间:1.规定edits文件的最大值 ,默认64M   2.两次checkpoint之间的最大时间 默认3600秒

NN工作机制

维护元数据信息 维护hdfs目录树 响应客户端请求

 DN工作机制

 block 默认 128M,如果1个文件小于一个数据块的大小,并不占用整个数据块存储空间。

shell命令练习:

hadoop fs -put jdk /

HDFS的java客户端

FileSystem抽象类  有很多子类(不同的文件存储类型)

RPC框架实现机制

客户端与NN\ NN与DN\ 都通过RPC调用

 DN会定期向NN汇报自己的block信息(例如某个block损坏了)

RPC????动态代理+反射+socket通信

 

 

 

hadoop对于小文件的处理办法

 

HDFS如何容错

一致性模型

在向HDFS写数据时,当某一个副本出错怎么办

hadoop和yarn的任务调度算法和任何对垒

HDFS接口类型

联邦HDFS

HDFS什么时候会出现副本数量多于设定值的情况

HDFA如何添加和撤销数据节点

NN的数据块和数据节点管理

HDFS有一个数据块损坏怎么处理

HDFS有一个数据块,如何知道其副本的数量

客户端在写入数据时只写入1个数据块,怎么处理

HDFS删除多余副本

HDFS删除一个文件的过程

 

mapreduce 简单的运算逻辑扩展到海量数据

案例:海量文件中某个参数出现的次数?wordcount?

map

相同的key分发到同一个reduce中。

wordmapper类:继承mapper类<1,2,3,4,>定义4个泛型,表示数据输入输出格式  都是k-v对形式

1.默认情况下,mapper中的输入数据中,key是要处理的文本中一行的起始偏移量,这一行的内容作为value

2.<Long,String,自己定义,自己定义>---------<LongWritable,Text,自己定义,自己定义>

注意:这些数据在网络之间传递,所以需要序列化。hadoop自己的序列化机制,所以要使用hadoop自己的序列化类型.(jdk本身的序列化方法有很多附加信息,不适合在网络之间传输)

3.重写map方法(每读一行数据,就调用一下这个方法)

//写具体业务逻辑

//context.write(k,v)将结果输出

------------------------------------------------------------------------------------------------------------

每一组k统计完了,才会发送给reduce,也就是缓存层

wordreducer类:继承reducer类<1,2,3,4,>定义4个泛型,表示数据输入输出格式

<Text key,Iterable<LongWritable> values,Content content>注意这里是迭代器!因为values是1个集合。

1.传递一个key,调用1次reduce方法。<hello,{1,1,1,1,1.....}>

2.遍历value,进行累加求和

3.输出统计结果context.write(key,new LongWritable(count) );

-------------------------------------------------------------------------------------------------------------

job描述

描述哪个mapper对应哪个reducer,指定要处理的数据路径,指定数据输出结果放在哪里。

hadoop:Job job=Job.getInstance(conf); 

指定mapper和reduce

job.setMapperClass()

job.setReducerClass()

指定reduce的输出数据类型

job.setOutputKeyClass(Text.class)

指定rmapper的输出数据类型

指定原始数据在哪里

提交到集群运行

打成jar包,传到hadoop服务器,hadoop jar wc.jar (全路径包名)

 查看结果  hadoop fs -cat (文件名)

 

切片

工作机制

计数器

shuffle机制

shuffle机制的缺陷

combiner函数何时被使用reduce函数如何知道从哪台机器获取map输出

 

 

yarn

applicationMaster 故障后如何处理

资源调度器

架构

APPmaster向resourcemanager申请资源的过程

container

 

 

hadoop文件读流程和写流程

读流程

1.客户端发起RPC请求访问NN;

2.NN查询元数据,找到这个文件的存储位置对应的数据块信息;

3.NN将文件对应的数据块节点地址放入1个队列中然后返回;

4.客户端收到数据块对应的节点地址;

5.客户端从队列中取出第一个数据块对应的节点地址,会从这些节点中选取一个最近的节点进行读取;

6.读取Block后,对block进行scheksum的验证,如果验证失败,说明数据块产生损坏,此时向NN发送信息进行说明,然后从其他节点读取数据块;

7.验证成功,则从队列中取出下一个block的地址,继续读取;

8.当把这一次的文件快全部读取完成之后,客户端向NN要下一批block的地址;

9.文件全部读取成功后,客户端向NN发送读取完毕的信号,NN关闭对应的文件。

写流程

1.客户端发送RPC请求给NN;

2.NN接收到请求后,对请求进行验证,例如请求的文件是否存在;

3.验证通过后,NN确定文件的大小以及分块的数量,确定对应的节点,将节点放入队列中返回;

4.客户端收到地址后,从队列中取出节点地址,然后数据块依次放入对应的节点地址上;

5.客户端在写完之后向NN发送写完数据的信号,NN会给客户端1个关闭文件的信号;

6.DN之间将会通过管道进行自动备份,保证副本数量。

 

Hive

只读不写

查询速度较慢

hive数据倾斜原因及处理办法

 

linux命令

在linux中找到满足下列条件的文件:

1.文件名包含字符串“profile”

find /path -name '*profile*'

2文件大小大于10MB

find . -type f -size +10M

3文件的修改时间在7天前

find . -type f -mtime +7;

 

以MR任务为例,yarn的整个过程

Hbase各个组成成分和作用

HBASE删除一条数据的过程

HA

SN

 

 

 

 

 

Mapreduece

框架和使用场景

API使用

运行机制

shuffle机制:map和reduce中间的数据调度机制,包含缓存,分区,排序。

reduce task数量决定机制

业务逻辑需要(有些场景只能有一个,比如统计某一个单词出现的次数

数据量大小  job.setnumberReduceTsks(n)

如果重写了分区,就必须使任务数大于等于分区数。

map task数量决定

 

完全取决于数据量的大小  

 

split

默认的切片机制:

 

Textinputformat.getsplit(“path”)做切片规划

 

1.      定义切片大小,可以通过参数调节,但是默认情况等于hdfs中的设置的blocksize

 

2.      获取数据目录下所有待处理文件list

 

3.      遍历文件list,逐个文件进行切片

 

For(file:list)

 

file0偏移量开始切,每128M构成一个切片

 

比如a.txt200M),就会切成 a.txt0-128Ma.txt128M-256M

 

b.txt 切成1b.txt 0-80M

 

如果要处理的数据是大量的小文件???,使用上述切片机制导致大量的切片,但是每个切片非常小,导致map task进程多,但数据量很小,效率很低。

 

解决:将多个小文件划分为1和切片,自定义inputfoemat子类,重写split

 

Mapreduce自带实现类combinefileinputformat

Yarn

框架和使用场景

 

Resourcemanager 主节点master 只需要1个来工作

 

Nodemanager 从节点 根据集群规模可以有很多个

 

心跳通信?

 

1.      yarn只负责资源的分配,不参与job具体的运行机制

 

2.      mapreduce有一个进程mrappmaster来负责程序的运行流程控制

 

3.      yarn可以为各种应用程序提供资源服务(类似于操作系统平台)

 

4.      可以把各种分布式框架整合到hadoop集群

 

 

 

---恢复内容结束---

HADOOP:海量数据的计算和存储

HDFS

不管读还是写,客户端都要先访问NN

NN:hdfs系统中的文件与真实的block之间的映射,由NN管理。

hdfs的shell操作:

hadoop fs -cat/-put /-get/ls /

HDFS上传文件的流程

1.客户端向NN节点发出请求;

2.NN向客户端返回可以存数据的DN,并且往edits log文件中记录元数据操作日志;

3.客户端根据返回的信息将文件分块(1个block128M);

(客户端上传文件成功后,NN在内存中写入这次上传操作产生的元数据)

4.通过NN返回的DN信息,直接发送给DN,同时复制到其他两台机器;

5. DN向客户端通信,表示传完数据,同时向NN报告。

NN元数据管理机制

1.写副本

-对于客户端,只用写1个副本;剩余两个副本,由1个DN复制到另一个DN(管道)【这个过程与客户端写副本过程是异步进行的】。

客户端在连上的DN上写第一个副本,第二个副本放在另外一个机架上,第三个副本在本机架上随便找一个。

3个副本的保证,由NN进行管理。

-下一个副本成功复制后,会向上一个副本返回响应,如果返回失败响应,最终NN会接收到这个响应,然后重新分配1个DN进行复制。

2.元数据管理

磁盘fsimage(定期与edits log做合并) +内存(查询)+edits log(记录元数据)

当 edits log写满时,需要将这一段时间的新的元数据刷到fsimage中去

3.SN:fsimage与edits log的合并

checkpoint的时间:1.规定edits文件的最大值 ,默认64M   2.两次checkpoint之间的最大时间 默认3600秒

NN工作机制

维护元数据信息 维护hdfs目录树 响应客户端请求

 DN工作机制

 block 默认 128M,如果1个文件小于一个数据块的大小,并不占用整个数据块存储空间。

shell命令练习:

hadoop fs -put jdk /

HDFS的java客户端

FileSystem抽象类  有很多子类(不同的文件存储类型)

RPC框架实现机制

客户端与NN\ NN与DN\ 都通过RPC调用

 DN会定期向NN汇报自己的block信息(例如某个block损坏了)

RPC????动态代理+反射+socket通信

 

 

 

hadoop对于小文件的处理办法

 

HDFS如何容错

一致性模型

在向HDFS写数据时,当某一个副本出错怎么办

hadoop和yarn的任务调度算法和任何对垒

HDFS接口类型

联邦HDFS

HDFS什么时候会出现副本数量多于设定值的情况

HDFA如何添加和撤销数据节点

NN的数据块和数据节点管理

HDFS有一个数据块损坏怎么处理

HDFS有一个数据块,如何知道其副本的数量

客户端在写入数据时只写入1个数据块,怎么处理

HDFS删除多余副本

HDFS删除一个文件的过程

 

mapreduce 简单的运算逻辑扩展到海量数据

案例:海量文件中某个参数出现的次数?wordcount?

map

相同的key分发到同一个reduce中。

wordmapper类:继承mapper类<1,2,3,4,>定义4个泛型,表示数据输入输出格式  都是k-v对形式

1.默认情况下,mapper中的输入数据中,key是要处理的文本中一行的起始偏移量,这一行的内容作为value

2.<Long,String,自己定义,自己定义>---------<LongWritable,Text,自己定义,自己定义>

注意:这些数据在网络之间传递,所以需要序列化。hadoop自己的序列化机制,所以要使用hadoop自己的序列化类型.(jdk本身的序列化方法有很多附加信息,不适合在网络之间传输)

3.重写map方法(每读一行数据,就调用一下这个方法)

//写具体业务逻辑

//context.write(k,v)将结果输出

------------------------------------------------------------------------------------------------------------

每一组k统计完了,才会发送给reduce,也就是缓存层

wordreducer类:继承reducer类<1,2,3,4,>定义4个泛型,表示数据输入输出格式

<Text key,Iterable<LongWritable> values,Content content>注意这里是迭代器!因为values是1个集合。

1.传递一个key,调用1次reduce方法。<hello,{1,1,1,1,1.....}>

2.遍历value,进行累加求和

3.输出统计结果context.write(key,new LongWritable(count) );

-------------------------------------------------------------------------------------------------------------

job描述

描述哪个mapper对应哪个reducer,指定要处理的数据路径,指定数据输出结果放在哪里。

hadoop:Job job=Job.getInstance(conf); 

指定mapper和reduce

job.setMapperClass()

job.setReducerClass()

指定reduce的输出数据类型

job.setOutputKeyClass(Text.class)

指定rmapper的输出数据类型

指定原始数据在哪里

提交到集群运行

打成jar包,传到hadoop服务器,hadoop jar wc.jar (全路径包名)

 查看结果  hadoop fs -cat (文件名)

 

切片

工作机制

计数器

shuffle机制

shuffle机制的缺陷

combiner函数何时被使用reduce函数如何知道从哪台机器获取map输出

 

 

yarn

applicationMaster 故障后如何处理

资源调度器

架构

APPmaster向resourcemanager申请资源的过程

container

 

 

hadoop文件读流程和写流程

读流程

1.客户端发起RPC请求访问NN;

2.NN查询元数据,找到这个文件的存储位置对应的数据块信息;

3.NN将文件对应的数据块节点地址放入1个队列中然后返回;

4.客户端收到数据块对应的节点地址;

5.客户端从队列中取出第一个数据块对应的节点地址,会从这些节点中选取一个最近的节点进行读取;

6.读取Block后,对block进行scheksum的验证,如果验证失败,说明数据块产生损坏,此时向NN发送信息进行说明,然后从其他节点读取数据块;

7.验证成功,则从队列中取出下一个block的地址,继续读取;

8.当把这一次的文件快全部读取完成之后,客户端向NN要下一批block的地址;

9.文件全部读取成功后,客户端向NN发送读取完毕的信号,NN关闭对应的文件。

写流程

1.客户端发送RPC请求给NN;

2.NN接收到请求后,对请求进行验证,例如请求的文件是否存在;

3.验证通过后,NN确定文件的大小以及分块的数量,确定对应的节点,将节点放入队列中返回;

4.客户端收到地址后,从队列中取出节点地址,然后数据块依次放入对应的节点地址上;

5.客户端在写完之后向NN发送写完数据的信号,NN会给客户端1个关闭文件的信号;

6.DN之间将会通过管道进行自动备份,保证副本数量。

 

Hive

只读不写

查询速度较慢

hive数据倾斜原因及处理办法

 

linux命令

在linux中找到满足下列条件的文件:

1.文件名包含字符串“profile”

find /path -name '*profile*'

2文件大小大于10MB

find . -type f -size +10M

3文件的修改时间在7天前

find . -type f -mtime +7;

 

以MR任务为例,yarn的整个过程

Hbase各个组成成分和作用

HBASE删除一条数据的过程

HA

SN

 

 

 

 

 

Mapreduece

框架和使用场景

API使用

运行机制

shuffle机制:map和reduce中间的数据调度机制,包含缓存,分区,排序。

reduce task数量决定机制

业务逻辑需要(有些场景只能有一个,比如统计某一个单词出现的次数

数据量大小  job.setnumberReduceTsks(n)

如果重写了分区,就必须使任务数大于等于分区数。

map task数量决定

 

完全取决于数据量的大小  

 

split

默认的切片机制:

 

Textinputformat.getsplit(“path”)做切片规划

 

1.      定义切片大小,可以通过参数调节,但是默认情况等于hdfs中的设置的blocksize

 

2.      获取数据目录下所有待处理文件list

 

3.      遍历文件list,逐个文件进行切片

 

For(file:list)

 

file0偏移量开始切,每128M构成一个切片

 

比如a.txt200M),就会切成 a.txt0-128Ma.txt128M-256M

 

b.txt 切成1b.txt 0-80M

 

如果要处理的数据是大量的小文件???,使用上述切片机制导致大量的切片,但是每个切片非常小,导致map task进程多,但数据量很小,效率很低。

 

解决:将多个小文件划分为1和切片,自定义inputfoemat子类,重写split

 

Mapreduce自带实现类combinefileinputformat

Yarn

框架和使用场景

 

Resourcemanager 主节点master 只需要1个来工作

 

Nodemanager 从节点 根据集群规模可以有很多个

 

心跳通信?

 

1.      yarn只负责资源的分配,不参与job具体的运行机制

 

2.      mapreduce有一个进程mrappmaster来负责程序的运行流程控制

 

3.      yarn可以为各种应用程序提供资源服务(类似于操作系统平台)

 

4.      可以把各种分布式框架整合到hadoop集群

 

 

 

转载于:https://www.cnblogs.com/NeverGiveUp0/p/11109093.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值