我有一个猪脚本,有一些计算重的部分;我希望关闭这些部分并使用一些优化的MapReduce作业运行它们。
我认为MapReduce作业直接读取和写入Pig用于存储中间结果的相同数据格式是完美的,以避免无用的转换。
我正在考虑使用org.apache.pig.builtin.BinStorage
存储功能存储数据。
我的问题是我不知道如何从MapReduce作业中读取该格式。
我尝试使用此代码:
public class WordCount {
public static class Map extends MapReduceBase implements Mapper<NullWritable, BinSedesTuple, Text, IntWritable> {
public void map(NullWritable key, BinSedesTuple value, OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException {
//do something
}
}
public static class Reduce extends MapReduceBase implements Reducer<Text, IntWritable, Text, IntWritable> {
public void reduce(Text key, Iterator<IntWritable> values, OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException {
//do something
}
}
public static void main(String[] args) throws Exception {
//......
conf.setInputFormat(SequenceFileInputFormat.class);
conf.setOutputFormat(SequenceFileOutputFormat.class);
//.....
}
}
但是我收到了这个错误:
java.io.IOException: hdfs://localhost:54310/user/path/to/part-m-00000 not a SequenceFile
at org.apache.hadoop.io.SequenceFile$Reader.init(SequenceFile.java:1517)
at org.apache.hadoop.io.SequenceFile$Reader.<init>(SequenceFile.java:1490)
at org.apache.hadoop.io.SequenceFile$Reader.<init>(SequenceFile.java:1479)
at org.apache.hadoop.io.SequenceFile$Reader.<init>(SequenceFile.java:1474)
at org.apache.hadoop.mapred.SequenceFileRecordReader.<init>(SequenceFileRecordReader.java:43)
at org.apache.hadoop.mapred.SequenceFileInputFormat.getRecordReader(SequenceFileInputFormat.java:59)
at org.apache.hadoop.mapred.MapTask$TrackedRecordReader.<init>(MapTask.java:191)
at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:412)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:366)
at org.apache.hadoop.mapred.Child$4.run(Child.java:255)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:415)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1190)
at org.apache.hadoop.mapred.Child.main(Child.java:249)
有人知道如何使其发挥作用吗?
答案 0 :(得分:0)
Pig默认不输出序列文件,因此您有两个选项:
hadoop fs -text /user/path/to/part-m-00000 | head
)