Hadoop开发

命令行下-conf用于指定配置文件
例如
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































  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值