2016-03-31 6 views
3

私はDCOS cliを使用してmesos上でsparkストリーミングジョブを開始しようとしています。 私は仕事を開始することができます。私のプログラムは、設定ファイルがcliパラメータとして渡されることを期待しています。 dcos spark run --submit-argsでこれをどのように達成できますか?spos submit mesos dcos cli

私はファイルhttp://server/path/to//fileをダウンロードしようとしましたが、うまくいかないことがありました。ドライバは起動しますが、設定ファイルがないために失敗します。

また、jarとconfigファイルをtarとしてロールアップして送信しようとしました。私はMesosのログで、タールが取ってあり、アンタールしているのを見ることができます。 configディレクトリとjarファイルの両方が作業ディレクトリにあります。しかし、ClassNotFoundExceptionでジョブが失敗します。私は、火花送信がどのように開始されたかについて、何かが正しくないと思われます。

dcos spark run --submit-args="--supervise --deploy-mode cluster --class package.name.classname http://file-server:8000/Streaming.tar.gz Streaming.conf" 

進歩上のヒント?また、DCOSで使用されているspark-submitコマンドのログファイルを確認できますか?

答えて

3

は、あなたがそれを動作させるために起動する必要があるコマンドの例を示します。

dcos spark run --submit-args='--conf spark.mesos.uris=https://s3-us-west-2.amazonaws.com/andrey-so-36323287/pi.conf --class JavaSparkPiConf https://s3-us-west-2.amazonaws.com/andrey-so-36323287/sparkPi_without_config_file.jar /mnt/mesos/sandbox/pi.conf'

--conf spark.mesos.uris=...ドライバまたはエグゼキュータがMesosによって起動されたときにサンドボックスにダウンロードされるURIのコンマ区切りのリスト。これは、粗粒度モードと細粒度モードの両方に適用されます。

/mnt/mesos/sandbox/pi.confメインクラスが受け取るダウンロードファイルへのパスは、0番目のパラメータとして受け取ります(下記のコードスニペットを参照してください)。 /mnt/mesos/sandbox/は、コレスポンデントメソスタスクサンドボックスにマップされるコンテナ内の標準パスです。

public final class JavaSparkPiConf { 

    public static void main(String[] args) throws Exception { 
    SparkConf sparkConf = new SparkConf().setAppName("JavaSparkPi"); 
    JavaSparkContext jsc = new JavaSparkContext(sparkConf); 

    Scanner scanner = new Scanner(new FileInputStream(args[0])); 
    int slices; 
    if (scanner.hasNextInt()) { 
     slices = scanner.nextInt(); 
    } else { 
     slices = 2; 
    } 
    int n = 100000 * slices; 
    List<Integer> l = new ArrayList<>(n); 
    for (int i = 0; i < n; i++) { 
     l.add(i); 
    } 

    JavaRDD<Integer> dataSet = jsc.parallelize(l, slices); 

    int count = dataSet.map(new Function<Integer, Integer>() { 
     @Override 
     public Integer call(Integer integer) { 
     double x = Math.random() * 2 - 1; 
     double y = Math.random() * 2 - 1; 
     return (x * x + y * y < 1) ? 1 : 0; 
     } 
    }).reduce(new Function2<Integer, Integer, Integer>() { 
     @Override 
     public Integer call(Integer integer, Integer integer2) { 
     return integer + integer2; 
     } 
    }); 

    System.out.println("Pi is roughly " + 4.0 * count/n); 

    jsc.stop(); 
    } 
} 
+0

それはそれでした。見つからなかった部分は/ mnt/mesos/sandboxにダウンロードしたファイルを探すことでした。 – Cheeko

2

Streaming.confは、ドライバに渡される単なる文字列です。あなたのドライバーはそれを見ることができなければなりません。これを実行する最も簡単な方法は、アクセス可能な場所に配置することです。具体的には、spark.mesos.uris [1]を介してサンドボックスにダウンロードすることを指定します。代わりに、遠隔地からの読書をサポートするためにアプリケーションを書いて、CLI上の場所を渡すこともできます。

--filesは、エグゼキュータでファイルを配置するために使用されますが、ドライバにファイルを渡そうとしているため、動作しません。ここで

[1] http://spark.apache.org/docs/latest/running-on-mesos.html

マイケルGummelt
中間圏

+0

私はパラメータがプログラムに渡された文字列である知っている:) ドライバはすでにそのファイルを読み込みます。私はそれを利用可能にしようとしています。私はあなたの提案を試みます。どの時点でURIに指定されたリンクがダウンロードされますか?私はsparkのコンテキストを開始する前にconfファイルを読んでいます。 – Cheeko

+0

もう1つ、エグゼキュータに余分なファイル( - ファイル)またはjar(-jars)を置く必要がある場合は、どうすればよいですか? – Cheeko

+0

spark.mesos.urisがファイルをダウンロードします。私はそれをmesosのフェッチャのログで見ることができます。しかし、現在のディレクトリやクラスパスにはありません。私は自分のコードでファイルを "見る"ことができません。私は共有の場所から直接読むことに頼っていましたが、リソースの管理と共有方法を知っておくと良いでしょう。 – Cheeko

関連する問題