[Hadoop源码详解]之一MapReduce篇之InputFormat _ 石头儿
- 格式:pdf
- 大小:649.16 KB
- 文档页数:12
/2013/02/hadoop-source-code-analyse-mapreduce-inputformat/ 2/12
15-10-31
[Hadoop源码详解]之一MapReduce篇之InputFormat | 石头儿
* t h ef i l en a m e *@ p a r a ms t a r t * t h ep o s i t i o no ft h ef i r s tb y t ei nt h ef i l et op r o c e s s *@ p a r a ml e n g t h * t h en u m b e ro fb y t e si nt h ef i l et op r o c e s s *@ p a r a mh o s t s * t h el i s to fh o s t sc o n t a i n i n gt h eb l o c k ,p o s s i b l yn u l l * / p u b l i cF i l e S p l i t ( P a t hf i l e ,l o n gs t a r t ,l o n gl e n g t h ,S t r i n g [ ]h o s t s ){ t h i s . f i l e=f i l e ; t h i s . s t a r t=s t a r t ; t h i s . l e n g t h=l e n g t h ; t h i s . h o s t s=h o s t s ; } / * *T h en u m b e ro fb y t e si nt h ef i l et op r o c e s s .* / @ O v e r r i d e p u b l i cl o n gg e t L e n g t h ( ){ r e t u r nl e n g t h ; } @ O v e r r i d e p u b l i cS t r i n g [ ]g e t L o c a t i o n s ( )t h r o w sI O E x c e p t i o n{ i f( t h i s . h o s t s= =n u l l ){ r e t u r nn e wS t r i n g [ ]{ } ; }e l s e{ r e t u r nt h i s . h o s t s ; } } / / 略掉部分方法 }
不同的InputFormat会各自实现不同的文件读取方式以及分片方式,每个输入分片会被单独的map task作为数 据源。下面详细介绍输入分片(inputSplit)是什么。
3.InputSplit
Mappers的输入是一个一个的输入分片,称InputSplit。看源码可知,InputSplit也是一个抽象类,它在逻辑 上包含了提供给处理这个InputSplit的Mapper的所有K-V对。
[Hadoop源码详解]之一MapReduce篇之InputFormat
2013年2月27日Fowler Zhang发表评论阅读评论10,782 views人阅读 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明 。否则将追 究法律责任。/2013/02/hadoop-source-code-analyse-mapreduce-inputformat/
p u b l i cc l a s sC o m b i n e F i l e S p l i te x t e n d sI n p u t S p l i ti m p l e m e n t sW r i t a b l e{ p r i v a t eP a t h [ ]p a t h s ; p r i v a t el o n g [ ]s t a r t o f f s e t ; p r i v a t el o n g [ ]l e n g t h s ; p r i v a t eS t r i n g [ ]l o c a t i o n s ; p r i v a t el o n gt o t L e n g t h ; p u b l i cC o m b i n e F i l e S p l i t ( P a t h [ ]f i l e s ,l o n g [ ]s t a r t ,l o n g [ ]l e n g t h s , S t r i n g [ ]l o c a t i o n s ){ i n i t S p l i t ( f i l e s ,s t a r t ,l e n g t h s ,l o c a t i o n s ) ; } p r i v a t ev o i di n i t S p l i t ( P a t h [ ]f i l e s ,l o n g [ ]s t a r t ,l o n g [ ]l e n g t h s , S t r i n g [ ]l o c a t i o n s ){ t h i s . s t a r t o f f s e t=s t a r t ; t h i s . l e n g t h s=l e n g t h s ; t h i s . p a t h s=f i l e s ; t h i s . t o t L e n g t h=0 ; t h i s . l o c a t i o n s=l o c a t i o n s ; f o r( l o n gl e n g t h:l e n g t h s ){ t o t L e n g t h+ =l e n g t h ; } } p u b l i cl o n gg e t L e n g t h ( ){ r e t u r nt o t L e n g t h ; } / * *R e t u r n sa l lt h eP a t h sw h e r et h i si n p u t s p l i tr e s i d e s* / p u b l i cS t r i n g [ ]g e t L o c a t i o n s ( )t h r o w sI O E x c e p t i o n{ r e t u r nl o c a t i o n s ; } / / 省略了部分构造函数和方法,深入学习请阅读源文件 }
下面深入看一个InputSplit的子类:FileSplit类
p u b l i cc l a s sF i l e S p l i te x t e n d sI n p u t S p l i ti m p l e m e n t sW r i t a b l e{ p r i v a t eP a t hf i l e ; p r i v a t el o n gs t a r t ; p r i v a t el o n gl e n g t h ; p r i v a t eS t r i n g [ ]h o s t s ; / * * *C o n s t r u c t sas p l i tw i t hh o s ti n f o r m a t i o n * *@ p a r a mf i l e
1. 概述
我语句:
j o b . s e t I n p u t F o r m a t C l a s s ( K e y V a l u e T e x t I n p u t F o r m a t . c l a s s ) ;
这条语句保证了输入文件会按照我们预设的格式被读取。KeyValueTextInputFormat即为我们设定的数据读取 格式。 所有的输入格式类都继承自InputFormat,这是一个抽象类。其子类有例如专门用于读取普通文件的 FileInputFormat,还有用来读取数据库的DBInputFormat等等。相关类图简单画出如下(推荐新标签中打开图 片查看):
p u b l i ca b s t r a c tc l a s sI n p u t F o r m a t < K ,V >{ / * * * 仅仅是逻辑分片,并没有物理分片,所以每一个分片类似于这样一个元组 < i n p u t f i l e p a t h ,s t a r t ,o f f s e t > * / p u b l i ca b s t r a c tL i s t < I n p u t S p l i t >g e t S p l i t s ( J o b C o n t e x tc o n t e x t ) t h r o w sI O E x c e p t i o n ,I n t e r r u p t e d E x c e p t i o n ; / * * *C r e a t ear e c o r dr e a d e rf o rag i v e ns p l i t . * / p u b l i ca b s t r a c tR e c o r d R e a d e r < K ,V >c r e a t e R e c o r d R e a d e r ( I n p u t S p l i ts p l i t , T a s k A t t e m p t C o n t e x tc o n t e x t )t h r o w sI O E x c e p t i o n , I n t e r r u p t e d E x c e p t i o n ; }