Аналогично локальности данных, если HDFS не используется, но характерно для HDFS.
У нас есть 2 кластера Hadoop, и мы отправляем задачу свиньи в кластер A JobTracker, который считывает большой набор данных (100 ГБ) из кластера B и присоединяется к небольшому набору данных (10 строк) из кластера A.
b_data = load 'hdfs://b-cluster/big.txt' as ( customer_id: chararray);
a_data = load 'hdfs://a-cluster/small.txt' as ( customer_id: chararray);
j_data = join a_data by acct_id left, b_data by customer_id;
dump j_data;
Удивительно, но работает + занимает почти столько же времени, сколько мы привыкли при работе только с локальными наборами данных на кластере А (около 10 минут)
Что происходит технически? Трекеры задач работают только на узлах A? Как они считывают набор данных с узлов данных B? Почему это так быстро, если они не могут наслаждаться локальностью данных, не так ли?
Спасибо!