EMR集群运行TPC-DS在云盘和OSS中的对比

1.简介

        TPC-DS是大数据领域最为知名的Benchmark标准。本文介绍使用阿里云EMR集群运行TPC-DS在云盘和OSS中的表现对比。

2.环境准备

1.创建EEMR-5.10.1集群

        1个master,2个core,3台机器都s是4c16g。云盘使用ESSD云盘,OSS使用OSS-HDFS也就是jindofs服务,存储类型为标准存储。

2.安装Git和Maven

sudo yum install -y git maven

3.下载TPC-DS Benchmark工具。

git clone https://github.com/hortonworks/hive-testbench.git
//如果访问github失败可以手动下载
//https://github.com/hortonworks/hive-testbench/archive/hdp3.zip?spm=a2c4g.11186623.0.0.2aef5cb4OKS4v0&file=hdp3.zip

4.编译并打包数据生成器

cd hive-testbench
./tpcds-build.sh

5.生成并加载数据

1.检查hive数据库是否存在

hive -e "desc database tpcds_bin_partitioned_orc_xx"

2.清理已经存在的数据库 

hive -e "drop database tpcds_bin_partitioned_orc_xx cascade"

3.配置Hive服务地址

        tpcds-setup.sh脚本默认配置的Hive服务地址与EMR集群环境不一致,所以需要将脚本中HiveSever的地址替换为EMR集群中的Hive服务地址。具体命令如下:

sed -i 's/localhost:2181\/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2?tez.queue.name=default/master-1-1:10000\//' tpcds-setup.sh
//脚本默认配置的Hive服务地址为:jdbc:hive2://localhost:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2?tez.queue.name=default。通过上述命令替换后的Hive服务地址为:jdbc:hive2://master-1-1:10000/。

4.修复开源工具配置问题

        部分参数在Hive 2和Hive 3等开源版本中不支持,继续使用TPC-DS会导致作业报错,所以需要参考以下命令替换参数。

sed -i 's/hive.optimize.sort.dynamic.partition.threshold=0/hive.optimize.sort.dynamic.partition=true/' settings/*.sql

5.生成并加载数据。

        生成的数据可以保存在HDFS和OSS中,2者的区别就是创建库的时候给定存储的位置不一样。如果使用HDFS我们不用手动创建数据库,使用OSS我们手动创建数据库并指定数据库存储在OSS中。

1.使用HDFS存储数据的场景。

        MR集群默认将TPC-DS Table数据保存在HDFS上。执行如下命令生成并加载数据:

FORMAT=parquet ./tpcds-setup.sh xx //xx我们最开始写2就行了,表示生成2G的数据,FORMAT默认使用orc,如果生成失败则重新执行一次

2.使用OSS存储数据的场景

        通过EMR存储和计算分离的架构能力,可以很方便的做到将数据保存在OSS。具体操作步骤如下:

.//创建数据库并设置数据库使用的存储位置是oss
create database if not exists oss_tpcds_bin_partitioned_orc_xx;
//需要改成和EMR集群在同一地域的OSS Bucket名称。
alter database oss_tpcds_bin_partitioned_orc_xx set location 'oss:///warehouse/oss_tpcds_bin_partitioned_orc_xx.db';
//修改加载数据库的脚本
cp tpcds-setup.sh oss-tpcds-setup.sh 
//DATABASE=tpcds_bin_partitioned_${FORMAT}_${SCALE}改为DATABASE=oss_tpcds_bin_partitioned_${FORMAT}_${SCALE},将数据加载到前面创建的库中去
vim oss-tpcds-setup.sh 
//生成并加载数据,执行完成之后我们就可以看到oss的buket中已经有数据了
export FORMAT=parquet 
nohup ./oss-tpcds-setup.sh xx

6.运行TPC-DS SQL

1.使用Hive运行TPC-DS SQL

        可以运行单个SQL也可以批量运行SQL,批量运行的SQL有99个sql,存放在sample-queries-tpcds工作目录下。

1.单独运行

cd sample-queries-tpcds
hive --database tpcds_bin_partitioned_orc_xx
set hive.execution.engine=tez;
source query1.sql;

2.批量运行

cd hive-testbench
# 生成一个Hive配置文件,并指定Hive执行引擎为Tez。
echo 'set hive.execution.engine=tez;' > sample-queries-tpcds/testbench.settings
nohup ./runSuite.pl tpcds xx > tpc-ds-orc-2-test.csv



//如果要执行存储在oss上的数据,如果要执行的parquet的表,也相应改一下就行
cp runSuite.pl oss-runSuite.pl
//将tpcds' => "tpcds_bin_partitioned_orc_$scale"改为tpcds' => "oss_tpcds_bin_partitioned_orc_$scale"
vim oss-runSuite.pl
nohup ./oss-runSuite.pl tpcds xx > oss-tpc-ds-orc-2-test.csv

2.使用Spark运行TPC-DS SQL
7.云盘和OSS对比

总体来说oss比云盘慢了20%

EMR集群运行TPC-DS在云盘和OSS中的对比_第1张图片

你可能感兴趣的:(阿里云,hive,数据库,hadoop)