这里的第一个问题......并且学习hadoop ......
我花了两周的时间试图了解有关hadoop的一切,但似乎每座山都有一座山。
以下是设置:
我发现XmlInputFormat(“Mahout XMLInputFormat”)是阅读文件的良好起点,因为我可以将整个XML文档指定为
我的理解是XmlInputFormat将负责确保每个文件都是它自己的记录(每个文件/记录存在1个标记)。
我的问题是:我想使用Hadoop处理每个文档,搜索信息,然后为每个文件/记录,重写或输出添加了新xml标记的新xml文档。
不怕阅读和学习,但玩耍的骨架真的可以帮助我'玩'并学习hadoop
这是我的司机:
public static void main(String[] args) {
JobConf conf = new JobConf(myDriver.class);
conf.setJobName("bigjob");
// Input/Output Directories
if (args[0].length()==0 || args[1].length()==0) System.exit(-1);
FileInputFormat.setInputPaths(conf, new Path(args[0]));
FileOutputFormat.setOutputPath(conf, new Path(args[1]));
conf.set("xmlinput.start", "<document>");
conf.set("xmlinput.end", "</document>");
// Mapper & Combiner & Reducer
conf.setMapperClass(Mapper.class);
conf.setReducerClass(Reduce.class);
conf.setNumReduceTasks(0);
// Input/Output Types
conf.setInputFormat(XmlInputFormat.class);
conf.setOutputFormat(?????);
conf.setOutputKeyClass(????);
conf.setOutputValueClass(????);
try {
JobClient.runJob(conf);
} catch (Exception e) {
e.printStackTrace();
}
}
答案 0 :(得分:0)
我想说一个简单的解决方案是使用TextOutputFormat
,然后使用Text
作为输出键,NullWritable
作为输出值。
TextOutputFormat
使用分隔符分隔您从作业输出的键和值对。根据您的要求,您不需要这种安排,但您只想输出单个XML体。如果传递null或NullWritable作为输出键或值,TextOutputFormat
将不会写入null或分隔符,只会写入非null键或值。
使用XmlINputFormat的另一种方法是使用WholeFileInput(详见Tom White的 Hadoop - 权威指南)。
无论如何,您需要编写映射器以使用输入值Text对象(可能使用XML SAX或DOM解析器),然后将转换后的XML输出为Text对象。