分享

hadoop 程序结束后把结果复制到本地文件

alu1105 2016-4-25 10:31:59 发表于 疑问解答 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 3 7400
代码如下:
mapreduce部分就是Wordcount  
运行结果是报错:file:///namenode:9000/out/part-r-00000 not exist
而我明明有 job.waitForCompletion(true); 等前面的完成,不太理解
路径的写法也尝试了很多种,这里应该没有问题的
public static  void main(String args[])throws Exception{  

     Configuration conf = new Configuration();  
        Job job = new Job(conf);  
        job.setJarByClass(WordCount.class);  
        job.setJobName("wordcount");  
  
        job.setOutputKeyClass(Text.class);  
        job.setOutputValueClass(IntWritable.class);  
  
        job.setMapperClass(WordCountMap.class);  
        job.setReducerClass(WordCountReduce.class);  
  
        job.setInputFormatClass(TextInputFormat.class);  
        job.setOutputFormatClass(TextOutputFormat.class);  
  
        FileInputFormat.addInputPath(job, new Path(args[0]));  
        FileOutputFormat.setOutputPath(job, new Path(args[1]));  
  
        job.waitForCompletion(true);  

//download from hdfs
                     Configuration conf1=new Configuration();
                     FileSystem fs=FileSystem.get(conf1);
                     Path local_path=new Path("usr/result");
                     Path fs_path=new Path("file:///namenode:9000/out/part-r-00000");
    fs.copyToLocalFile(true, fs_path, local_path);
    }求大神解答

已有(3)人评论

跳转到指定楼层
wscl1213 发表于 2016-4-25 10:46:50
                     Path fs_path=new Path("file:///namenode:9000/out/part-r-00000");
这个需要时hdfs路径,不能是本地路径

回复

使用道具 举报

alu1105 发表于 2016-4-25 13:18:03
wscl1213 发表于 2016-4-25 10:46
Path fs_path=new Path("file:///namenode:9000/out/part-r-00000");
这个需要时hd ...

但是如果我写hdfs的话 他就会提示要file:/// 这样的
回复

使用道具 举报

wscl1213 发表于 2016-4-25 16:08:03
楼主参考下面内容

copyToLocal

使用方法:hadoop fs -copyToLocal [-ignorecrc] [-crc] URI

除了限定目标路径是一个本地文件外,和get命令类似。

也可以用如下的程序可实现将HDFS上的文件下载到本地。

import java.net.URI;
import java.io.OutputStream;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
public class FileCopy2Local
{
public static void main(String[] args) throws Exception
{
  String dest = "hdfs://localhost:9000/user/laozhao0/cite2.txt";
  String local = "/home/laozhao0/cite2.txt";
  Configuration conf = new Configuration();
  FileSystem fs = FileSystem.get(URI.create(dest),conf);
  FSDataInputStream fsdi = fs.open(new Path(dest));
  OutputStream output = new FileOutputStream(local);
  IOUtils.copyBytes(fsdi,output,4096,true);
}
}

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条