如何在 Impala 中存储图像文件

How to store Image file in Impala

我在本地系统中有一个图像文件(jpg 或 jpeg),我想存储在 Impala 数据库中,请帮助我,我该怎么做?

我认为您有几种解决方法,具体取决于您的具体要求。

1.使用配置单元

Hive 允许您在 Hive 中存储二进制数据 'database'。 Hive 类似于 Impala,虽然通常速度较慢但功能更多。 您可以在 table 定义中使用数据类型 BINARY,并使用 LOAD DATA 加载图像。 这样的东西可能会起作用(未经测试)。

Create table images (picture binary); 
LOAD DATA LOCAL inpath 'x/y/image.jpg' INTO TABLE images;

2。使用 Impala

Impaladoes not allow binary data。您可以做的是使用序列化-反序列化方法。这意味着您将图像转换为 String 格式,该格式仍包含将其转换回来所需的所有信息。一旦您需要在 HDFS 上检索图像,您将需要反序列化,这意味着将字符串转换为原始格式。

例如使用 Python 这将像这样工作:

import base64

def img_to_string(image_path):
    with open(image_path, "rb") as imageFile:
        image_string= base64.b64encode(imageFile.read())
        print image_string

def string_to_img(image_string):
    with open("new_image.png", "wb") as imageFile:
        imageFile.write(str.decode('base64'))

3。仅使用 HDFS

通常不需要将数据存储在数据库中。您可以做的只是将图像放在 HDFS 中。如有必要,您可以将 HDFS 文件路径保存在数据库中。然后,您可以使用 Impala 查询检索路径。 从远程位置获取文件需要您 运行 以下内容(更多信息 ):

ssh <user>@<host> "hadoop fs -get <hdfs_path> <os_path>"
then scp command to copy files