by Ravikiran Rao, Vishwa Gupta 和 Suvojit Dasgupta 发表于 2025年1月13日,来源于 、、 和
本文展示了如何利用 AWS Glue 和 Spark 实现大规模数据的高效批量导入到 Amazon OpenSearch服务。我们将探讨数据导入的几种方法、实际示例及最佳实践,以帮助构建优化和可扩展的数据管道。
组织不断努力处理和分析庞大数据量,以提取可行的见解。有效的数据导入和搜索能力在日志分析、应用搜索、企业搜索等用例中变得至关重要。这些用例需要一个强大的管道,能够处理高数据量并支持高效数据探索。
是一种开源的大规模数据处理工具,以其速度、可扩展性和易用性而广受认可。它能处理和转换庞大的数据集,使其成为现代数据工程中不可或缺的工具。 是一个以社区驱动的搜索和分析解决方案,使组织能够无缝搜索、聚合、可视化和分析数据。Spark 和 OpenSearch服务结合在一起,为构建强大的数据管道提供了引人注目的解决方案。然而,从 Spark 导入数据到 OpenSearch服务可能面临挑战,尤其是涉及多样的数据源时。
本文重点讨论如何利用 Spark 在 中无缝导入数据到 OpenSearch服务。我们将涵盖批量导入的方法,分享实用示例,并讨论最佳实践,帮助大家构建优化和可扩展的数据管道。
AWS Glue 是一种无服务器的数据集成服务,简化了分析、机器学习和应用开发的数据准备和集成任务。本文着重于使用 Spark 在 AWS Glue中将批量数据导入 OpenSearch 服务。
AWS Glue 提供多种集成选项,可与 OpenSearch 服务结合使用,包括多种开源和 AWS 管理的库:
接下来的部分中,我们将详细探讨每种集成方法,指导您完成设置和实施。随着讨论的深入,我们将逐步构建下图所示的架构图,为在 AWS上创建强大的数据管道提供清晰的路径。每种实现是独立于其他实现的。我们之所以选择单独展示它们,是因为在实际情况下,三种集成方法中通常仅可能使用其中一种。
删除)
您可以在附带的 中找到代码库。接下来的部分中,我们将逐步实现解决方案。
在部署此解决方案之前,请确认满足以下前提条件:
将仓库克隆到本地机器并设置 BLOG_DIR 环境变量。所有相对路径默认假设 BLOG_DIR 已设置为您机器上的仓库位置。如果没有使用
BLOG_DIR,请相应调整路径。
bash git clone [email protected]:aws-samples/opensearch-glue-integration- patterns.git cd opensearch-glue-integration-patterns export BLOG_DIR=$(pwd)
本文的主要目的是演示如何在 AWS Glue 中使用提到的库从 Spark 导入数据到 OpenSearch服务。虽然我们专注于这一核心主题,但为了确保集成示例能够顺利运行,还需要预先配置多个关键 AWS 组件,比如 (Amazon VPC)、多个
、(AWSKMS)密钥、一个 (AmazonS3)桶、一个 AWS Glue 角色,以及一个包含 OpenSearch 服务和 Elasticsearch 域的 OpenSearch服务集群。为简化设置,我们已使用 cloudformation/opensearch-glue-infrastructure.yaml
模板自动化了对这一核心基础设施的预配置。
CloudFormation 模板将部署所需的网络组件(例如 VPC 和子网)、
日志记录、AWS Glue 角色,以及实现建议架构所需的 OpenSearch 服务和 Elasticsearch 域。使用强密码(8–128个字符,其中至少包含三种字符类型:小写字母、大写字母、数字或特殊字符,且不包含 /、“ 或空格)并遵循您组织的安全标准来设置
ESMasterUserPassword 和 OSMasterUserPassword。以下命令示范:
bash cd ${BLOG_DIR}/cloudformation/ aws cloudformation deploy \ --template- file ${BLOG_DIR}/cloudformation/opensearch-glue-infrastructure.yaml \ --stack- name GlueOpenSearchStack \ --capabilities CAPABILITY_NAMED_IAM \ --region <AWS_REGION> \ --parameter-overrides \ ESMasterUserPassword=<ES_MASTER_USER_PASSWORD> \ OSMasterUserPassword=<OS_MASTER_USER_PASSWORD>
您应该在资源成功配置后看到 "Successfully created/updated stack – GlueOpenSearchStack"
的成功消息。配置此 CloudFormation 堆栈通常需要大约 30 分钟才能完成。
GlueOpenSearchStack 堆栈,并确认其状态为 CREATE_COMPLETE 。![CloudFormation删除)
您可以在 资源 选项卡中查看已部署的资源,屏幕快照未显示所有创建的资源。
![CloudFormation删除)
在这一部分中,我们收集关键信息,包括 S3 桶名称及 OpenSearch 服务和 Elasticsearch域端点。这些细节对于后续部分代码的执行至关重要。
使用以下 AWS CLI 命令从 CloudFormation 堆栈获取并保存输出值至名为
GlueOpenSearchStack_outputs.txt 的文件。我们将在后续步骤中引用该文件中的值。
`bash aws cloudformation describe-stacks \ --stack-name GlueOpenSearchStack
--query 'sort_by(Stacks。
我们特别请求您下载 2022 年 12 月的数据集,因为我们已经用这特定数据集对解决方案进行了测试:
`bash S3_BUCKET_NAME=$(awk -F '|' '$2 ~ /S3Bucket/ {gsub(/^ 加载 OpenSearch 服务索引。通过 AWS Glue 笔记本,我们将演示此实现方法,采用 。
为了演示导入机制,我们提供了详细说明的 Spark-and-OpenSearch-Code-Steps.ipynb
笔记本。请参考以下步骤,并与笔记本中的说明一起执行。
完成下述步骤:
![打开 AWS Glue删除)
${BLOG_DIR}/glue_jobs/Spark-and-OpenSearch-Code-Steps.ipynb 的笔记本文件。GlueOpenSearchStack-GlueRole-* 开头的 AWS Glue 角色。![打开 AWS Glue删除)
Spark-and-OpenSearch-Code-Steps),然后选择 保存 。![AWS Glue OpenSearch删除)
按照以下步骤更新笔记本中的占位符:
bash cd ${BLOG_DIR} awk -F '|' '$2 ~ /GlueInteractiveSessionConnectionName/ {gsub(/^[ \t]+|[ \t]+$/, "", $3); print $3}' ${BLOG_DIR}/GlueOpenSearchStack_outputs.txt
s3_bucket 填充为桶名。您可以通过执行以下命令获取 S3 桶的名称:bash awk -F '|' '$2 ~ /S3Bucket/ {gsub(/^[ \t]+|[ \t]+$/, "", $3); print $3}' ${BLOG_DIR}/GlueOpenSearchStack_outputs.txt
<OPEN-SEARCH-DOMAIN-WITHOUT-HTTPS> 替换为 OpenSearch 服务域名。通过执行以下命令获取域名:`bash awk -F '|' '$2 ~ /OpenSearchDomainEndpoint/ {gsub(/^ 加载 Elasticsearch 索引。我们将使用 AWS Glue 作为 Spark 引擎来演示此实现。
完成以下步骤以设置笔记本:
![打开 AWS Glue笔记本的控制台页面](https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766
Leave a Reply