0

movielens データセットを使用して、ムービー情報を spark プログラムに読み込み、次のコード スニペットを使用して同じ情報を出力しています。

import org.apache.spark.{SparkConf, SparkContext}

object MovieApp {

  def main(args: Array[String]) {

    val conf = new SparkConf().setAppName("movie-recommender")
    val sc = new SparkContext(conf)


    val movieFile = "/mnt/DATASETS/ml-1m/movies.dat"

    val movieData = sc.textFile(movieFile)

    val movies = movieData.map(_.split("::") match { case Array(movieid, title, genres) =>
      val genreList = genres.split("|")
      (movieid, title, genreList)
    })

    println("Num movies:" + movies.count())

    movies.foreach { case movielist =>
      println("ID:" + movielist._1 + "Title:" + movielist._2)
    }
  }
}

コマンド spark-submit --master local[4] --class "MovieApp" movie-recommender.jar を使用してコードを実行すると、期待どおりの出力が得られます

*root@philli ml]# /usr/lib/spark/bin/spark-submit --master local[4] --class "MovieApp" movie-recommender_2.10-1.0.jar

14/12/05 00:17:37 WARN NativeCodeLoader: お使いのプラットフォームのネイティブ Hadoop ライブラリを読み込めません... 該当する場合は組み込み Java クラスを使用します

映画の数:3883

ID:2020年タイトル:危険な関係 (1988)

ID:2021年タイトル:デューン (1984)

ID:2022 Title:キリストの最後の誘惑 (1988)

ID:2023 タイトル:ゴッドファーザー: パート III、ザ (1990)

ID:2024年タイトル:Rapture, The (1991)

ID:2025 作品名:ロリータ (1997)

ID:2026年タイトル:不穏な行動 (1998)

ID:2027 タイトル:マフィア!(1998)

ID:2028 Title:プライベート ライアン (1998)

ID:2029年タイトル:Billy's Hollywood Screen Kiss (1997)

... *

しかし、コマンドを使用してhadoopクラスターで同じことを実行すると

spark-submit --master yarn-client --class "MovieApp" movie-recommender.jar 出力は以下のように異なります (映画の詳細はありません???)

*[root@philli ml]# /usr/lib/spark/bin/spark-submit --master yarn-client --class "MovieApp" movie-recommender_2.10-1.0.jar

14/12/05 00:21:05 警告 NativeCodeLoader: プラットフォームのネイティブ Hadoop ライブラリを読み込めません... 該当する場合は組み込み Java クラスを使用します 14/12/05 00:21:07 警告 BlockReaderLocal: 短絡libhadoop をロードできないため、ローカル読み取り機能は使用できません。--args は非推奨です。代わりに --arg を使用してください。ムービー数:3883 [root@philli ml]# *

ローカルで実行する場合とクラスターで実行する場合でプログラムの動作を変更する必要があるのはなぜですか....コマンドを使用してhadoop用にspark-1.1.1を構築しました

mvn -Pyarn -Phadoop-2.4 -Dhadoop.version=2.4.0 -DskipTests クリーン パッケージ

私が使用しているクラスターは HDP2.1 です

サンプルの movies.dat ファイルは次のとおりです。

1::トイ・ストーリー (1995)::アニメーション|子供向け|コメディ

2::ジュマンジ (1995)::アドベンチャー|子供|ファンタジー

3::Grumpier Old Men (1995)::コメディ|ロマンス

4::息を吐くのを待っている (1995)::コメディ|ドラマ

5::花嫁の父 パート II (1995)::コメディ

6::Heat (1995)::アクション|犯罪|スリラー

7::サブリナ (1995)::コメディ|ロマンス

8::トムとハック (1995)::アドベンチャー|子供向け

9::サドンデス (1995)::アクション

10::ゴールデンアイ (1995)::アクション|アドベンチャー|スリラー

4

1 に答える 1

1

クラスターでプログラムを実行するforeachと、ワーカーでクロージャーが実行されるため、ドライバーではなくprintln ワーカーで発生します。stdout

ヤーンのログを調べると、予想される出力が見つかります。

于 2014-12-06T13:25:45.520 に答える