gpt4 book ai didi

bash - Grep 跨 Hadoop 文件系统中的多个文件

转载 作者:可可西里 更新时间:2023-11-01 14:09:07 26 4
gpt4 key购买 nike

我正在使用 Hadoop,我需要在我的 Hadoop 文件系统中找到大约 100 个文件中的哪些包含特定字符串。

我可以像这样看到我想搜索的文件:

bash-3.00$ hadoop fs -ls /apps/mdhi-technology/b_dps/real-time

..返回几个这样的条目:

-rw-r--r--   3 b_dps mdhi-technology 1073741824 2012-07-18 22:50 /apps/mdhi-technology/b_dps/HADOOP_consolidated_RT_v1x0_20120716_aa
-rw-r--r-- 3 b_dps mdhi-technology 1073741824 2012-07-18 22:50 /apps/mdhi-technology/b_dps/HADOOP_consolidated_RT_v1x0_20120716_ab

如何找到其中哪些包含字符串 bcd4bc3e1380a56108f486a4fffbc8dc?一旦我知道了,我就可以手动编辑它们。

最佳答案

这是一个 hadoop“文件系统”,而不是 POSIX 文件系统,所以试试这个:

hadoop fs -ls /apps/hdmi-technology/b_dps/real-time | awk '{print $8}' | \
while read f
do
hadoop fs -cat $f | grep -q bcd4bc3e1380a56108f486a4fffbc8dc && echo $f
done

这应该可行,但它是串行的,因此可能很慢。如果您的集群可以承受热量,我们可以并行化:

hadoop fs -ls /apps/hdmi-technology/b_dps/real-time | awk '{print $8}' | \
xargs -n 1 -I ^ -P 10 bash -c \
"hadoop fs -cat ^ | grep -q bcd4bc3e1380a56108f486a4fffbc8dc && echo ^"

请注意 xargs-P 10 选项:这是我们将并行下载和搜索的文件数。从低开始增加数量,直到磁盘 I/O 或网络带宽饱和,无论您的配置是否相关。

编辑:鉴于您使用的是 SunOS(有点脑残),请尝试以下操作:

hadoop fs -ls /apps/hdmi-technology/b_dps/real-time | awk '{print $8}' | while read f; do hadoop fs -cat $f | grep bcd4bc3e1380a56108f486a4fffbc8dc >/dev/null && echo $f; done

关于bash - Grep 跨 Hadoop 文件系统中的多个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11697810/

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