В целях отладки я хочу отправить сообщение из задачи искры (работающей в исполнителе) на машину драйвера. В документах утверждается, что spark.driver.host
содержит эту информацию, но я не знаю как получить к нему доступ из рабочего (или из драйвера, если уж на то пошло...)
Spark: определение адреса драйвера из задачи
Ответы (2)
sc.getConf.get("spark.driver.host")
но драйвер не то, что вам нужно. Вам нужен работник. Итак, попробуйте что-то вроде этого кода внутри вашего блока rdd.mapPartitions:
val localhost = java.net.InetAddress.getLocalHost
val ip = java.net.NetworkInterface.getByInetAddress(localhost)
проверьте это для более точного подхода.
person
Viacheslav Rodionov
schedule
10.08.2016
Спасибо за ответ. Мой вопрос был плохо сформулирован (извините за это, теперь вопрос исправлен) - я хочу, чтобы работник знал IP-адрес драйвера. Но теперь я вижу, что есть очень простое решение: просто передать IP-адрес драйвера рабочим процессам с помощью широковещательной переменной (или глобальной константы в Python). Думаю, у меня есть решение.
- person Stuart Berg; 11.08.2016
Просто передайте IP-адрес драйвера рабочим процессам через захваченную глобальную переменную:
import socket
driver_ip_addr = socket.gethostbyname(socket.gethostname())
def process_data(data):
# Do some work ...
send_log_msg(driver_ip_addr, "hello!")
# Do some more work...
processed_data = my_rdd.map(process_data).collect()
person
Stuart Berg
schedule
26.08.2016