本次测试采用3种不同的测试场景,针对开源自建的Hadoop+Spark集群与阿里云云原生数据湖分析DLA Spark在执行Terasort基准测试的性能做了对比分析。您可以按照本文介绍自行测试对比,快速了解云原生数据湖分析(DLA)Spark引擎的性价比数据。
背景信息
本文档将分别针对3种测试场景进行Terasort基准测试。3种测试场景的场景说明和配置要求,请参考环境配置要求。
准备工作
- 下载Terasort测试相关的Jar包。
在使用Spark进行Terasort基准测试时,需要准备测试数据和Terasort测试程序,DLA提供了一个Jar包,里面包含了可以生成Terasort测试数据的Spark应用和进行Terasort基准测试的Spark应用。
- 将下载下来的Jar包上传到您的OSS上。
在后续测试过程中,DLA Spark需要使用这个Jar包来生成Terasort测试数据以及进行Terasort基准测试,因此需要把该Jar包上传到您的OSS上。
操作步骤
场景一:1 TB测试数据下DLA Spark+OSS与自建Hadoop+Spark集群性能对比
- 准备测试数据
- 在OSS上生成1 TB Terasort测试数据
登录Data Lake Analytics管理控制台,在 页签下,提交运行生成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(填写测试数据的输出路径)
- 在OSS上生成1 TB Terasort测试数据
- 运行测试程序
- 在DLA Spark上运行测试程序
登录Data Lake Analytics管理控制台,在 页签下,提交运行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
- 在DLA Spark上运行测试程序
- 记录测试结果
记录DLA Spark和自建Spark运行Terasort基准测试的耗时。
场景二:10 TB测试数据下DLA Spark+OSS与自建Hadoop+Spark性能对比
- 准备测试数据
- 在OSS上生成10 TB Terasort测试数据
登录Data Lake Analytics管理控制台,在 页签下,提交运行生成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(填写测试数据的输出路径)
- 在OSS上生成10 TB Terasort测试数据
- 运行测试程序
- 在DLA Spark上运行测试程序
登录Data Lake Analytics管理控制台,在 页签下,提交运行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
- 在DLA Spark上运行测试程序
- 记录测试结果
记录DLA Spark和自建Spark运行Terasort基准测试的耗时。
场景三:1 TB测试数据下DLA Spark+用户自建Hadoop集群与自建Hadoop+Spark性能对比
- 准备测试数据
在自建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(填写测试数据的输出路径)
- 运行测试程序
- 在DLA Spark上运行测试程序
说明 通过DLA Spark访问自建Hadoop集群需要配置打通VPC网络,具体DLA Spark连接VPC网络下的HDFS相关参数的含义和配置步骤,请参见Hadoop。登录Data Lake Analytics管理控制台,在 页签下,提交运行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
- 在DLA Spark上运行测试程序
- 记录测试结果
记录DLA Spark和自建Spark运行Terasort基准测试的耗时。