高级MapReduce编程技术.pptx
《高级MapReduce编程技术.pptx》由会员分享,可在线阅读,更多相关《高级MapReduce编程技术.pptx(81页珍藏版)》请在冰豆网上搜索。
![高级MapReduce编程技术.pptx](https://file1.bdocx.com/fileroot1/2022-10/9/e5f71f41-ec13-4a0d-b850-802fcec4d87e/e5f71f41-ec13-4a0d-b850-802fcec4d87e1.gif)
Ch.7.Ch.7.高级高级MapReduceMapReduce编程技术编程技术MapReduceMapReduce海量数据并行处理海量数据并行处理Ch.7.Ch.7.高级高级MapReduceMapReduce编程技术编程技术1.复合键值对的使用2.用户自定义数据类型3.用户自定义输入输出格式4.用户自定义Partitioner和Combiner5.迭代完成MapReduce计算6.链式MapReduce任务7.多数据源的连接8.全局参数/数据文件的传递9.其它处理技术用复合键让系统完成排序用复合键让系统完成排序map计算过程结束后进行Partitioning处理时,系统自动按照map的输出键进行排序,因此,进入Reduce节点的(key,value)对将保证是按照key进行排序的,而value则不保证是排好序的。
为了解决这个问题,可以在Reduce过程中对value列表中的各个value进行本地排序。
但当value列表数据量巨大、无法在本地内存中进行排序时,将出现问题。
一个更好的办法是,将value中需要排序的部分加入到key中形成复合键,这样将能利用MapRecue系统的排序功能完成排序。
但需要实现一个新的Partitioner,保证原来同一key值的键值对最后分区到同一个Reduce节点上。
1.1.复合键值对的使用复合键值对的使用用复合键让系统完成排序用复合键让系统完成排序复合键值对的使用复合键值对的使用带频率的倒排索引示例1:
classMapper2:
procedureMap(docidn,docd)3:
HnewAssociativeArray4:
foralltermtdocddo5:
HtHt+16:
foralltermtHdo7:
Emit(termt,posting)1:
classReducer2:
procedureReduce(termt,postings,)3:
PnewList4:
forallpostingpostings,do5:
Append(P,)6:
Sort(P);/进入Reduce节点的postings不保证按照文档序/号排序,因而需要对postings进行一个本地排序7:
Emit(termt;postingsP)用复合键让系统完成排序用复合键让系统完成排序复合键值对的使用复合键值对的使用带频率的倒排索引示例为了能利用系统自动对docid进行排序,解决方法是:
代之以生成(term,)键值对,map时将term和docid组合起来形成复合键。
但会引起新的问题,同一个term下的所有posting信息无法被分区到同一个Reduce节点,为此,需要实现一个新的Partitioner:
从中取出term,以term作为key进行分区。
Arevisedexample复合键值对的使用复合键值对的使用InvertedIndexingArevisedexample(cont.)CustomizedPartitionerCustomizedPartitioner复合键值对的使用复合键值对的使用进入入reducereduce的的键值对按照按照(term,docid)(term,docid)排序排序把小的键值对合并成大的键值对把小的键值对合并成大的键值对通常一个计算问题会产生大量的键值对,为了减少键值对传输和排序的开销,一些问题中的大量小的键值对可以被合并成一些大的键值对(pairs-stripes)。
单词同现矩阵算法一个Map可能会产生单词a与其它单词间的多个键值对,这些键值对可以在Map过程中合并成右侧的一个大的键值对(条):
然后,在Reduce阶段,把每个单词a的键值对(条)进行累加:
复合键值对的使用复合键值对的使用(a,b)1(a,c)2(a,d)5(a,e)3(a,f)2ab:
1,c:
2,d:
5,e:
3,f:
2ab:
1,d:
5,e:
3ab:
1,c:
2,d:
2,f:
2ab:
2,c:
2,d:
7,e:
3,f:
2+把小的键值对合并成大的键值对把小的键值对合并成大的键值对单词同现矩阵算法复合键值对的使用复合键值对的使用Clustersize:
38coresDataSource:
AssociatedPressWorldstream(APW)oftheEnglishGigawordCorpus(v3),whichcontains2.27milliondocuments(1.8GBcompressed,5.7GBuncompressed)把小的键值对合并成大的键值对把小的键值对合并成大的键值对用JobTracker的WebGUI可以观察优化执行后各项统计数据复合键值对的使用复合键值对的使用HadoopHadoop内置的数据类型内置的数据类型这些数据类型都实现了WritableComparable接口,以便进行网络传输和文件存储,以及进行大小比较。
2.2.用户自定义数据类型用户自定义数据类型用户自定义数据类型用户自定义数据类型需要实现Writable接口,作为key或者需要比较大小时则需要实现WritableComparable接口用户自定义数据类型用户自定义数据类型publicclassPoint3DimplementsWritableComparableprivateintx,y,z;publicintgetX()returnx;publicintgetY()returny;publicintgetZ()returnz;publicvoidwrite(DataOutputout)throwsIOExceptionout.writeFloat(x);out.writeFloat(y);out.writeFloat(z);publicvoidreadFields(DataInputin)throwsIOExceptionx=in.readFloat();y=in.readFloat();z=in.readFloat();publicintcompareTo(Point3Dp)/comparesthis(x,y,z)withp(x,y,z)andoutputs-1,0,1若用户需要自定义数据类型若用户需要自定义数据类型,实现实现WritableComparableWritableComparable接口接口publicclassEdgeimplementsWritableComparableprivateStringdepartureNode;privateStringarrivalNode;publicStringgetDepartureNode()returndepartureNode;OverridepublicvoidreadFields(DataInputin)throwsIOExceptiondepartureNode=in.readUTF();arrivalNode=in.readUTF();Overridepublicvoidwrite(DataOutputout)throwsIOExceptionout.writeUTF(departureNode);out.writeUTF(arrivalNode);OverridepublicintcompareTo(Edgeo)return(departureNpareTo(o.departureNode)!
=0)?
departureNpareTo(o.departureNode):
arrivalNpareTo(o.arrivalNode);用户自定义数据类型用户自定义数据类型HadoopHadoop内置的文件输入格式内置的文件输入格式3.3.用户自定义输入输出格式用户自定义输入输出格式InputFormat:
InputFormat:
Description:
Description:
Key:
Key:
Value:
Value:
TextInputFormatDefaultformat;readslinesoftextfilesThebyteoffsetofthelineThelinecontentsKeyValueTextInputFormatParseslinesintokey-valpairsEverythinguptothefirsttabcharacterTheremainderofthelineSequenceFileInputFormatAHadoop-specifichigh-performancebinaryformatuser-defineduser-definedHadoopHadoop内置的文件输入格式内置的文件输入格式3.3.用户自定义输入输出格式用户自定义输入输出格式AutoInputFormat,CombineFileInutFormat,CompositeInputFormat,DBInputFormat,FileInputFormat,KeyValueTextInputFormat,LineDocInputFormat,MultiFileInputFormat,NLineInputFormat,SequenceFileAsBinaryInputFormat,SequenceFileAsTextInputFormat,SequenceFileInputFilter,SequenceFileInputFormat,StreamInputFormat,TextInputFormatHadoopHadoop内置的内置的RecordReaderRecordReaderRecordReaderRecordReader:
InputFormatInputFormatDescription:
Description:
LineRecordReaderdefaultreaderforTextInputFormatreadslinesoftextfilesKeyValueLineRecordReaderdefaultreaderforKeyValueTextInputFormatparseslinesintokey-valpairsSequenceFileRecordReaderdefaultreaderforSequenceFileInputFormatUser-definedmethodstocreatekeysandvalues用户自定义输入输出格式用户自定义输入输出格式HadoopHadoop内置的内置的RecordReaderRecordReader用户自定义输入输出格式用户自定义输入输出格式CombineFileRecordReader,DBInputFormat.DBRecordReader,InnerJoinRecordReader,JoinRecordReader,KeyValueLineRecordReader,LineDocRecordReader,MultiFilterRecordReader,OuterJoinRecordReader,OverrideRecordReader,SequenceFileAsBinaryInputFormat.SequenceFileAsBinaryRecordReader,SequenceFileAsTextRecordReader,SequenceFileRecordReader,StreamBaseRecordReader,StreamXmlRecordReader,WrappedRecordReader用户自定义用户自定义InputFormatInputFormat和和RecordReaderRecordReader示例示例简单的文档倒排索引importj