è possibile ottenere distribuiti legge da HDSF cluster utilizzando un client di HDFS su una macchina?HDFS distribuiti legge senza Map/Reduce
Ho condotto un esperimento con un gruppo costituito da 3 nodi di dati (DN1, DN2, DN3). Poi ho eseguito 10 simultanea legge da 10 file indipendenti di un programma client situato su DN1, e sembrava di leggere solo i dati da DN1. Altri nodi di dati (DN2, DN3) mostravano un'attività zero (a giudicare dai log di debug).
Ho controllato che blocca tutti i file vengono replicati in tutti i 3 datanodes, quindi se chiudo DN1 poi i dati vengono letti dal DN2 (solo DN2).
Aumentando la quantità di dati letti non ha aiutato (provato da 2GB a 30GB).
Poiché ho bisogno di leggere più file di grandi dimensioni ed estrarre solo una piccola quantità di dati da esso (pochi Kb), vorrei evitare di utilizzare map/reduce poiché richiede impostazioni su più servizi e richiede anche la scrittura del l'output di ogni attività divisa su HDFS. Piuttosto sarebbe bello avere il risultato in streaming direttamente al mio programma client dai nodi dati.
Sto usando SequenceFile
per i dati di lettura/scrittura, in questo modo (jdk7):
//Run in thread pool on multiple files simultaneously
List<String> result = new ArrayList<>();
LongWritable key = new LongWritable();
Text value = new Text();
try(SequenceFile.Reader reader = new SequenceFile.Reader(conf,
SequenceFile.Reader.file(filePath)){
reader.next(key);
if(key.get() == ID_I_AM_LOOKING_FOR){
reader.getCurrentValue(value);
result.add(value.toString());
}
}
return result; //results from multiple workers are merged later
Qualsiasi aiuto apprezzato. Grazie!
Grazie. Questo lo spiega! Grazie per il suggerimento del proxy. – rodion
Come fa Hadoop a sapere su quale nodo si trova il rack: http://hadoop.apache.org/common/docs/current/cluster_setup.html#Hadoop+Rack+Awareness –
Che cos'è "angg"? –