我想将一些视频/图像存储到hadoop hdfs中,但我听说hdfs只接受文本等文件。当然,我们可以将视频/图像存储到hdfs中吗?如果是的话,有什么方法或步骤来做到这一点?
cwtwac6a1#
不做任何额外的事情是绝对可能的。hadoop为我们提供了读/写二进制文件的工具。因此,实际上任何可以转换成字节的东西都可以存储到hdfs(图像、视频等)中。为此,hadoop提供了sequencefiles。sequencefile是由二进制键/值对组成的平面文件。sequencefile提供了writer、reader和sorter类,分别用于写入、读取和排序。因此,您可以将图像/视频文件转换为seuence文件并将其存储到hdfs中。下面是一小段代码,它将获取图像文件并将其转换为sequencefile,其中文件名是键,图像内容是值:
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....!!!!!!!!!!"); } } }
如果您的目的是按原样转储文件,您只需执行以下操作:
bin/hadoop fs -put /src_image_file /dst_image_file
如果您的目的不仅仅是存储文件,那么您可能会发现hipi很有用。hipi是hadoop的mapreduce框架的库,它为在分布式计算环境中执行图像处理任务提供了api。hth公司
smdncfj32#
在hdfs上存储图像和视频是完全可能的,但是您可能需要使用/编写您自己的自定义文件 InputFormat , OutputFormat 以及 RecordReader 为了把它们分开。我想其他人也有类似的项目,但是,如果你搜索一下网络,你可能会发现有人已经编写了定制类来做你需要的事情。
InputFormat
OutputFormat
RecordReader
2条答案
按热度按时间cwtwac6a1#
不做任何额外的事情是绝对可能的。hadoop为我们提供了读/写二进制文件的工具。因此,实际上任何可以转换成字节的东西都可以存储到hdfs(图像、视频等)中。为此,hadoop提供了sequencefiles。sequencefile是由二进制键/值对组成的平面文件。sequencefile提供了writer、reader和sorter类,分别用于写入、读取和排序。因此,您可以将图像/视频文件转换为seuence文件并将其存储到hdfs中。下面是一小段代码,它将获取图像文件并将其转换为sequencefile,其中文件名是键,图像内容是值:
如果您的目的是按原样转储文件,您只需执行以下操作:
如果您的目的不仅仅是存储文件,那么您可能会发现hipi很有用。hipi是hadoop的mapreduce框架的库,它为在分布式计算环境中执行图像处理任务提供了api。
hth公司
smdncfj32#
在hdfs上存储图像和视频是完全可能的,但是您可能需要使用/编写您自己的自定义文件
InputFormat
,OutputFormat
以及RecordReader
为了把它们分开。我想其他人也有类似的项目,但是,如果你搜索一下网络,你可能会发现有人已经编写了定制类来做你需要的事情。