Я запускаю искру в режиме кластера, поверх 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 является общим для узлов, поэтому все, что создается в этом каталоге, появляется на всех узлах!