2017-05-11 9 views
2

私はApacheのスパークを学び始めたばかりで、これがなぜ私にとってうまくいかないのか知りたかったのです。Spark Cluster:各ワーカーノードでRDDの内容を印刷するには

私はspark 2.1を実行していて、マスターとワーカー(ローカルではない)を開始しました。このコードは、

object SimpleApp { 
    def main(args: Array[String]) { 
    val file = [FILELOCATION] 
    val conf = new SparkConf().setAppName("Simple Application") 
    val sc = new SparkContext(conf) 
    val textFile = sc.textFile(file) 
    val counts = textFile.flatMap(line => line.split(" ")) 
         .map(word => (word.toLowerCase.toCharArray.toList.sorted.mkString, 1)) 
         .reduceByKey(_ + _) 

    counts.map(println) 
    counts.foreach(println) 

    val countCollect = counts.collect() 

    sc.stop()  
    } 
} 

私はstdoutで内容を表示することはできません。私がマスターと労働者を地元にしても、それはうまくいかないようです。

ここで何か間違っていますか?

+0

どのようにジョブを実行していますか? IDEまたは 'spark-submit'を介して? –

+0

私はspark-submit – xkor

+0

で実行していますが、エグゼキュータのログをチェックしましたか? – banjara

答えて

0

エグゼキュータで何かを印刷したい場合は、普通のprintlnが行います。それは、あなたが実際に労働者の状態、アプリケーションの状態の標準エラー出力を表示することができますエグゼキュータのstdoutに

+0

rddを収集して収集した内容を[counts.collect()。foreach(println)]で印刷することはできますが、運転席側。私が抱えている問題は、rddの配布された内容をエグゼキュータ側で印刷することです。ドキュメントがどのようにワーカーノードに分割されているかを確認し、そのプロセスを詳細に確認したいと考えています。 – xkor

0

を出力を印刷する各労働者のstdoutがはlocalhostで表示して分布し、より多くの事をRDD:ブラウザ[マスタマシン]で8080 。 worker-Idをクリックすると、ログ(stdout、stderr)を表示できます。実行中のアプリケーションをクリックして実際の配布とステータスを確認したい場合は、アプリケーション詳細UIリンクをクリックすると、アプリケーションの詳細が表示されます。

ワーカーUIを表示する場合は、ワーカーシステムにローカルホスト:8081と入力します。

+0

私はlocalhost:8080に行き、stdoutに何が印刷されているのか見ようとしましたが、それは空でした。 – xkor

0

スパークジョブを送信するたびに、Sparkジョブのタスク(手順)はドライバからエグゼキュータに移動します。ドライバは、現在ログインしているノード(ローカルおよびYARNクライアント)またはドライバが別のノード(アプリケーションマスタ)に存在するノードと同じノードで実行されている可能性があります。

すべてのアクションは結果をドライバに返します。したがって、ドライバが実行されているマシンにログオンしている場合は、出力が表示されます。しかし、print文はそれぞれのマシンのコンソールに出力されるので、executorノードで出力を見ることはできません。 sc.textFile()を実行するだけで、すべてのパーティションを個別にディレクトリに保存することができます。この方法で、各パーティションの内容を確認できます。

関連する問題