【发布时间】:2012-07-31 04:05:48
【问题描述】:
我有大约1000 files,每个文件的大小为1GB。我需要在所有这些1000 files 中找到一个字符串,以及哪些文件包含那个特定的字符串。我正在使用 Hadoop 文件系统,所有 1000 files 都在 Hadoop 文件系统中。
所有1000 files 都在真实文件夹下,所以如果我在下面这样做,我将获得所有1000 files。我需要在真实文件夹下找到哪些文件包含特定的字符串 hello。
bash-3.00$ hadoop fs -ls /technology/dps/real
这是我在 hdfs 中的数据结构-
row format delimited
fields terminated by '\29'
collection items terminated by ','
map keys terminated by ':'
stored as textfile
如何编写 MapReduce 作业来解决这个特定问题,以便我可以找到哪些文件包含特定字符串?任何简单的例子都会对我有很大的帮助。
更新:-
在 Unix 中使用 grep 可以解决上述问题场景,但是速度非常慢,而且需要很多时间才能得到实际输出-
hadoop fs -ls /technology/dps/real | awk '{print $8}' | while read f; do hadoop fs -cat $f | grep cec7051a1380a47a4497a107fecb84c1 >/dev/null && echo $f; done
所以这就是我寻找一些 MapReduce 工作来解决这类问题的原因......
【问题讨论】:
-
你需要查找文件中包含的部分文本的字符串还是文件名?
-
我认为 OP 意味着搜索文件内容。否则他不会提及文件大小。
-
我需要在所有这 1000 个文件内容中找到字符串。哪些文件包含该特定字符串是我的目标。
-
在那个问题中,我只是想找到 Unix 替代品来做这种方式而不是 MapReduce 工作,然后有人建议我你可以在 MapReduce 工作中做得更好,所以这就是我将其发布为新问题。
标签: java hadoop mapreduce hive