命令行下-conf用于指定配置文件
例如
1.hadoop自带工具支持-conf选项
2.直接在程序中实现Tool接口支持-conf选项
Tool接口只有一个抽象方法run(),而Tool接口又继承Configurable接口,Configurable接口有setConf()抽象方法和一个抽象构造函数
查看配置
运行例子程序会输出
想要过滤其中一项,使用grep即可
设置配置
使用 -D 即可,注意和java设置属性不同,-D和后面的属性要有空格。注意,这里设置的属性的优先级比在配置文件中的优先级更大,会覆盖配置文件中的优先级
GenericOptionsParser选项和ToolRunner选项
-D property=value 设置属性
-conf filename 设置加载的配置文件
-fs uri 根据uri设置默认文件系统,是-D fs.default.name=uri的快捷方式
-jt host:port 用主机和端口设置jobtracker,是-D mapred.job.tracker=host:port的快捷方式
-files file1,file2,... 从本地复制文件到jobtracker所用的共享文件系统
-archives archive1,archive2,...从本地复制存档文件到jobtracker所用的共享文件系统
-libjars jar1,jar2,... 从本地文件系统复制指定jar包到jobtracker使用的共享文件系统
作业输出信息
作业id、任务id、task attempt id
作业id包含两部分:jobtracker开始的时间 + jobtracker标识此作业的增量计数器
例如:job_201311170113_0001
ps:当计数器达到10000后不能重新设置,这个id就会越来越长
任务属于作业,它会替换作业id的前缀,然后加上一个后缀表示哪个作业的任务
例如:task_201311170113_0001_m_000001,表示作业id为job_201311170113_0001的第二个任务(从0开始)
由于失败或者推测执行,一个任务可以执行多次。如此就需要表示表示一个任务的多个不同实例,这就是task attempt的作用。
例如:attempt_201311170113_0001_0表示任务task_201311170113_0001的第一个attempt(从0开始)
ps:如果jobtracker重启并恢复运行作业后,作业被重启,那么task attempt ID中最后的计数值从1000递增
作业历史
作业历史包括已完成作业的事件和配置信息。作业历史可以用来实现jobtracker重启后的作业恢复。作业历史文件放在jobtracker本地文件系统中的history子目录中。可以通过配置hadoop.job.history.location属性来设置历史文件存放在hadoop文件系统的任意位置。jobtracker的历史文件会保存30天,随后由系统删除。
_logs/history目录存放第二份备份。这个可以通过hadoop.job.history.location来配置。如果为none,则不保存。
结果的获取
输出文件文件名格式为part-*****
可以使用hadoop fs -getmerge命令选项得到源模式目录中的所有文件,并在本地系统上把它们合并成一个单独的文件
例如:
作业调试
由于在集群环境下不能确定日志打到哪台机器。处理方法是用一个调试语句记录到标准错误中,他将发送信息来更新任务的状态以提示我们查看错误日志,WebUI简化这个操作。
如果产生的日志规模较大。有两个选择:1.将这些信息写到map的输出流供reduce分析和汇总,而不是写到标准的标准错误流。这种方法通常必须改变程序结构。2.编写一个程序(MapReduce程序)来分析作业产生的日志。
例如,将调试语句加到Mapper中
日志
1.通过web界面查看
2.在task attepmtm目录下放有日志文件。除了Streaming方式下,任何错误输出或是错误输出都会写到相关日志中。
MapReduce工作流
当MapReduce应用更加复杂的时候,即更多的作业。这时可以考虑使用比MapReduce更加高级的语言,比如Pig、Hive、Cascading
例如
hadoop fs -conf conf/hadoop-cluster.xml -ls
1.hadoop自带工具支持-conf选项
2.直接在程序中实现Tool接口支持-conf选项
Tool接口只有一个抽象方法run(),而Tool接口又继承Configurable接口,Configurable接口有setConf()抽象方法和一个抽象构造函数
查看配置
运行例子程序会输出
linux-vhx8:/home/maclaren/softs/hadoop/bin # sh hadoop jar configurationPrinter.jar com.mclaren.hadoop.hadoopguide.chapter5/ConfigurationPrinter
config file:Configuration: core-default.xml, core-site.xml, hdfs-default.xml, hdsf-site.xml, mapred-default.xml, mapred-site.xml
io.map.index.skip=0
io.seqfile.compress.blocksize=1000000
mapred.task.profile.maps=0-2
keep.failed.task.files=false
...
想要过滤其中一项,使用grep即可
linux-vhx8:/home/maclaren/softs/hadoop/bin # sh hadoop jar configurationPrinter.jar com.mclaren.hadoop.hadoopguide.chapter5/ConfigurationPrinter | grep mapred.job.tracker=
mapred.job.tracker=hbase:9001
设置配置
使用 -D 即可,注意和java设置属性不同,-D和后面的属性要有空格。注意,这里设置的属性的优先级比在配置文件中的优先级更大,会覆盖配置文件中的优先级
例如
sh hadoop jar configurationPrinter.jar com.mclaren.hadoop.hadoopguide.chapter5/ConfigurationPrinter -D color=red
GenericOptionsParser选项和ToolRunner选项
-D property=value 设置属性
-conf filename 设置加载的配置文件
-fs uri 根据uri设置默认文件系统,是-D fs.default.name=uri的快捷方式
-jt host:port 用主机和端口设置jobtracker,是-D mapred.job.tracker=host:port的快捷方式
-files file1,file2,... 从本地复制文件到jobtracker所用的共享文件系统
-archives archive1,archive2,...从本地复制存档文件到jobtracker所用的共享文件系统
-libjars jar1,jar2,... 从本地文件系统复制指定jar包到jobtracker使用的共享文件系统
作业输出信息
linux-vhx8:/home/maclaren/softs/hadoop/bin # sh maxTemp1Run.sh
13/11/17 02:16:17 INFO mapred.FileInputFormat: Total input paths to process : 1
13/11/17 02:16:19 INFO mapred.JobClient: Running job: job_201311170113_0001
13/11/17 02:16:20 INFO mapred.JobClient: map 0% reduce 0%
13/11/17 02:16:47 INFO mapred.JobClient: map 100% reduce 0%
13/11/17 02:16:56 INFO mapred.JobClient: map 100% reduce 33%
13/11/17 02:17:02 INFO mapred.JobClient: map 100% reduce 100%
13/11/17 02:17:04 INFO mapred.JobClient: Job complete: job_201311170113_0001
13/11/17 02:17:04 INFO mapred.JobClient: Counters: 18
13/11/17 02:17:04 INFO mapred.JobClient: Job Counters
13/11/17 02:17:04 INFO mapred.JobClient: Launched reduce tasks=1
13/11/17 02:17:04 INFO mapred.JobClient: Launched map tasks=2
13/11/17 02:17:04 INFO mapred.JobClient: Data-local map tasks=2
13/11/17 02:17:04 INFO mapred.JobClient: FileSystemCounters
13/11/17 02:17:04 INFO mapred.JobClient: FILE_BYTES_READ=17
13/11/17 02:17:04 INFO mapred.JobClient: HDFS_BYTES_READ=160
13/11/17 02:17:04 INFO mapred.JobClient: FILE_BYTES_WRITTEN=104
13/11/17 02:17:04 INFO mapred.JobClient: HDFS_BYTES_WRITTEN=9
13/11/17 02:17:04 INFO mapred.JobClient: Map-Reduce Framework
13/11/17 02:17:04 INFO mapred.JobClient: Reduce input groups=1
13/11/17 02:17:04 INFO mapred.JobClient: Combine output records=1
13/11/17 02:17:04 INFO mapred.JobClient: Map input records=1
13/11/17 02:17:04 INFO mapred.JobClient: Reduce shuffle bytes=23
13/11/17 02:17:04 INFO mapred.JobClient: Reduce output records=1
13/11/17 02:17:04 INFO mapred.JobClient: Spilled Records=2
13/11/17 02:17:04 INFO mapred.JobClient: Map output bytes=9
13/11/17 02:17:04 INFO mapred.JobClient: Map input bytes=106
13/11/17 02:17:04 INFO mapred.JobClient: Combine input records=1
13/11/17 02:17:04 INFO mapred.JobClient: Map output records=1
13/11/17 02:17:04 INFO mapred.JobClient: Reduce input records=1
作业id、任务id、task attempt id
作业id包含两部分:jobtracker开始的时间 + jobtracker标识此作业的增量计数器
例如:job_201311170113_0001
ps:当计数器达到10000后不能重新设置,这个id就会越来越长
任务属于作业,它会替换作业id的前缀,然后加上一个后缀表示哪个作业的任务
例如:task_201311170113_0001_m_000001,表示作业id为job_201311170113_0001的第二个任务(从0开始)
由于失败或者推测执行,一个任务可以执行多次。如此就需要表示表示一个任务的多个不同实例,这就是task attempt的作用。
例如:attempt_201311170113_0001_0表示任务task_201311170113_0001的第一个attempt(从0开始)
ps:如果jobtracker重启并恢复运行作业后,作业被重启,那么task attempt ID中最后的计数值从1000递增
作业历史
作业历史包括已完成作业的事件和配置信息。作业历史可以用来实现jobtracker重启后的作业恢复。作业历史文件放在jobtracker本地文件系统中的history子目录中。可以通过配置hadoop.job.history.location属性来设置历史文件存放在hadoop文件系统的任意位置。jobtracker的历史文件会保存30天,随后由系统删除。
_logs/history目录存放第二份备份。这个可以通过hadoop.job.history.location来配置。如果为none,则不保存。
结果的获取
输出文件文件名格式为part-*****
可以使用hadoop fs -getmerge命令选项得到源模式目录中的所有文件,并在本地系统上把它们合并成一个单独的文件
例如:
sh hadoop fs -getmerge output output_local
sort output_local | tail
作业调试
由于在集群环境下不能确定日志打到哪台机器。处理方法是用一个调试语句记录到标准错误中,他将发送信息来更新任务的状态以提示我们查看错误日志,WebUI简化这个操作。
如果产生的日志规模较大。有两个选择:1.将这些信息写到map的输出流供reduce分析和汇总,而不是写到标准的标准错误流。这种方法通常必须改变程序结构。2.编写一个程序(MapReduce程序)来分析作业产生的日志。
例如,将调试语句加到Mapper中
public class MaxTemperatureMapper extends MapReduceBase
implements Mapper<LongWritable, Text, Text IntWritable> {
enum Temperature {
OVER_100
}
private NcdcRecordParser parser = new NcdcRecordParser();
public void map(LongWritable key, Text key,
OutputCollector<Text, IntWritable> output, Reporter reporter)
throws IOException
{
parser.parse(value);
if (parser.isValidTemperature()) {
int airTemperature = parser.getAirTemperature();
if (airTemperature > 1000) {
System.err.println("Temperature over 100 degrees for input:" + value);
reporter.setStatus("Detected possibly corrupt record:see logs.");
reporter.incrCounter(Temperature.OVER_100, 1);
}
output.collect(new Text(parser.getYear()), new IntWritable(airTemperature));
}
}
}
日志
1.通过web界面查看
2.在task attepmtm目录下放有日志文件。除了Streaming方式下,任何错误输出或是错误输出都会写到相关日志中。
MapReduce工作流
当MapReduce应用更加复杂的时候,即更多的作业。这时可以考虑使用比MapReduce更加高级的语言,比如Pig、Hive、Cascading