本次测试采用3种不同的测试场景,针对开源自建的Hadoop+Spark集群与阿里云云原生数据湖分析DLA Spark在执行Terasort基准测试的性能做了对比分析。您可以按照本文介绍自行测试对比,快速了解云原生数据湖分析(DLA)Spark引擎的性价比数据。

背景信息

本文档将分别针对3种测试场景进行Terasort基准测试。3种测试场景的场景说明和配置要求,请参考环境配置要求

准备工作

  1. 下载Terasort测试相关的Jar包

    在使用Spark进行Terasort基准测试时,需要准备测试数据和Terasort测试程序,DLA提供了一个Jar包,里面包含了可以生成Terasort测试数据的Spark应用和进行Terasort基准测试的Spark应用。点击Jar包源码可以下载Jar包源码。

  2. 将下载下来的Jar包上传到您的OSS上。

    在后续测试过程中,DLA Spark需要使用这个Jar包来生成Terasort测试数据以及进行Terasort基准测试,因此需要把该Jar包上传到您的OSS上。

操作步骤

场景一:1 TB测试数据下DLA Spark+OSS与自建Hadoop+Spark集群性能对比
  1. 准备测试数据
    • 在OSS上生成1 TB Terasort测试数据
      登录Data Lake Analytics管理控制台,在Serverless Spark > 作业管理页签下,提交运行生成1 TB Terasort测试数据的Spark作业。示例如下:
      {
          "args": [
              "1000g",
              "oss://<bucket-name>/<输出文件夹路径>",  #您的Terasort测试数据存放的OSS路径,例如oss://test-bucket/terasort/input/1T。
              "true"
          ],
          "file": "<Jar包的OSS路径>",  #上文中您Jar包上传的OSS路径,例如oss://test/performance/dla-spark-perf.jar。
          "name": "TeraGen-1T",
          "className": "com.aliyun.dla.perf.terasort.TeraGen",
          "conf": {
              "spark.dla.connectors": "oss",
              "spark.hadoop.job.oss.fileoutputcommitter.enable": "true",
              "spark.hadoop.mapreduce.fileoutputcommitter.algorithm.version": 2,
              "spark.driver.resourceSpec": "medium",
              "spark.executor.resourceSpec": "medium",
              "spark.default.parallelism": "2000",
              "spark.executor.memoryOverhead": 2000,
              "spark.executor.instances": 19
          }
      }
    • 在自建Hadoop上生成1 TB Terasort测试数据
      使用spark-submit命令向自建Spark集群中提交运行生成1 TB Terasort测试数据的Spark程序。示例如下:
      ./bin/spark-submit \
      --class com.aliyun.dla.perf.terasort.TeraGen \
      --executor-cores 2 \
      --executor-memory 6G \
      --num-executors 19 \
      --driver-memory 8G \
      --driver-cores 2 \
      --name terasort-sort-1000g \
      --conf yarn.nodemanager.local-dirs=/mnt/disk1/yarn(配置地址到您挂载的数据盘上) \
      --conf spark.hadoop.mapreduce.fileoutputcommitter.algorithm.version=2 \
      --conf spark.yarn.executor.memoryOverhead=2000 \
      --conf spark.default.parallelism=2000 \
      /dla-spark-perf.jar(填写测试jar包的路径)1000g hdfs://test/terasort/input/1T(填写测试数据的输出路径)
  2. 运行测试程序
    • 在DLA Spark上运行测试程序
      登录Data Lake Analytics管理控制台,在Serverless Spark > 作业管理页签下,提交运行Terasort基准测试的Spark作业。示例如下:
      {
          "args": [
              "--input",
              "<上述步骤生成的oss测试数据的路径>", #例如oss://test-bucket/terasort/input/1T。
              "--output",
              "<经过Terasort测试程序运行完成后的输出文件夹路径>", #例如oss://test-bucket/terasort/output/1T。
              "--optimized",
              "true",
              "--shuffle-part",
              "2000"
          ],
          "file": "<您上传的测试所需要的jar文件的oss路径>", #例如oss://test/performance/dla-spark-perf.jar。
          "name": "Terasort-1T",
          "className": "com.aliyun.dla.perf.terasort.TeraSort",
          "conf": {
              "spark.dla.connectors": "oss",
              "spark.hadoop.job.oss.fileoutputcommitter.enable": "true",
              "spark.hadoop.mapreduce.fileoutputcommitter.algorithm.version": 2,
              "spark.driver.resourceSpec": "medium",
              "spark.executor.resourceSpec": "medium",
              "spark.default.parallelism": "2000",
              "spark.executor.memoryOverhead": 2000,
              "spark.executor.instances": 19
          }
      }
    • 在自建Spark集群上运行测试程序
      使用以下spark-submit命令向自建Spark集群中提交运行Terasort基准测试的Spark程序。
      ./bin/spark-submit \
      --class com.aliyun.dla.perf.terasort.TeraSort \
      --driver-memory 8G \
      --driver-cores 2 \
      --executor-cores 2 \
      --executor-memory 6G \
      --num-executors 19 \
      --name terasort-sort-1000g \
      --conf yarn.nodemanager.local-dirs=/mnt/disk1/yarn \
      --conf spark.hadoop.mapreduce.fileoutputcommitter.algorithm.version=2 \
      --conf spark.default.parallelism=2000 \
      --conf spark.yarn.executor.memoryOverhead=2000 \
      /dla-spark-perf.jar(填写测试jar包的路径) \
      --input hdfs://test/terasort/input/1T(更改为测试数据地址)--output hdfs://test/terasort/output/1t/(更改为您定义的输出地址)--optimized false --shuffle-part 2000
  3. 记录测试结果

    记录DLA Spark和自建Spark运行Terasort基准测试的耗时。

