2017-05-26 74 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