首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将图像/视频存储到Hadoop HDFS中

将图像/视频存储到Hadoop HDFS中
EN

Stack Overflow用户
提问于 2013-05-14 22:35:36
回答 2查看 33.4K关注 0票数 12

我想存储一些视频/图像到Hadoop,但我听说HDFS只接受像文本这样的文件。

可以肯定的是,我们能否将视频/图像存储到HDFS中?如果是,那么实现这一目标的方法或步骤是什么?

EN

回答 2

Stack Overflow用户

发布于 2013-05-14 22:56:25

这是完全有可能的,而不需要做任何额外的事情。Hadoop为我们提供了读/写二进制文件的工具。因此,几乎任何可以转换为字节的东西都可以存储到HDFS中(图像、视频等)。为了做到这一点,Hadoop提供了一种叫做SequenceFiles的东西。SequenceFile是由二进制密钥/值对组成的平面文件。SequenceFile提供了一个写入器、读取器和分类器类,分别用于写入、读取和排序。因此,您可以将图像/视频文件转换为SeuenceFile并将其存储到HDFS中。下面是一小段代码,它将获取图像文件并将其转换为SequenceFile,其中文件的名称是键,图像内容是值:

代码语言:javascript
复制
public class ImageToSeq {
    public static void main(String args[]) throws Exception {

        Configuration confHadoop = new Configuration();     
        confHadoop.addResource(new Path("/hadoop/projects/hadoop-1.0.4/conf/core-site.xml"));
        confHadoop.addResource(new Path("/hadoop/projects/hadoop-1.0.4/conf/hdfs-site.xml"));   
        FileSystem fs = FileSystem.get(confHadoop);
        Path inPath = new Path("/mapin/1.png");
        Path outPath = new Path("/mapin/11.png");
        FSDataInputStream in = null;
        Text key = new Text();
        BytesWritable value = new BytesWritable();
        SequenceFile.Writer writer = null;
        try{
            in = fs.open(inPath);
            byte buffer[] = new byte[in.available()];
            in.read(buffer);
            writer = SequenceFile.createWriter(fs, confHadoop, outPath, key.getClass(),value.getClass());
            writer.append(new Text(inPath.getName()), new BytesWritable(buffer));
        }catch (Exception e) {
            System.out.println("Exception MESSAGES = "+e.getMessage());
        }
        finally {
            IOUtils.closeStream(writer);
            System.out.println("last line of the code....!!!!!!!!!!");
        }
    }
}

如果您的意图是直接转储文件,则可以简单地执行以下操作:

代码语言:javascript
复制
bin/hadoop fs -put /src_image_file /dst_image_file

如果您的目的不仅仅是存储文件,那么您可能会发现HIPI很有用。HIPI是一个用于Hadoop框架的库,它提供了在分布式计算环境中执行图像处理任务的MapReduce。

HTH

票数 23
EN

Stack Overflow用户

发布于 2013-05-14 22:43:55

在HDFS上存储图像和视频是完全可能的,但您可能需要使用/编写您自己的自定义InputFormatOutputFormatRecordReader,以便正确地拆分它们。

我想其他人已经承担了类似的项目,所以如果你搜索一下网络,你可能会发现有人已经编写了定制类来做你需要的事情。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16546040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档