web-gelistirme-sc.com

Hadoop Dosya Sisteminde birden fazla dosya arasında dolaş

Hadoop ile çalışıyorum ve Hadoop dosya sistemimdeki ~ 100 dosyadan hangisinin belirli bir dize içerdiğini bulmam gerekiyor.

Bu şekilde aramak istediğim dosyaları görebilirim:

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

..which bunun gibi birkaç girdi döndürür:

-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

Bunlardan hangisinin bcd4bc3e1380a56108f486a4fffbc8dc dizesini içerdiğini nasıl bulurum? Bir kere öğrendiğimde onları elle düzenleyebilirim.

16
arsenal

Bu bir POSIX değil, "hadoop" dosya sistemidir, bu yüzden şunu deneyin:

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

Bu çalışması gerekir, ancak seridir ve bu yüzden yavaş olabilir. Eğer kümeniz ısıyı alabilirse, paralelleştirebiliriz:

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 ^"

-P 10 seçeneğine xargs seçeneğine dikkat edin: bu paralel olarak kaç dosya indirip arayacağımızdır. Konfigürasyonunuzla ne olursa olsun, disk G/Ç'sini veya ağ bant genişliğini doyurana kadar düşük başlayın ve sayıyı artırın.

EDIT: SunOS'ta olduğunuzdan dolayı (biraz beyin ölümü olan) şunu deneyin:

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
29
phs

Herhangi bir uzantıdaki tüm dosyaları hdfs konumu içinde tekrarlı olarak bulmak için:

hadoop fs -find  hdfs_loc_path  -name ".log"
1
Gourav Goutam

hadoop fs -find/apps/mdhi teknolojisi/b_dps/gerçek zamanlı-name "bcd4bc3e1380a56108f486a4fffbc8dc"

hadoop fs -find/apps/mdhi teknolojisi/b_dps/gerçek zamanlı-adı "bcd4bc3e1380a56108f486a4fffbc8dc"

0
D Xia

Hdfs klasöründe grep komutunu uygulamak istiyorsunuz

hdfs dfs -cat /user/coupons/input/201807160000/* | grep -c null

burada kedi yinelemeli olarak klasördeki tüm dosyaları gözden geçirir ve sayımı bulmak için grep uyguladım.

0
Mukesh Gupta

Sadece iki adet 1 GB dosyanız varsa hadoop fs -cat (veya daha genel hadoop fs -text) kullanmak uygun olabilir. 100 dosya için streaming-api kullanırım çünkü tam teşekküllü bir mapreduce işine başvurmadan geçici sorgular için kullanılabilir. Örneğin. sizin durumunuzda bir kod oluşturun get_filename_for_pattern.sh:

#!/bin/bash
grep -q $1 && echo $mapreduce_map_input_file
cat >/dev/null # ignore the rest

Java.io.IOException: Stream closed istisnalarını almaktan kaçınmak için tüm girişi okumak zorunda olduğunuzu unutmayın.

Sonra komutları ver

hadoop jar $HADOOP_HOME/hadoop-streaming.jar\
 -Dstream.non.zero.exit.is.failure=false\
 -files get_filename_for_pattern.sh\
 -numReduceTasks 1\
 -mapper "get_filename_for_pattern.sh bcd4bc3e1380a56108f486a4fffbc8dc"\
 -reducer "uniq"\
 -input /apps/hdmi-technology/b_dps/real-time/*\
 -output /tmp/files_matching_bcd4bc3e1380a56108f486a4fffbc8dc
hadoop fs -cat /tmp/files_matching_bcd4bc3e1380a56108f486a4fffbc8dc/*

Daha yeni dağıtımlarda mapred streaming yerine hadoop jar $HADOOP_HOME/hadoop-streaming.jar çalışmalıdır. İkinci durumda, küpü bulmak için $HADOOP_HOME'nuzu doğru bir şekilde ayarlamanız (veya doğrudan tam yolu belirtmeniz) gerekir.

Daha basit sorgular için bir komut dosyasına bile ihtiyacınız olmaz, ancak komutu doğrudan -mapper parametresine sağlayabilirsiniz. Ancak biraz karmaşık olan her şey için, bir senaryo kullanmak tercih edilir, çünkü kaçmayı doğru yapmak bir angarya olabilir.

Bir azaltma aşamasına ihtiyacınız yoksa, sembolik NONE parametresini ilgili -reduce seçeneğine sağlayın (veya yalnızca -numReduceTasks 0 kullanın). Ancak, durumunuzda, çıktının tek bir dosyada konsolide edilmesi için azaltma aşamasına sahip olmak yararlıdır.

0
David Ongaro