通过EMR运行基于OSS-HDFS服务的TPC-DS Benchmark了解数据查询和分析的性能表现_对象存储(OSS)-阿里云帮助中心 (aliyun.com)
鲲鹏大数据测试指导:
安装Git-部署环境配置-ElasticSearch组件测试工具Esrally 使用指导-测试指导-测试指导-鲲鹏BoostKit大数据使能套件开发文档-鲲鹏社区 (hikunpeng.com)
1. 测试环境
1.1 硬件环境
虚拟机4台,采用1Master + 3 worker 的配置。
CPU:8核
内存:32GB
磁盘:1TB
1.2 软件环境
组件 |
自建集群开源版本 |
下载地址 |
Zookeeper |
apache-zookeeper-3.6.3-bin.tar.gz |
|
Hadoop |
hadoop-3.3.1.tar.gz |
|
Hive |
apache-hive-3.1.3-bin.tar.gz |
|
Spark |
spark-3.3.1-bin-hadoop3.tgz |
|
obsa-hdfs |
hadoop-huaweicloud-3.1.1-hw-54.0.jar |
obsa-hdfs/release at master · huaweicloud/obsa-hdfs · GitHub |
oss-hdfs |
jindosdk-6.6.0-linux-el7-aarch64.tar.gz |
|
hadoop-cos |
hadoop-cos v8.3.5 |
|
tpc-ds |
hive-testbench-hdp3 |
2. 集群环境搭建
2.1 Hadoop集群搭建
服务配置
|
ecs-bigdata-poc-0001 |
ecs-bigdata-poc-0002 |
ecs-bigdata-poc-0003 |
ecs-bigdata-poc-0004 |
HDFS
|
NameNode |
SecondaryNameNode DataNode |
DataNode |
DataNode |
YARN |
ResourceManager |
NodeManager |
NodeManager |
NodeManager |
2.1.1 主机配置
1. 编辑hosts文件,配置域名映射:vim /etc/hosts
192.168.10.111 hadoop111
192.168.10.112 hadoop112
192.168.10.113 hadoop113
192.168.10.114 hadoop114
2.节点之间 ssh 互信,配置免密登录。
在各台节点上分别执行以下命令:
ssh-keygen -t rsa (回车,然后敲三个回车,表示没有密码)
ssh-copy-id hadoop111
ssh-copy-id hadoop112
ssh-copy-id hadoop113
ssh-copy-id hadoop114
3. 安装Java
# tar zxvf jdk-8u391-linux-x64.tar.gz -C /opt/module/
# mv jdk1.8.0_391/ jdk
4.配置环境变量
# vim /etc/profile.d/my_env.sh
添加以下内容
# JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_371
export PATH=$PATH:$JAVA_HOME/bin
5. 验证java是否安装成功
# source /etc/profile
# java -version
java version "1.8.0_391"
Java(TM) SE Runtime Environment (build 1.8.0_391-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.391-b13, mixed mode)
2.1.2 core-site.xml
<configuration>
<!-- 指定NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop111:8020</value>
</property><!-- 指定hadoop数据的临时存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/srv/Bigdata/hadoop/data1/tmp/,/srv/Bigdata/hadoop/data2/tmp/,
/srv/Bigdata/hadoop/data3/tmp/</value>
</property><!-- 配置HDFS网页登录使用的静态用户为root -->
<property>
<name>hadoop.http.staticuser.user</name>
<value>root</value>
</property><!-- 配置该root(superUser)允许通过代理访问的主机节点 -->
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property><!-- 配置该root(superUser)允许通过代理用户所属组 -->
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property><!-- 配置该root(superUser)允许通过代理的用户访问-->
<property>
<name>hadoop.proxyuser.root.users</name>
<value>*</value>
</property><property>
<name>fs.obs.impl</name>
<value>org.apache.hadoop.fs.obs.OBSFileSystem</value>
</property><property>
<name>fs.AbstractFileSystem.obs.impl</name>
<value>org.apache.hadoop.fs.obs.OBS</value>
</property><property>
<name>fs.obs.access.key</name>
<value>xxx</value>
</property><property>
<name>fs.obs.secret.key</name>
<value>xxx</value>
</property><property>
<name>fs.obs.endpoint</name>
<value>obs.cn-north-4.myhuaweicloud.com</value>
</property><property>
<name>fs.obs.buffer.dir</name>
<value>/srv/Bigdata/hadoop/data1/obs,
/srv/Bigdata/hadoop/data2/obs,
/srv/Bigdata/hadoop/data3/obs
</value>
</property><property>
<name>fs.obs.bufferdir.verify.enable</name>
<value>FALSE</value>
</property><property>
<name>fs.obs.readahead.policy</name>
<value>advance</value>
</property><property>
<name>fs.obs.readahead.range</name>
<value>4194304</value>
</property><!--
<property>
<name>fs.trash.interval</name>
<value>1440</value>
</property><property>
<name>fs.trash.checkpoint.interval</name>
<value>1440</value>
</property>
--><!-- OSS -->
<property>
<name>fs.AbstractFileSystem.oss.impl</name>
<value>com.aliyun.jindodata.oss.JindoOSS</value>
</property><property>
<name>fs.oss.impl</name>
<value>com.aliyun.jindodata.oss.JindoOssFileSystem</value>
</property><property>
<name>fs.oss.accessKeyId</name>
<value>xxx/value>
</property><property>
<name>fs.oss.accessKeySecret</name>
<value>xx</value>
</property><property>
<name>fs.oss.endpoint</name>
<value>oss-cn-hangzhou.aliyuncs.com</value>
</property></configuration>
2.1.3 hdfs-site.xml
<configuration>
<!-- nn web端访问地址-->
<property>
<name>dfs.namenode.http-address</name>
<value>hadoop111:9870</value>
</property>
<!-- 2nn web端访问地址-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop112:9868</value>
</property>
<!-- 测试环境指定HDFS副本的数量 -->
<property>
<name>dfs.replication</name>
<value>3</value>
</property><!-- NameNode 数据存储目录,默认:file://${hadoop.tmp.dir}/dfs/name -->
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///srv/Bigdata/hadoop/data1/nn,file:///srv/Bigdata/hadoop/data2/nn,
file:///srv/Bigdata/hadoop/data3/nn</value>
</property><!-- DataNode 数据存储目录,默认:file://${hadoop.tmp.dir}/dfs/data -->
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///srv/Bigdata/hadoop/data1/dn,file:///srv/Bigdata/hadoop/data2/dn,
file:///srv/Bigdata/hadoop/data3/dn</value>
</property></configuration>
2.1.4 yarn-site.xml
`yarn.scheduler.minimum-allocation-mb` 和 `mapreduce.map.memory.mb` 是在不同层级进行资源调度的参数。
- `yarn.scheduler.minimum-allocation-mb` 是指YARN集群中每个Container所能分配的最小内存量。这个参数是由YARN调度器进行管理,用来确保每个Container至少分配到指定的内存量。
- `mapreduce.map.memory.mb` 是指MapReduce作业中每个Map任务所占用的内存量。这个参数是由MapReduce框架进行管理,用来指定每个Map任务所需的内存大小。一个容器可以执行多个Map任务,具体取决于Container的资源配置以及作业的需求。在设置MapReduce作业时,通常会根据作业的需求设置`mapreduce.map.memory.mb`参数,而`yarn.scheduler.minimum-allocation-mb`则由YARN集群的整体资源配置来确定。
因此,一个Container可以执行多个Map任务,前提是分配给该Container的资源足够支持这些Map任务的运行。
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.nodemanager.local-dirs</name>
<