用java程序把本地的一个文件拷贝到hdfs上并显示进度

把程序打成jar包放到Linux上

转到目录下执行命令 hadoop jar mapreducer.jar /home/clq/export/java/count.jar  hdfs://ubuntu:9000/out06/count/

上面一个是本地文件,一个是上传hdfs位置

成功后出现:打印出来,你所要打印的字符。

package com.clq.hdfs;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URI;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
import org.apache.hadoop.util.Progressable;

public class FileCopyWithProgress {
//********************************
//把本地的一个文件拷贝到hdfs上
//********************************
	public static void main(String[] args) throws IOException {
		String localSrc = args[0];
		String dst = args[1];
		InputStream in = new BufferedInputStream(new FileInputStream(localSrc));
		Configuration conf = new Configuration();
		FileSystem fs = FileSystem.get(URI.create(dst), conf);
		FSDataOutputStream out = fs.create(new Path(dst), new Progressable() {
			@Override
			public void progress() {
				System.out.print(".");
			}
		});
		IOUtils.copyBytes(in, out, conf, true);
	}

}

可能出现异常:

Exception in thread "main" org.apache.hadoop.ipc.RemoteException: java.io.IOException: Cannot create /out06; already exists as a directory

at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.startFileInternal(FSNamesystem.java:1569)

at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.startFile(FSNamesystem.java:1527)

at org.apache.hadoop.hdfs.server.namenode.NameNode.create(NameNode.java:710)

at org.apache.hadoop.hdfs.server.namenode.NameNode.create(NameNode.java:689)

at sun.reflect.GeneratedMethodAccessor7.invoke(Unknown Source)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:606)

at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:587)

at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1432)

at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1428)

at java.security.AccessController.doPrivileged(Native Method)

at javax.security.auth.Subject.doAs(Subject.java:415)

说明你这个路径在hdfs上已经存在,换一个即可。

用java程序把本地的一个文件拷贝到hdfs上并显示进度

时间: 2024-10-08 06:04:06

用java程序把本地的一个文件拷贝到hdfs上并显示进度的相关文章

软件测试第二次作业 - 写一个Java程序,用于分析一个字符串中各个单词出现的频率,并将单词和它出现的频率输出显示。

题目一: 1. 写一个Java程序,用于分析一个字符串中各个单词出现的频率,并将单词和它出现的频率输出显示.(单词之间用空格隔开,如“Hello World My First Unit Test”): 2. 编写单元测试进行测试: 3. 用ElcEmma查看代码覆盖率,要求覆盖率达到100%. Demo类: 1 import java.util.HashMap; 2 import java.util.Iterator; 3 import java.util.Map; 4 import java.

分享非常有用的Java程序 (关键代码) (二)---列出文件和目录

原文:分享非常有用的Java程序 (关键代码) (二)---列出文件和目录 File dir = new File("directoryName"); String[] children = dir.list(); if (children == null) { // Either dir does not exist or is not a directory } else { for (int i=0; i < children.length; i++) { // Get f

黑马程序员——IO——读取一个文件中的文字输出到控制台上

读取一个文件中的文字输出到控制台上 import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; //读取一个文件中的文字 ,输出到控制台上 //读取的是字符文字,因此可以使用字符流来操作 public class FileReaderDemos { public static void main(String[] args) { // TODO Auto-generate

【Java】windows下直接运行Java程序(利用bat运行jar文件)

这种方法只是掩耳盗铃,简化了运行jar的方式.并不是将Java代码打包成了exe文件. 具体步骤为,电脑上有JRE环境,然后利用bat文件包装一下运行jar的控制台语句,最后用C语言打包成exe文件. jar包有两种运行方式,一种为直接双击,直接双击需要配置注册表和环境变量才能运行jar包. 还有一种是在控制台运行,输入javaw -jar xxxx.所有的操作都需要Java环境. bat文件 bat是Windows下可以直接运行的批处理文件,编写也很简单. 新建一个txt文件,输入下面两行脚本

JAVA程序设计(17)----- 制作文件拷贝软件 进程 输入流输出流 NIO 进度条 底层拷贝 多线程

使用NIO对文件进行底层拷贝(按照字节)多线程技术初级应用 不阻塞程序运行 package com.lovo.homework01; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import

java.io,PrintWriter可以用来创建一个文件并向本文文件写入数据

PrintWriter(String filename); PrintWriter(File file);<!--创建一个向指定文件的新的PrintWriter--> PrintWriter(OutoutStream out); PrintWriter(OutoutStream out,Boolean antoflush);<!--创建一个中介输出流,创建一个向此输出流写入数据的新的PrintWriter--> PrintWriter(Writer out); PrintWrite

java程序压缩和解压zip文件

需要了解的知识汇总:DeflaterOutputStream :压缩类的基类.ZipOutputStream :DeflaterOutputStream的一个子类,把数据压缩成Zip文件格式GZIPOutputStream :DeflaterOutputStream的一个子类,把数据压缩成GZip文件格式 InflaterInputStream :解压缩类的基类ZipInputStream :InflaterInputStream的一个子类,能解压缩Zip格式的数据GZIPInputStream

《编写一个程序,从一个文件中读出字符串,并显示在屏幕上》

注意:在程序的第11行用fgets函数读入字符串时,指定一次读入10个字符,但按fgets函数的规定, 如果遇到“\n”就结束字符串输入,“\n”作为最后一个字符也读入到字符数组中 //编写一个程序,从f:\\FILE_1\\file_2.txt中读回字符串 #include<stdio.h>#include<string.h>#include<stdlib.h>int main(){ FILE *fp; char str[3][10]; int i=0; if((fp

Java程序如何生成Jar 执行文件

一.用Eclipse生产Jar文件 首先,看一下我的项目的目录结构: 1,项目名字上面点右键,选择Export,在选择java\JAR file,下一步:如下图: (2),选择,src文件夹,.classpath和.project可以去掉不选.Select the export distination(选择输出路径),下一步. (3),去掉Export class files withcompile errors(编译错误时也输出class文件)的选项,单击下一步. (4),在main clas