【问题标题】:Handling Images,Video and audio types using hbase使用 hbase 处理图像、视频和音频类型
【发布时间】:2016-12-15 09:21:19
【问题描述】:

任何人都有任何想法,如何使用 Hbase 处理音频、视频和图像等非结构化数据。我尝试了很多,但我没有得到任何想法。感谢任何帮助。

【问题讨论】:

  • “处理”是什么意思?如果可能,请分享您的用例以清楚说明。
  • 我们正在从相机中获取图像/视频。我们只需从 hadoop 中存储和检索这些图像/视频,无需任何处理。为此,哪个更好以及如何做。
  • 感谢您的回复。我需要在 hbase 中插入和访问图像/视频的示例代码。如果有,请与我分享。我试过但它在 hbase shell 中没有显示任何内容。
  • 任何人知道如何存储和访问请与我分享。我做了很多工作。但我没有得到任何正确的答案。感谢任何帮助。

标签: java hadoop hbase


【解决方案1】:
  • 选项1:将图像转换为字节数组,您可以准备put请求并插入到表中。同样的音视频文件也可以实现。

https://docs.oracle.com/javase/7/docs/api/javax/imageio/package-summary.html


import javax.imageio.ImageIO;

/*       * Convert an image to a byte array
         */
    private byte[] convertImageToByteArray (String ImageName)throws IOException {

        byte[] imageInByte;
        BufferedImage originalImage = ImageIO.read(new File(ImageName));

        // convert BufferedImage to byte array
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        ImageIO.write(originalImage, "jpg", baos);
        imageInByte = baos.toByteArray();
        baos.close();

        return imageInByte;
    }
  • 选项 2:您可以使用 Apache commons lang API. 以下列方式执行此操作,这可能是比上述最佳选项,适用于包括图像/音频/视频等在内的所有对象。这不仅可以使用对于 hbase,您也可以将其保存在 hdfs 中

更多详情请查看我的answer

例如:byte[] mediaInBytes = org.apache.commons.lang.SerializationUtils.serialize(Serializable obj)

为了反序列化,你可以这样做static Object deserialize(byte[] objectData)

请参阅上面链接中的文档..

SerializationUtils 的示例用法

import java.io.FileInputStream;
import java.io.FileOutputStream;

import org.apache.commons.lang.SerializationUtils;

public class SerializationUtilsTest {
  public static void main(String[] args) {
    try {
      // File to serialize object to it can be your image or any media file
      String fileName = "testSerialization.ser";

      // New file output stream for the file
      FileOutputStream fos = new FileOutputStream(fileName);

      // Serialize String
      SerializationUtils.serialize("SERIALIZE THIS", fos);
      fos.close();

      // Open FileInputStream to the file
      FileInputStream fis = new FileInputStream(fileName);

      // Deserialize and cast into String
      String ser = (String) SerializationUtils.deserialize(fis);
      System.out.println(ser);
      fis.close();
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}

注意:apache commons lang 的jar 在 hadoop 集群中始终可用。(不是外部依赖

【讨论】:

  • 我可以将此字节[] mediaInBytes 作为 put cmd 的值传递到 hbase 列中吗?
  • 我不擅长写java代码,你能告诉我如何以及在哪里将图像名称作为参数传递,以及如何将此字节[]作为arg传递给hbase列值。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-14
  • 1970-01-01
  • 1970-01-01
  • 2016-04-26
  • 2013-09-28
相关资源
最近更新 更多