2017-05-26 49 views
0

我想在HDFS中搜索并列出包含我的搜索字符串的文件, ,我的第二个要求是有任何可能的方法来搜索范围在文件HDFS中的值。在HDFS文件中搜索字符串或数字范围

让下面假设是我的文件,它包含以下数据

/user/hadoop/test.txt

101,ABC
102,DEF
103,GHI
104,AAA
105,bbb

是否有任何可能的方式使用范围[101-104]进行搜索,以便它返回包含以下数据范围的文件。

+1

你只有这里列出一个文件,但听到的MapReduce?这是搜索文件的唯一方法 –

+0

@ cricket_007感谢您的快速响应。这是一个示例,我在此列出了一个示例文件,但HDFS中有许多类似的文件,并且您的意思是仅由MapReduce声明满足我的要求的方式。其次,当我使用hdfs dfs -ls -R/| grep [search_term]搜索文件,它列出了包含搜索项的单个字符但不包含搜索项的整个字符串的整个文件列表。 – lokesh

+0

您不能使用'hdfs dfs'递归搜索所有文件。我的字面意思是MapReduce编程 –

回答

0

显示文件名有一个模式。让循环通过文件说的hdfs目录。

hdfs_files=`hdfs dfs -ls /user/hadoop/|awk '{print $8}'` 
for file in `echo $hdfs_files`; 
do 
    patterns=`hdfs dfs -cat $file|egrep -o "10[1-4]"` 
    patterns_count=`echo $patterns|tr ' ' "\n"|wc -l` 
    if [ $patterns_count -eq 4 ]; then 
    echo $file; 
    fi 
done 

现在溶液至第二个要求 “搜索在一个文件HDFS的值的范围的” 使用壳命令: -

hdfs dfs -cat /user/hadoop/test.txt|egrep "10[1-4]" 

输出: -

101,abc 
102,def 
103,ghi 
104,aaa 

或只是匹配第一列

hdfs dfs -cat /user/hadoop/test.txt|egrep -o "10[1-4]" 

输出: -

101 
102 
103 
104 
+1

我可能是错的,但问题通缉包含范围的文件名,所以你不能'cat'任何一个文件 –

+1

同样,这个问题需要文件名作为输出 –

+0

@syadav感谢您的输入。我期待文件名作为输出 – lokesh