多个文件添加到HIVE分布式缓存(Add multiple files to distributed

2019-08-17 15:31发布

我现在有添加文件夹的内容,以荨麻疹的问题不信任缓存。 我可以将多个文件成功添加到使用蜂巢分布式缓存:

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

我还看到有一个ADD FILES (复数),它在我的脑海意味着你可以指定一个目录类似选项: ADD FILES /folder/; 而该文件夹中的一切都将包括(这个作品用Hadoop流-files选项)。 但是,这并不与蜂巢工作。 现在我必须明确添加每个文件。

我这样做不对吗? 有没有一种方法来整过的文件夹的内容,以分布式缓存。

PS我试过通配符ADD FILE /folder/*ADD FILES /folder/* ,但失败了。

编辑:

由于蜂巢0.11的这个现在支持这样:

ADD FILE /folder

现在的作品。

我现在用的就是通过文件夹位置蜂巢脚本设置了一个param这样:

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

而在我的-query.hql文件:

ADD FILE ${hiveconf:folder}

尼斯和整洁吧!

Answer 1:

添加不支持目录,但作为一种变通方法,您可以压缩文件。 然后将其添加到分布式缓存为一个档案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

然后从蜂巢壳调用它并执行所产生的输出:

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


Answer 2:

好了,在我的情况,我有一个文件夹移动在其子文件夹和文件。

我用ADD ARCHIVE xxx.gz ,将其添加文件,但没有爆炸的从属计算机(解压缩)。

相反, ADD FILE <folder_name_without_traling_slash>实际拷贝整个文件夹递归的奴隶。

礼貌: 该评论帮助调试

希望这可以帮助 !



文章来源: Add multiple files to distributed cache in HIVE
标签: hadoop hive