Utilizzando hadoop fs -cat
(o il più generico hadoop fs -text
) potrebbe essere fattibile solo se si dispone di due 1 GB di file. Per 100 file, tuttavia, utilizzerei lo streaming-api perché può essere utilizzato per le query ad hoc senza ricorrere a un lavoro mapreduce completo. Per esempio. nel tuo caso creare uno script get_filename_for_pattern.sh
:
#!/bin/bash
grep -q $1 && echo $mapreduce_map_input_file
cat >/dev/null # ignore the rest
Nota che si deve leggere l'intero di ingresso, al fine di evitare di ottenere java.io.IOException: Stream closed
eccezioni.
quindi emettere i comandi
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/*
In distribuzioni più recenti mapred streaming
invece di hadoop jar $HADOOP_HOME/hadoop-streaming.jar
dovrebbe funzionare. In quest'ultimo caso devi impostare correttamente il tuo $HADOOP_HOME
per trovare il jar (o fornire direttamente il percorso completo).
Per query più semplici non è nemmeno necessario uno script, ma è sufficiente fornire direttamente il comando al parametro -mapper
. Ma per qualcosa di leggermente complesso, è preferibile usare uno script, perché ottenere il diritto di fuga può essere un lavoro ingrato.
Se non è necessaria una fase di riduzione, fornire il parametro simbolico NONE
all'opzione -reduce
corrispondente (o utilizzare semplicemente -numReduceTasks 0
). Ma nel tuo caso è utile avere una fase di riduzione per avere l'output consolidato in un singolo file.
fonte
2017-05-09 01:03:40
Grep or Sed? No? – plast1K
Il problema con questo è, non è un file system UNIX, è un Hadoop File System, ogni volta che provo a fare questo 'bash-3.00 $ cd/apps/hdmi-technology/b_dps/real-time bash: cd:/apps/hdmi-technology/b_dps/real-time: nessun file o directory simile. Non ottengo alcun file o directory. Quindi ho bisogno di un altro modo per affrontare questo problema. – ferhan