巧用复合键让系统完成排序 丶Map计算过程中,系统自动按照Map的输出键进行排序, 因此进入 Reduce的键值对都是按照key值排序的,但有时 希望vaue也按一定规则排序。 方法1:在 Reduce过程中对{aue刚表中的值进行 本地排序,但当{ value刚列表数据量巨大时 必须使用复杂的外排算法,会很耗时。 方法2:将vaue中需要排序的部分加入到key中, 形成复合键,这样能利用 Mapreduce系统 的排序功能自动完成排序
Map计算过程中,系统自动按照Map的输出键进行排序, 因此进入Reduce的键值对都是按照key值排序的,但有时 希望value也按一定规则排序。 方法1:在Reduce过程中对{value}列表中的值进行 本地排序,但当{value}列表数据量巨大时 必须使用复杂的外排算法,会很耗时。 方法2:将value中需要排序的部分加入到key中, 形成复合键,这样能利用MapReduce系统 的排序功能自动完成排序
用户定制数据类型 Hadoop内置的数据类型 Booleanwritable:标准布尔型数值 ByteWritable:单字节数值 Doublewritable:双字节数 F| oatwritab|e:浮点数 wrItable:整型数 LongWritable:长整型数 Text:使用UTF8格式存储的文本 Nullwritable:当<key,vaue>中的key或vaue为空时使用
Hadoop内置的数据类型 BooleanWritable:标准布尔型数值 ByteWritable:单字节数值 DoubleWritable:双字节数 FloatWritable:浮点数 IntWritable:整型数 LongWritable:长整型数 Text:使用UTF8格式存储的文本 NullWritable:当<key, value>中的key或value为空时使用
用户定制数据类型 自定义数据类型的实现 0首先实现 Writable接口,以便该数据能被序列化后完成 网络传输或文件输入/输出 其次,如果该数据需要作为key使用,或者要比较数值 大小时,则需要实现 Writable comparable接囗 例如将一个三维坐标PX,y,z)定制为一个数据类型 pubic class Point3D implements Writable< Point3D> private float x,y, Z public void readFields(DataInput in) throws IOException public void write(DataOutput out) throws IOException
自定义数据类型的实现 ◦ 首先实现Writable接口,以便该数据能被序列化后完成 网络传输或文件输入/输出; ◦ 其次,如果该数据需要作为key使用,或者要比较数值 大小时,则需要实现 WritableComparable接口。 ◦ 例如将一个三维坐标P(x,y,z)定制为一个数据类型 pubic class Point3D implements Writable<Point3D> { private float x,y,z; public void readFields(DataInput in) throws IOException {……} public void write(DataOutput out) throws IOException {……} }
用户定制数据类型 如果 Point3D还需要作为主键值使用,或者需要比 较大小时,还应该实现 Writab| e comparable接口 pubic class Point 3D implements Writable Comparable< Point3D> private float x, y, z public void read Fields(Datainput in) throws IoException public void write(Data Output out) throws IOException
如果Point3D还需要作为主键值使用,或者需要比 较大小时,还应该实现WritableComparable接口 pubic class Point3D implements WritableComparable<Point3D> { private float x,y,z; public void readFields(DataInput in) throws IOException {……} public void write(DataOutput out) throws IOException {……} }
用户定制输入/输出格式 Hadoop内置数据输入格式和 RecordReader TextInputFormat:是系统默认的数据输入格式,可以文 本文件分块逐行读入,读入一行时,所产生的kye为当前 行在整个文件中的字节偏移位置,而 ivalue就是行内容。 KeyvalueInputFormat:是另一个常用的数据输入格式, 可将一个安照<key, value>格式逐行存放的文件逐行读 出,并自动解析成相应的key和va|ue
Hadoop内置数据输入格式和RecordReader ◦ TextInputFormat:是系统默认的数据输入格式,可以文 本文件分块逐行读入,读入一行时,所产生的kye为当前 行在整个文件中的字节偏移位置,而value就是行内容。 ◦ KeyValueInputFormat:是另一个常用的数据输入格式, 可将一个安照<key, value>格式逐行存放的文件逐行读 出,并自动解析成相应的key和value