Czy można uzyskać rozproszone odczyty z klastra HDSF przy użyciu klienta HDFS na jednym komputerze?HDFS rozproszone odczyty bez mapy/redukcja
Przeprowadziłem eksperyment z klastrem złożonym z 3 węzłów danych (DN1, DN2, DN3). Następnie uruchomiłem 10 równoczesnych odczytów z 10 niezależnych plików z programu klienckiego zlokalizowanego na DN1 i wydawało się, że jest to tylko odczyt danych z DN1. Inne węzły danych (DN2, DN3) wykazywały zerową aktywność (sądząc po dziennikach debugowania).
Sprawdziłem, czy wszystkie bloki plików są replikowane we wszystkich 3 datanodach, więc jeśli wyłączyłem DN1, dane są odczytywane z DN2 (tylko DN2).
Zwiększenie ilości odczytanych danych nie pomogło (próbowano z 2 GB do 30 GB).
Ponieważ potrzebuję przeczytać wiele dużych plików i wyodrębnić z nich tylko niewielką ilość danych (kilka kilobitów), chciałbym uniknąć używania mapy/zmniejszenia, ponieważ wymaga ona ustawienia więcej usług, a także wymaga napisania wyjście każdego podzielonego zadania z powrotem do HDFS. Byłoby miło, gdyby wynik był przesyłany bezpośrednio z powrotem do mojego programu klienta z węzłów danych.
Używam SequenceFile
danych odczytu/zapisu, w ten sposób (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
Każda pomoc mile widziana. Dzięki!
Dzięki. To wyjaśnia to! Dzięki za wskazówkę dla proxy. – rodion
W jaki sposób Hadoop wie, który węzeł jest na którym stelażu - http://hadoop.apache.org/common/docs/current/cluster_setup.html#Hadoop+Rack+Awareness –
Co to jest "angg"? –