Генерация данных с помощью Spark-Bench не выполняется параллельно - PullRequest
0 голосов
/ 26 июня 2019

Я запускаю искру в режиме кластера, поверх YARN.Цель состоит в том, чтобы запустить Spark-Bench (набор для бенчмаркинга искр), чтобы усилить операции ввода-вывода в кластере.Вот файл (csv-vs-parquet.conf), который я использую для генерации данных и выполнения запросов с помощью spark:

 spark-bench = {
  spark-submit-config = [{
    spark-home = "/usr/local/spark" // PATH TO YOUR SPARK INSTALLATION
    spark-args = {
      master = "yarn" // FILL IN YOUR MASTER HERE
    //executor-memory = "14G" // FILL IN YOUR EXECUTOR MEMORY
      num-executors = 15
      executor-cores = 15
    }
    conf = {
      // Any configuration you need for your setup goes here, like:
       "spark.dynamicAllocation.enabled" = "false"
       "spark.dynamicAllocation.monitor.enabled" = "false"
      "spark.shuffle.service.enabled" = "false"
       "spark.sql.parquet.mergeSchema" = "true"
    }
    suites-parallel = false
    workload-suites = [
      {
        descr = "Generate a dataset, then take that same dataset and write it out to Parquet format"
       // benchmark-output = "file:///home/hadoop_fuse/result-dat-gen.csv"
        // We need to generate the dataset first through the data generator, then we take that dataset and convert it to Parquet.
        parallel = false
        workloads = [


          {
            name = "data-generation-kmeans"
            rows = 500000000
            cols = 240
            output = "file:///tmp/hadoop_fuse/gen_data/kmeans-data.csv"
          },{

            name = "sql"
            query = "select * from input"
            input = "file:///tmp/hadoop_fuse/gen_data/kmeans-data.csv"
            output = "file:///tmp/hadoop_fuse/gen_data/kmeans-data.parquet"
          }
        ]
      },
      {
        descr = "Run two different SQL queries over the dataset in two different formats"
        benchmark-output = "file:///tmp/gen_data/csv-vs-parquet/results-sql.csv"
        parallel = false
        repeat = 1
        workloads = [
          {
            name = "sql"
            input = ["file:///tmp/hadoop_fuse/gen_data/kmeans-data.csv", "file:///tmp/hadoop_fuse/gen_data/kmeans-data.parquet"]
            query = ["select * from input", "select c0, c22 from input where c0 < -0.9"]
            cache = false
          }
        ]
      }
    ]
  }]
}

Затем я запускаю тест с помощью команды ./bin/spark-bench.sh examples/csv-vs-parquet.conf Сложность в том, что этот раздел настройки:


          {
            name = "data-generation-kmeans"
            rows = 500000000
            cols = 240
            output = "file:///tmp/hadoop_fuse/gen_data/kmeans-data.csv"
          }

, то есть генерация данных не полностью выполняется параллельно, поэтому только 2 (из 8) узла берут это на себя, и, следовательно, генерация данных занимает много времени.

Между тем, остальная часть теста (преобразование CSV-файла в паркет и выполнение запросов) выполняется параллельно.

В чем причина этого.

Обратите внимание, что каталог/ tmp / hadoop_fuse является общим для узлов, поэтому все, что создается в этом каталоге, появляется на всех узлах!

...