发布于: Oct 14, 2022

  • EMR 集群需要连接到 JuiceFS 元数据服务。它需要一个 NAT 网关来访问公共互联网。
  • EMR 集群的每个节点都需要安装 JuiceFS Hadoop 扩展 JAR 包,才能使用 JuiceFS 作为存储后端。
  • JuiceFS 只存储元数据,原始数据仍然存储在您的账户 S3 中。
  • 注册 JuiceFS 账户。
  • 在 JuiceFS 控制台上创建一个卷。选择你的 Amazon Web Services 账户区域,并创建一个新卷。请在 “高级选项” 中将 “压缩” 项改为 Uncompressed

 

注意:JuiceFS 文件系统默认启用 lz4 算法对数据进行压缩。在大数据分析场景中经常使用 ORC 或者 Parquet 等列存文件格式,查询过程中往往只需要读取文件中的一部分,如果启用压缩算法,则必须读取完整 block 解压后才能获得需要的部分,这样会造成读放大。关闭压缩后,则可以直接读取部分数据

 

  • JuiceFS 控制台获取访问令牌和桶名。

启动 Amazon Web Services CloudFormation Stack

  • 从 Amazon Web Services 中国区域控制台中启动
  • 从 Amazon Web Services 海外区域控制台中启动
     
  • 填写配置项

参数说明

参数名 解释
EMRClusterName EMR 集群名称
MasterInstanceType 主节点实例类型
CoreInstanceType 核心节点类型
NumberOfCoreInstances 核心节点数量
JuiceFSAccessToken JuiceFS 访问令牌
JuiceFSVolumeName JuiceFS 存储卷 Volume 名称
JuiceFSCacheDir 本地缓存目录,可以指定多个文件夹,用冒号 : 分隔,也可以使用通配符(比如 * )
JuiceFSCacheSize 磁盘缓存容量,单位 MB。如果配置多个目录,这是所有缓存目录的空间总和
JuiceFSCacheFullBlock 是否缓存连续读数据,在磁盘空间有限或者磁盘性能低下的时候,设置为 false

启动 CloudFormation Stack 完成部署后可以在 EMR 服务中检查你的集群。

进入硬件选项卡。

找到你的 Master 节点。

通过 Amazon Web Services Systems Manager Session Manager 会话管理器连接到主节点。

登录到 Master 节点。

接下来验证集群环境。

$ sudo su hadoop
# JFS_VOL 是一个预制的环境变量,指向您所在的JuiceFS存储卷
$ hadoop fs -ls jfs://${JFS_VOL}/     # 别忘了最后一个“斜线”
$ hadoop fs -mkdir jfs://${JFS_VOL}/hello-world
$ hadoop fs -ls jfs://${JFS_VOL}/

运行 TPC-DS 基准测试

  • 通过 Amazon Web Services Systems Manager Session Manager 会话管理器登录到集群主节点,然后将当前用户改为 hadoop。
$ sudo su hadoop
  • 解压 benchmark-sample.zip。
$ cd && unzip benchmark-sample.zip
  • 运行 TPC-DS 测试。
$ cd benchmark-sample
$ screen -L

# ./emr-benchmark.py 为 benchmark 测试程序
# 它会生成 TPC-DS 基准的测试数据,并执行测试集(从 q1.sql 到 q10.sql)
# 测试会包含一下部分:
# 1. 生成 TXT 测试数据
# 2. 将 TXT 数据转成 Parquet 格式
# 3. 将 TXT 数据转成 Orc 格式
# 4. 执行 Sql 测试用例并统计 Parquet 和 Orc 格式的耗时

# 支持的参数
# --engine                 计算引擎选择 hive 或 spark
# --show-plot-only         只在控制台中显示柱状图
# --cleanup, --no-cleanup  是否在每次测试时清除 benchmark 数据,默认:否
# --gendata, --no-dendata  是否在每次测试时生成数据,默认:是
# --restore                从已有的数据中恢复数据库,此选项需要在 --gendata 打开后才生效
# --scale                  数据集大小(例如:100 代表 100GB 数据)
# --jfs                    打开 uiceFS benchmark 测试
# --s3                     打开 S3 benchmark 测试
# --hdfs                   打开 HDFS benchmark 测试

# 请确保机型有足够的空间存储测试数据,例如:500GB 推荐 Core Node 使用 m5d.4xlarge 或以上
# 关于机型存储空间选择请参考 https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-storage.html
$ ./emr-benchmark.py --scale 500 --engine hive --jfs --hdfs --s3 --no-cleanup --gendata
Enter your S3 bucket name for benchmark. Will create it if it doesn\'t exist: (请输入用来存放s3基准测试的桶名,若不存在则会创建一个新的) xxxx

$ cat tpcds-setup-500-duration.2021-01-01_00-00-00.res # 测试结果
$ cat hive-parquet-500-benchmark.2021-01-01_00-00-00.res # 测试结果
$ cat hive-orc-500-benchmark.2021-01-01_00-00-00.res # 测试结果

# 删除数据
$ hadoop fs -rm -r -f jfs://$JFS_VOL/tmp
$ hadoop fs -rm -r -f s3://<your-s3-bucketname-for-benchmark>/tmp
$ hadoop fs -rm -r -f "hdfs://$(hostname)/tmp/tpcds*"
  • 注意: Amazon Web Services Systems Manager Session Manager 会话管理器可能会超时导致终端连接断开,建议使用 screen -L 命令将会话保持在后台 screen 的日志会保存在当前目录下的 screenlog.0
  • 注意:若测试机器一共超过 10vcpu,需要开通 JuiceFS 专业版试用,例如:您有可能会遇到以下错误 juicefs[1234] <WARNING>: register error: Too many connections 样例输出
  • 删除 Stack

通过测试验证可以看到 JuiceFS 确实是弹性伸缩的全托管 HDFS 服务。可以为客户带来和 HDFS 一样的兼容性、一致性和接近的性能,和 Amazon S3 一样的全托管、弹性伸缩、低成本。

相关文章