场景二:10 TB测试数据下DLA Spark+OSS与自建Hadoop+Spark性能对比
  1. 准备测试数据
    • 在OSS上生成10 TB Terasort测试数据
      登录Data Lake Analytics管理控制台,在Serverless Spark > 作业管理页签下,提交运行生成10 TB Terasort测试数据的Spark作业。示例如下:
      {
          "args": [
              "10000g",
              "oss://<bucket-name>/<输出文件夹路径>",  #您的Terasort测试数据存放的OSS路径,例如oss://test-bucket/terasort/input/10T。
              "true"
          ],
          "file": "<Jar包的OSS路径>",  #上文中您Jar包上传的OSS路径,例如oss://test/performance/dla-spark-perf.jar。
          "name": "TeraGen-1T",
          "className": "com.aliyun.dla.perf.terasort.TeraGen",
          "conf": {
              "spark.dla.connectors": "oss",
              "spark.hadoop.job.oss.fileoutputcommitter.enable": "true",
              "spark.hadoop.mapreduce.fileoutputcommitter.algorithm.version": 2,
              "spark.driver.resourceSpec": "medium",
              "spark.executor.resourceSpec": "medium",
              "spark.default.parallelism": "20000",
              "spark.executor.memoryOverhead": 2000,
              "spark.executor.instances": 39
          }
      }
    • 在自建Hadoop上生成10 TB Terasort测试数据
      使用spark-submit命令向自建Spark集群中提交运行生成10 TB Terasort测试数据的Spark程序。示例如下:
      ./bin/spark-submit \
      --class com.aliyun.dla.perf.terasort.TeraGen \
      --executor-cores 2 \
      --executor-memory 6G \
      --num-executors 39 \
      --driver-memory 8G \
      --driver-cores 2 \
      --name terasort-sort-1000g \
      --conf yarn.nodemanager.local-dirs=/mnt/disk1/yarn(配置地址到您挂载的数据盘上)\
      --conf spark.hadoop.mapreduce.fileoutputcommitter.algorithm.version=2 \
      --conf spark.yarn.executor.memoryOverhead=2000 \
      --conf spark.default.parallelism=20000 \
      /dla-spark-perf.jar(填写测试jar包的路径)1000g hdfs://test/terasort/input/1T(填写测试数据的输出路径)
  2. 运行测试程序
    • 在DLA Spark上运行测试程序
      登录Data Lake Analytics管理控制台,在Serverless Spark > 作业管理页签下,提交运行Terasort基准测试的Spark作业。示例如下:
      {
          "args": [
              "--input",
              "<上述步骤生成的oss测试数据的路径>", #例如oss://test-bucket/terasort/input/10T。
              "--output",
              "<经过Terasort测试程序运行完成后的输出文件夹路径>", #例如oss://test-bucket/terasort/output/10T。
              "--optimized",
              "true",
              "--shuffle-part",
              "2000"
          ],
          "file": "<您上传的测试所需要的jar文件的oss路径>", #例如oss://test/performance/dla-spark-perf.jar。
          "name": "Terasort-10T",
          "className": "com.aliyun.dla.perf.terasort.TeraSort",
          "conf": {
              "spark.dla.connectors": "oss",
              "spark.hadoop.job.oss.fileoutputcommitter.enable": "true",
              "spark.hadoop.mapreduce.fileoutputcommitter.algorithm.version": 2,
              "spark.driver.resourceSpec": "medium",
              "spark.executor.resourceSpec": "medium",
              "spark.default.parallelism": "2000",
              "spark.executor.memoryOverhead": 2000,
              "spark.executor.instances": 39
          }
      }
    • 在自建Spark集群上运行测试程序
      使用以下spark-submit命令向自建Spark集群中提交运行Terasort基准测试的Spark程序。
      ./bin/spark-submit \
      --class com.aliyun.dla.perf.terasort.TeraSort \
      --driver-memory 8G \
      --driver-cores 2 \
      --executor-cores 2 \
      --executor-memory 6G \
      --num-executors 19 \
      --name terasort-sort-1000g \
      --conf yarn.nodemanager.local-dirs=/mnt/disk1/yarn \
      --conf spark.default.parallelism=20000 \
      --conf spark.yarn.executor.memoryOverhead=2000 \
      /dla-spark-perf.jar(填写测试jar包的路径)\
      --input hdfs://test/terasort/input/10T(更改为测试数据地址)--output hdfs://test/terasort/output/10t/(更改为您定义的输出地址)--optimized false --shuffle-part 20000
  3. 记录测试结果

    记录DLA Spark和自建Spark运行Terasort基准测试的耗时。

