Mengirimkan Pekerjaan ke Server Apache Spark Jarak Jauh

Apache Spark (v1.6.1) dimulai sebagai layanan di mesin Ubuntu (10.10.0.102), menggunakan ./start-all.sh.

Sekarang perlu mengirimkan pekerjaan ke server ini dari jarak jauh menggunakan Java API.

Berikut ini adalah kode klien Java yang dijalankan dari mesin berbeda (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());

Sesuai kode perlu mengonversi data RDBMS ke csv/json menggunakan Spark. Tetapi ketika saya menjalankan aplikasi klien ini, dapat terhubung ke server percikan jarak jauh tetapi di konsol terus menerima pesan PERINGATAN berikut

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

Dan di sisi server pada Spark UI dalam menjalankan aplikasi > ringkasan pelaksana > log stderr, menerima kesalahan berikut.

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

Namun tidak ada alamat IP yang dikonfigurasi sebagai 192.168.56.1. Jadi apakah ada konfigurasi yang hilang.


person Sheel    schedule 13.06.2016    source sumber


Jawaban (1)


Sebenarnya mesin klien saya (10.10.0.95) adalah mesin Windows. Ketika saya mencoba mengirimkan pekerjaan Spark menggunakan mesin Ubuntu lain (10.10.0.155), saya berhasil menjalankan kode klien Java yang sama.

Saat saya melakukan debug di lingkungan klien Windows, ketika saya mengirimkan pekerjaan percikan, log berikut ditampilkan,

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

Sesuai baris log nomor 2, klien terdaftarnya dengan 192.168.56.1.

Di tempat lain, di klien 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

Sesuai baris log nomor 2, klien terdaftarnya dengan 10.10.0.155 sama dengan alamat IP sebenarnya.

Jika ada yang menemukan masalah pada klien Windows, beri tahu komunitas.

[PEMBARUAN]

Saya menjalankan seluruh lingkungan ini di Virtual Box. Mesin Windows adalah host saya dan Ubuntu adalah tamu. Dan Spark diinstal di mesin Ubuntu. Di lingkungan Virtual box, Virtual box menginstal Ethernet adapter VirtualBox Host-Only Netwotk dengan alamat IPv4 : 192.168.56.1. Dan Spark mendaftarkan IP ini sebagai IP klien, bukan alamat IP sebenarnya 10.10.0.95.

person Sheel    schedule 14.06.2016