Отправка задания на удаленный сервер Apache Spark

Apache Spark (v1.6.1) запускался как служба на компьютере с Ubuntu (10.10.0.102) с использованием ./start-all.sh.

Теперь нужно отправить задание на этот сервер удаленно с помощью Java API.

Ниже приведен код клиента Java, работающий с другого компьютера (10.10.0.95).

    String mySqlConnectionUrl = "jdbc:mysql://localhost:3306/demo?user=sec&password=sec";

    String jars[] = new String[] {"/home/.m2/repository/com/databricks/spark-csv_2.10/1.4.0/spark-csv_2.10-1.4.0.jar", 
            "/home/.m2/repository/org/apache/commons/commons-csv/1.1/commons-csv-1.1.jar", 
            "/home/.m2/repository/mysql/mysql-connector-java/6.0.2/mysql-connector-java-6.0.2.jar"};
    SparkConf sparkConf = new SparkConf()
            .setAppName("sparkCSVWriter")
            .setMaster("spark://10.10.0.102:7077")
            .setJars(jars);

    JavaSparkContext javaSparkContext = new JavaSparkContext(sparkConf);

    SQLContext sqlContext = new SQLContext(javaSparkContext);

    Map<String, String> options = new HashMap<>();
    options.put("driver", "com.mysql.jdbc.Driver");
    options.put("url", mySqlConnectionUrl);
    options.put("dbtable", "(select p.FIRST_NAME from person p) as firstName");

    DataFrame dataFrame = sqlContext.read().format("jdbc").options(options).load();

    dataFrame.write()
        .format("com.databricks.spark.csv")
        .option("header", "true")
        .option("delimiter", "|")
        .option("quote", "\"")
        .option("quoteMode", QuoteMode.NON_NUMERIC.toString())
        .option("escape", "\\")
        .save("persons.csv");

    Configuration hadoopConfiguration = javaSparkContext.hadoopConfiguration();
    FileSystem hdfs = FileSystem.get(hadoopConfiguration);

    FileUtil.copyMerge(hdfs, new Path("persons.csv"), hdfs, new Path("\home\persons1.csv"), true, hadoopConfiguration, new String());

В соответствии с кодом необходимо преобразовать данные СУБД в csv/json с помощью Spark. Но когда я запускаю это клиентское приложение, я могу подключиться к удаленному серверу искры, но в консоли постоянно получаю следующее сообщение WARN

WARN TaskSchedulerImpl: Initial job has not accepted any resources; check your cluster UI to ensure that workers are registered and have sufficient resources 

И на стороне сервера в пользовательском интерфейсе Spark в запущенных приложениях> сводка исполнителя> журнал stderr, получена следующая ошибка.

Exception in thread "main" java.io.IOException: Failed to connect to /192.168.56.1:53112
    at org.apache.spark.network.client.TransportClientFactory.createClient(TransportClientFactory.java:216)
    at org.apache.spark.network.client.TransportClientFactory.createClient(TransportClientFactory.java:167)
    at org.apache.spark.rpc.netty.NettyRpcEnv.createClient(NettyRpcEnv.scala:200)
    at org.apache.spark.rpc.netty.Outbox$$anon$1.call(Outbox.scala:187)
    at org.apache.spark.rpc.netty.Outbox$$anon$1.call(Outbox.scala:183)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.net.ConnectException: Connection refused: /192.168.56.1:53112
    at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
    at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:717)
    at io.netty.channel.socket.nio.NioSocketChannel.doFinishConnect(NioSocketChannel.java:224)
    at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:289)
    at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:528)
    at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:468)
    at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:382)
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:354)
    at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:111)
    ... 1 more

Но нет ни одного IP-адреса, настроенного как 192.168.56.1. Итак, отсутствует ли какая-либо конфигурация.


person Sheel    schedule 13.06.2016    source источник


Ответы (1)


На самом деле моя клиентская машина (10.10.0.95) - это машина с Windows. Когда я попытался отправить задание Spark с помощью другого компьютера с Ubuntu (10.10.0.155), я смог успешно запустить тот же код клиента Java.

Как я отлаживал в клиентской среде Windows, когда я отправляю задание искры после отображения журнала,

INFO Remoting: Starting remoting
INFO Remoting: Remoting started; listening on addresses :[akka.tcp://[email protected]:61552]
INFO Utils: Successfully started service 'sparkDriverActorSystem' on port 61552.
INFO MemoryStore: MemoryStore started with capacity 2.4 GB
INFO SparkEnv: Registering OutputCommitCoordinator
INFO Utils: Successfully started service 'SparkUI' on port 4044.
INFO SparkUI: Started SparkUI at http://192.168.56.1:4044

Согласно строке журнала номер 2, его клиент регистрации с 192.168.56.1.

В другом месте, в клиенте Ubuntu

INFO Remoting: Starting remoting
INFO Remoting: Remoting started; listening on addresses :[akka.tcp://[email protected]:42786]
INFO Utils: Successfully started service 'sparkDriverActorSystem' on port 42786.
INFO MemoryStore: MemoryStore started with capacity 511.1 MB
INFO SparkEnv: Registering OutputCommitCoordinator
INFO Utils: Successfully started service 'SparkUI' on port 4040.
INFO SparkUI: Started SparkUI at http://10.10.0.155:4040

Согласно строке журнала номер 2, его зарегистрированный клиент с 10.10.0.155 совпадает с фактическим IP-адресом.

Если кто-нибудь обнаружит, в чем проблема с клиентом Windows, сообщите об этом сообществу.

[ОБНОВЛЕНИЕ]

Я запускаю всю эту среду в Virtual Box. Компьютер с Windows — мой хост, а Ubuntu — гость. И Spark установлен на машине с Ubuntu. В среде Virtual box Установка Virtual box Ethernet adapter VirtualBox Host-Only Netwotk с IPv4-адресом: 192.168.56.1. И Spark регистрирует этот IP-адрес как IP-адрес клиента вместо фактического IP-адреса 10.10.0.95.

person Sheel    schedule 14.06.2016