gpt4 book ai didi

hadoop - 将多个文件添加到 HIVE 中的分布式缓存

转载 作者:可可西里 更新时间:2023-11-01 14:47:36 25 4
gpt4 key购买 nike

我目前在将文件夹内容添加到 Hives 不可信缓存时遇到问题。我可以使用以下方法成功地将多个文件添加到 Hive 中的分布式缓存:

ADD FILE /folder/file1.ext;
ADD FILE /folder/file2.ext;
ADD FILE /folder/file3.ext;
etc.

.

我还看到有一个 ADD FILES(复数)选项,在我看来这意味着您可以指定一个目录,例如:ADD FILES/folder/; 以及所有内容包含在文件夹中(这适用于 Hadoop Streaming -files 选项)。但这不适用于 Hive。现在我必须明确添加每个文件。

我做错了吗?有没有办法将整个文件夹内容存储到分布式缓存中。

附言我尝试了通配符 ADD FILE/folder/*ADD FILES/folder/* 但也失败了。

编辑:

从 hive 0.11 开始,现在支持这样:

ADD FILE /folder

现在可以了。

我正在使用的是将文件夹位置作为参数传递给配置单元脚本,因此:

$ hive -f my-query.hql -hiveconf folder=/folder

在 my-query.hql 文件中:

ADD FILE ${hiveconf:folder}

现在很整洁!

最佳答案

添加不支持目录,但作为解决方法,您可以压缩 文件。然后将其作为 archive (ADD ARCHIVE my.zip) 添加到分布式缓存中。当作业运行时,存档的内容将在从属节点(参见 mapred.job.classpath.archives 属性)

如果您要传递的文件数量相对较少,并且您不想处理存档,您也可以编写一个小脚本,为所有文件准备添加文件命令您在给定目录中有:
例如:

#!/bin/bash
#list.sh

if [ ! "$1" ]
then
echo "Directory is missing!"
exit 1
fi

ls -d $1/* | while read f; do echo ADD FILE $f\;; done

然后从 Hive shell 调用它并执行生成的输出:

!/home/user/list.sh /path/to/files

关于hadoop - 将多个文件添加到 HIVE 中的分布式缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15429040/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com