Spark: определение адреса драйвера из задачи

В целях отладки я хочу отправить сообщение из задачи искры (работающей в исполнителе) на машину драйвера. В документах утверждается, что spark.driver.host содержит эту информацию, но я не знаю как получить к нему доступ из рабочего (или из драйвера, если уж на то пошло...)


person Stuart Berg    schedule 10.08.2016    source источник


Ответы (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
comment
Спасибо за ответ. Мой вопрос был плохо сформулирован (извините за это, теперь вопрос исправлен) - я хочу, чтобы работник знал 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