Hadoop Job Scheduler
1、hadoop默认的调度器是基于队列的FIFO调度器
所有用户的作业都被提交到一个队列中,然后由jobTracker先按照作业的优先级高低,再按照作业提交
时间的先后顺序选择将被执行的作业。
优点:调度算法简单明了,JobTracker工作负担轻
缺点:忽略了不同作业的需求差异
2、还用俩个多用户调度器
--Fair Scheduler(公平调度器)
--Capacity Schedule(计算能力调度)
Fair Scheduler(公平调度器)
多个Pool,Job需要被提交到某个Pool中
每个pool可以设置最小task slot,称为miniShare
FS会保证Pool的公平
Pool内部支持Priority设置
支持资源抢占
mapreduce的数据类型与java的数据类型
java的基本类型 Writable
boolean --->BooleanWritable
byte ---->WyteWritable
int ---->IntWritable
float ---->FloatWritable
long ---->LongWritable
double ----> DoubleWritable
String ------>Text
Writable接口
1、对java中的int型进行封装那么就是hadoop中的IntWritable
在写程序的时候可以把IntWritable可以看成是int类型
它实现了WritableComparable接口。
WritableComparable又是Writable、java.lang.comparable接口的子接口。
2、Writable类对所有的java基本类型进行了封装:
如:boolean --->BooleanWritable,byte-->byteWritable
3、我们可以自定义Writable接口,来编写更复杂的结构的类。
核心:hadoop有自己一套的I/O机制,I/O类都必须实现Writable接口
自定义IO类
package com.hadoop.test; import java.io.DataInput; import java.io.DataOutput; import java.io.IOException; import org.apache.hadoop.io.Writable; /** * 自定义数据类型 * @author lenovo * */ public class Kangfei implements Writable { private int id; private String name; @Override public void readFields(DataInput out) throws IOException { int = out.readInt(); name = out.readUTF(); } @Override public void write(DataOutput in) throws IOException { in.write(id); in.writeUTF(name); } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
mapreduce驱动默认的设置
InputForamt(输入) TextInputForamt
MapperClass IdentityMapper
MapRunnerClass MapRunner
MapOutputKeyClass LongWritable
MapOutputValueClass Text
PartitionerClass HashPartitioner
ReduceClass IdentityReduce
OutputKeyClass LongWritable
OutputValueClass Text
OutputFormatClass TextOutputFormat