Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将映射器中的内容写入文件-Hadoop_Java_Hadoop_Mapreduce - Fatal编程技术网

Java 如何将映射器中的内容写入文件-Hadoop

Java 如何将映射器中的内容写入文件-Hadoop,java,hadoop,mapreduce,Java,Hadoop,Mapreduce,如何将映射器的内容写入文件。这样好吗 public class MyMapper extends Mapper<Object, Text, Text, MatrixWritable > { public void map(Object key, Text value, Context context) throws IOException, InterruptedException { Configuration conf = new Co

如何将映射器的内容写入文件。这样好吗

public class MyMapper extends
        Mapper<Object, Text, Text, MatrixWritable > {
public void map(Object key, Text value, Context context)
            throws IOException, InterruptedException {

 Configuration conf = new Configuration();
  FileSystem fs = FileSystem.get(conf);

  Path inputfile = new Path("in/map");
  BufferedWriter getdatabuffer = new BufferedWriter(new OutputStreamWriter(fs.create(inputfile)));
  if(value.toString()!= null){
             getdatabuffer.write(value.toString());
         }
             getdatabuffer.close();

映射器任务在Hadoop集群中的多个节点上并发运行。仅仅因为需要使用HDFSAPI来编写数据,使用普通Java编写器类编写的方法将无法工作


相反,在map方法中,使用
context.write()
将数据写入HDFS文件。

Thanxs-Ankur。在mapper中读取文件后,我正在做进一步的计算。我需要知道上面的代码是否适合输入spilts?哦,好的。但是我想知道为什么使用上面的代码在集群中的100 KB文件中成功运行。但我尝试使用90 MB的文件时,它给了我租约不匹配的异常。我不确定这一点,但在您的第一个案例中,似乎只创建了一个映射器任务,因为数据非常小,但是在第二个例子中,会产生多个任务。这可能是Ankur的原因。那么如何使用HDFS API编写数据呢?无论如何,我会尝试更改,看看它是否有效。不一定。您可以将作业配置为将映射器输出写入HDFS。此外,您还可以仅使用贴图器(无还原器)进行贴图还原作业。这通常用于执行某种连接操作,通常称为“映射器端连接”。
        Path inputfile = new Path("in/map");
             FSDataOutputStream out = fs.create(inputfile);
         if(value.toString()!= null){
            out.writeBytes(value.toString());
         }
            out.close();