2016-06-13 3 views
0

Apache Spark (v1.6.1)은 우분투 (10.10.0.102) 시스템에서 서비스로 시작하여 ./start-all.sh을 사용합니다.원격 Apache Spark 서버에 작업 제출

Java API를 사용하여 원격으로이 서버에 작업을 제출해야합니다.

다음은 다른 시스템 (10.10.0.95)에서 실행되는 Java 클라이언트 코드입니다.

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()); 

코드별로 Spark를 사용하여 RDBMS 데이터를 csv/json으로 변환해야합니다. 나는이 클라이언트 응용 프로그램을 실행할 때, 수 원격 스파크 서버에 연결할 수 있지만, 콘솔에서 계속 다음 수신 WARN 메시지

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

그리고 실행중인 응용 프로그램> 실행 프로그램 요약> 표준 오류 로그에 스파크 UI에 서버 측에서

는 다음과 같은 오류가 발생합니다 .

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으로 구성되지 않았습니다. 그래서 누락 된 구성이 있습니다.

답변

-1

사실 내 클라이언트 컴퓨터 (10.10.0.95)는 Windows 컴퓨터입니다. 다른 Ubuntu 머신 (10.10.0.155)을 사용하여 Spark 작업을 제출하려고 할 때 동일한 Java 클라이언트 코드를 성공적으로 실행할 수 있습니다. 내가 표시 로그 다음 스파크 작업을 제출할 때 나는, Windows 클라이언트 환경에서 디버깅으로

, 로그 행 번호 2, 192.168.56.1과의 레지스터 클라이언트 당으로

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 번 우분투 클라이언트에서

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 

와 그 레지스터 클라이언트 10.10.0.155 실제 IP 주소와 동일.

누구든지 Windows 클라이언트의 문제점을 발견하면 커뮤니티에 알려주십시오.

[업데이트]

나는 가상 상자에서이 모든 환경을 실행하고 있습니다. Windows 컴퓨터가 제 호스트이고 우분투가 게스트입니다. Spark가 우분투 컴퓨터에 설치되었습니다. 가상 박스 환경에서 가상 주소창에 Ethernet adapter VirtualBox Host-Only Netwotk을 설치하고 IPv4 주소는 192.168.56.1입니다. 그리고 실제 IP 주소 10.10.0.95 대신이 IP를 클라이언트 IP로 등록하십시오.