发布于: 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 一样的全托管、弹性伸缩、低成本。
相关文章