Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.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代码将文件上载和下载到hdfs_Java_Hadoop - Fatal编程技术网

如何使用Java代码将文件上载和下载到hdfs

如何使用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的新手,尝试通过将文件上传和下载到hdfs。Java代码。应该表现为

数据上传:

 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即可。这可能有助于: