Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.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
Database 如何在Impala中存储图像文件_Database_Image_Hadoop_Hdfs_Impala - Fatal编程技术网

Database 如何在Impala中存储图像文件

Database 如何在Impala中存储图像文件,database,image,hadoop,hdfs,impala,Database,Image,Hadoop,Hdfs,Impala,我在本地系统中有一个图像文件(jpg或jpeg),我想存储在Impala数据库中,请帮助我如何做到这一点?我认为您有几种解决方法,具体取决于您的具体要求 1。使用蜂箱 配置单元允许您在配置单元“数据库”中存储二进制数据。蜂巢与黑斑羚相似,虽然通常速度较慢,但功能更强。 您可以在表定义中使用数据类型二进制,并使用加载数据加载图像。 类似的东西可能会起作用(未经测试) 2。使用黑斑羚 黑斑羚。您可以使用序列化-反序列化方法。这意味着您将图像转换为字符串格式,该格式仍然包含转换回图像所需的所有信息。一

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

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

1。使用蜂箱

配置单元允许您在配置单元“数据库”中存储二进制数据。蜂巢与黑斑羚相似,虽然通常速度较慢,但功能更强。 您可以在表定义中使用数据类型
二进制
,并使用
加载数据
加载图像。 类似的东西可能会起作用(未经测试)

2。使用黑斑羚

黑斑羚。您可以使用序列化-反序列化方法。这意味着您将图像转换为字符串格式,该格式仍然包含转换回图像所需的所有信息。一旦需要在HDFS上检索图像,就需要进行反序列化,这意味着将字符串转换为原始格式

例如,使用Python,其工作原理如下:

导入base64
def img_至_字符串(图像路径):
打开(图像路径“rb”)作为图像文件:
image\u string=base64.b64encode(imageFile.read())
打印图像字符串
def字符串到img(图像字符串):
打开(“new_image.png”、“wb”)作为图像文件:
imageFile.write(str.decode('base64'))
3。仅使用HDFS

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

ssh@“hadoop fs-get”
然后使用scp命令复制文件

是否要将图像存储在HDFS中,并在“数据库”中保留对其的引用。还是需要数据库中的实际内容?如果是第二个,而您无法使用Hive将其存储为二进制数据,则必须找到一种方法,使用Impala将内容存储为字符串,HDFS或数据库都可以,但我想知道如何检索图像。我认为有三种方法可以实现这一点。1.您找到了将图像转换为字符串以输入数据库的方法,并使用相同的方法在检索时从字符串转换为图像。(序列化程序反序列化程序)2。您可以将图像存储在HDF上,也可以将文件路径存储在数据库中。要检索图像,需要一个从Hadoop获取文件的脚本,类似于3。使用配置单元并将图像存储为二进制文件。将二进制文件转换回图像将得到结果。这很好,如果您对此有任何语法,请ping。请让我知道其中任何一个是否解决了您的问题,如果是,请接受答案,以便其他人可以从我的解决方案中受益:)我在这里很新,请让我知道如何接受答案:)
Create table images (picture binary); 
LOAD DATA LOCAL inpath 'x/y/image.jpg' INTO TABLE images;
ssh <user>@<host> "hadoop fs -get <hdfs_path> <os_path>"
then scp command to copy files