场景三:1 TB测试数据下DLA Spark+用户自建Hadoop集群与自建Hadoop+Spark性能对比
  1. 准备测试数据
    在自建Hadoop上生成1 TB Terasort测试数据。使用spark-submit命令向自建Spark集群中提交运行生成1 TB Terasort测试数据的Spark程序。示例如下:
    ./bin/spark-submit \
    --class com.aliyun.dla.perf.terasort.TeraGen \
    --executor-cores 2 \
    --executor-memory 6G \
    --num-executors 19 \
    --driver-memory 8G \
    --driver-cores 2 \
    --name terasort-sort-1000g \
    --conf yarn.nodemanager.local-dirs=/mnt/disk1/yarn(配置地址到您挂载的数据盘上)\
    --conf spark.hadoop.mapreduce.fileoutputcommitter.algorithm.version=2 \
    --conf spark.yarn.executor.memoryOverhead=2000 \
    --conf spark.default.parallelism=2000 \
    /dla-spark-perf.jar(填写测试jar包的路径)1000g hdfs://test/terasort/input/1T(填写测试数据的输出路径)
  2. 运行测试程序
    • 在DLA Spark上运行测试程序
      说明 通过DLA Spark访问自建Hadoop集群需要配置打通VPC网络,具体DLA Spark连接VPC网络下的HDFS相关参数的含义和配置步骤,请参见Hadoop
      登录Data Lake Analytics管理控制台,在Serverless Spark > 作业管理页签下,提交运行Terasort基准测试的Spark作业。示例如下:
      {
          "args": [
              "--input",
              "<上述步骤生成的oss测试数据的路径>", #例如hdfs://test/terasort/input/1T。
              "--output",
              "<经过Terasort测试程序运行完成后的输出文件夹路径>", #例如hdfs://test/terasort/output/1t/。
              "--optimized",
              "false",
              "--shuffle-part",
              "2000"
          ],
          "file": "<您上传的测试所需要的jar文件的oss路径>", #例如oss://test/performance/dla-spark-perf.jar。
          "name": "TeraSort-HDFS",
          "className": "com.aliyun.dla.perf.terasort.TeraSort",
          "conf": {
              "spark.dla.eni.enable": "true",
              "spark.dla.eni.vswitch.id": "vsw-xxxxx",
              "spark.dla.eni.security.group.id": "sg-xxxx",
              "spark.hadoop.mapreduce.fileoutputcommitter.algorithm.version": 2,
              "spark.driver.resourceSpec": "medium",
              "spark.hadoop.dfs.namenode.rpc-address.<nameservices>.nn2": "xxxx2:8020",
              "spark.hadoop.dfs.namenode.rpc-address.<nameservices>.nn1": "xxxx1:8020",
              "spark.hadoop.dfs.ha.automatic-failover.enabled.<nameservices>": "true",
              "spark.hadoop.dfs.namenode.http-address.<nameservices>.nn1": "xxxx1:50070",
              "spark.executor.resourceSpec": "medium",
              "spark.hadoop.dfs.nameservices": "<nameservices>",
              "spark.hadoop.dfs.client.failover.proxy.provider.<nameservices>": "org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider",
              "spark.hadoop.dfs.namenode.http-address.<nameservices>.nn2": "xxxx2:50070",
              "spark.hadoop.dfs.ha.namenodes.<nameservices>": "nn1,nn2",
              "spark.executor.memoryOverhead": 2000,
              "spark.default.parallelism": "2000",
              "spark.executor.instances": 19
          }
    • 在自建Spark集群上运行测试程序
      使用以下spark-submit命令向自建Spark集群中提交运行Terasort基准测试的Spark程序。
      ./bin/spark-submit \
      --class com.aliyun.dla.perf.terasort.TeraSort \
      --driver-memory 8G \
      --driver-cores 2 \
      --executor-cores 2 \
      --executor-memory 6G \
      --num-executors 19 \
      --name terasort-sort-1000g \
      --conf yarn.nodemanager.local-dirs=/mnt/disk1/yarn \
      --conf spark.hadoop.mapreduce.fileoutputcommitter.algorithm.version=2 \
      --conf spark.default.parallelism=2000 \
      --conf spark.yarn.executor.memoryOverhead=2000 \
      /dla-spark-perf.jar(填写测试jar包的路径)\
      --input hdfs://test/terasort/input/1T(更改为测试数据地址)--output hdfs://test/terasort/output/1t/(更改为您定义的输出地址)--optimized false --shuffle-part 2000
  3. 记录测试结果

    记录DLA Spark和自建Spark运行Terasort基准测试的耗时。