如何使用Java代码将文件上载和下载到hdfs
我是hadoop的新手,尝试通过将文件上传和下载到hdfs。Java代码。应该表现为 数据上传:如何使用Java代码将文件上载和下载到hdfs,java,hadoop,Java,Hadoop,我是hadoop的新手,尝试通过将文件上传和下载到hdfs。Java代码。应该表现为 数据上传: hadoop fs -put or -copyFromLocal filename directoryName 及下载资料 hadoop fs -get or -copyToLocal filename directoryName 来自hdfs。我需要这个,因为数据集包含图像、音频、视频等文件。上述命令适用于所有类型的数据,如果我尝试使用Java i/o读卡器代码,它适用于文本文件,但不适
hadoop fs -put or -copyFromLocal filename directoryName
及下载资料
hadoop fs -get or -copyToLocal filename directoryName
来自hdfs。我需要这个,因为数据集包含图像、音频、视频等文件。上述命令适用于所有类型的数据,如果我尝试使用Java i/o读卡器代码,它适用于文本文件,但不适用于图像、视频。docx等
请在这里帮忙
此处编辑:
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
Configuration conf=new Configuration();
FileSystem fs = FileSystem.get(conf);
Path path=new Path("data");
Path file=new Path(path,"screenshots.png");
BufferedImage image = ImageIO.read(new File("/home/hduser/Desktop/screenshots.png"));
if (!fs.exists(path))
throw new IOException("Output not found!");
ImageIO.write(image, "png", fs.open(path));
}
我在这里编辑了我用来将图像文件上传到hdfs的代码。此处
ImageIO.write
不接受参数fs.open(path)
,因为请求文件,但我必须在此处给出路径,以便读取和写入hdfs,我们只需要给出路径。实际上,我需要一种方法从hdfs上传和下载文件,对所有类型的数据使用代码,所以我不应该为所有类型的文件编写代码和使用插件。ImageIO.write可以获取输出流和文件。但是,fs.open正在返回InputStream,因为它仅用于读取文件
您需要拨打:
ImageIO.write(image, "png", fs.create(file));
create方法将返回ImageIO可以写入的OutputStream
路径
已经存在,您将用图像覆盖该文件。我认为您希望将图像保存到HDFS
中的某个现有文件夹中。在这种情况下,您需要将图像写入新路径(路径,“SomeImageName.png”)代码>
ImageIO
将图像从本地文件系统复制到HDFS
。尝试使用FileSystem
的copyFromLocalFile
方法:
fs.copyFromLocalFile(新路径(“/home/hduser/Desktop/screenshots.png”),路径)请显示您试图使用的代码,并告诉我们您认为它不起作用的确切原因。谢谢您的回复。我已经编辑了这个问题。如果您熟悉Spring,那么您可以使用它,它将使用groovy文件将输入文件移动到hdfs中,并以JobiPaolo的身份运行您的Map Reduce,它可以工作。。你能告诉我,我应该用什么来上传所有类型的文件到hdfs和从hdfs下载,而不需要为所有类型的文件格式编写代码+1只需使用标准Java FileInputStream打开您想要的任何文件,读取它并将输出写入HDFS outputstream即可。这可能有助于: