Уменьшить зависание на Hadoop Pipes 1.1.2 (java.io.IOException: Неверный код команды: 48)

Доброе утро всем,

Я работаю над полным кластером, работающим под управлением Hadoop Pipes 1.1.2, и обнаружил следующие ошибки для очень длинных заданий:

2013-07-24 06:13:55,058 ERROR org.apache.hadoop.mapred.pipes.BinaryProtocol: java.io.IOException: Bad command code: 48
at org.apache.hadoop.mapred.pipes.BinaryProtocol$UplinkReaderThread.run(BinaryProtocol.java:157)

(этот в одном узле)

2013-07-24 06:18:03,472 ERROR org.apache.hadoop.mapred.pipes.BinaryProtocol: java.lang.NegativeArraySizeException
at org.apache.hadoop.mapred.pipes.BinaryProtocol$UplinkReaderThread.readObject(BinaryProtocol.java:180)
at org.apache.hadoop.mapred.pipes.BinaryProtocol$UplinkReaderThread.run(BinaryProtocol.java:132)

(этот в остальном, который выполняет задачи сокращения)

Это мой код редуктора. Я использую карту там, чтобы отсортировать по второму ключу внутри строки, любые улучшения производительности также приветствуются!

void ACEReducer::reduce(HadoopPipes::ReduceContext& context) {
string fragmento, instante, contenido;
size_t pos;

string fichero = string();
map<string, string> resultados;

// Ordena la lista de valores para escribirlos conforme al instante simulado (map se encarga de la ordenacon)
int nValores = 0;
while (context.nextValue()) {
fragmento = context.getInputValue();
pos = fragmento.find("\t", 0);

if (pos == string::npos) {
cerr << "ERROR - Valor erroneo en Reduce." << endl;
} else {
instante = fragmento.substr(0, pos);
contenido = fragmento.substr(pos+1, string::npos);

resultados.insert(pair<string&, string&>(instante, contenido));
}

nValores++;
if (nValores % 10 == 0) {
context.progress();
}
}

// Concatena los resultados ordenados y los emite para escritura.
nValores = 0;
for (map<string, string>::iterator it=resultados.begin(); it!=resultados.end(); it++){
nValores++;
if (nValores % 10 == 0) {
context.progress();
}
fichero += it->second;
}
context.emit(context.getInputKey(), fichero);
}

Код, который выбрасывает IOException, находится в функции run () в Java BinaryProtocol; это можно найти Вот в строке 120. NegativeArraySizeException выбрасывается где-то между строками 133 и 149; я думаю, что int numBytes = WritableUtils.readVInt(inStream); выше, чем INT_MAX, но я не знаю, как это исправить.

HDFS выглядит здоровой во всех узлах, используется только ~ 3%. Я использую очень надежные узлы, по крайней мере с 64 ГБ оперативной памяти.

Я искал эту проблему, и я не нашел никаких подсказок, поэтому любая помощь очень ценится.

Заранее спасибо,

Рио

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]