将JSON文件从Local复制到HDFS

时间:2017-10-27 16:23:16

标签: java hadoop mapreduce hdfs

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.OutputStream;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.conf.Configured;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner;

public class HdfsWriter extends Configured implements Tool {
 public int run(String[] args) throws Exception {
  //String localInputPath = args[0];
  Path outputPath = new Path(args[0]); // ARGUMENT FOR OUTPUT_LOCATION
  Configuration conf = getConf();
  FileSystem fs = FileSystem.get(conf);
  OutputStream os = fs.create(outputPath);
  InputStream is = new BufferedInputStream(new FileInputStream("/home/acadgild/acadgild.txt")); //Data set is getting copied into input stream through buffer mechanism.
  IOUtils.copyBytes(is, os, conf); // Copying the dataset from input stream to output stream
  return 0;
 }

 public static void main(String[] args) throws Exception {
  int returnCode = ToolRunner.run(new HdfsWriter(), args);
  System.exit(returnCode);
 }
}

需要将数据从Local移动到HDFS。

我从另一个博客上面得到的上述代码,它不起作用。任何人都可以帮助我。

此外,我需要使用MR解析Json并按DateTime分组并移至HDFS

1 个答案:

答案 0 :(得分:0)

  1. Map Reduce是一个分布式作业处理框架
  2. 对于每个映射器,local表示运行该映射器的节点上的本地filesytem。
  3. 你想要的是从给定节点上的本地读取要放到HDFS然后通过MapReduce处理它。
  4. 有多种工具可用于从一个节点的本地复制到HDFS

    1. hdfs put localPath HdfsPath(Shell脚本)
    2. flume