我想在 AWS 上进行数据分析 – 实验1、实验2、实验3
背景
由于在个人领域需要进行数据分析,所以我决定试试看能否使用 AWS,并进行不断尝试和调整。我将记录下这个过程。
本次的目标是什么
找到适用于数据分析的 AWS 服务。
并且加深对这些服务的了解。
首先去谷歌搜索
尽管有许多选择,但以下的 AWS 官方漫画非常易懂。
数据湖是什么?
-> 数据的存储位置。非结构化数据也可以直接保存。
数据湖的主要利用方向如下所述。
-
- 收集数据
-
- 储存数据 <-> 数据目录
-
- 处理数据 <-> 数据目录
-
- 分析
- 可视化
数据存储在S3中。
数据处理和数据目录创建使用AWS Glue。
如果需要更高自由度的数据处理方法,可以使用AWS EMR。
亚马逊弹性 MapReduce(EMR)
Hadoop/Spark等是一种托管框架。
它具有高度自由和可扩展性的执行平台。
Hadoop 是什么?
Hadoop是一种开源的中间件,通过分布式处理技术实现大规模数据的存储和分析。
Spark是什么?
Apache Spark是一个开源框架,可以高速分布式处理大数据。
亚马逊Redshift
专注于大规模数据处理的数据仓库(DWH)。
通过快速而可扩展的DWH,可以访问S3条的数据。
数据仓库是什么?
DWH(数据仓库: Data Warehouse)是从各种系统中收集和整理数据的“仓库”。
据说亚马逊Redshift可以处理数TB级别的数据,这是关系型数据库无法胜任的。
因为我们要处理的数据规模最多只有几个GB,并且可能存在适合的其他服务,所以这次我们可能会选择其他服务。
亚马逊 Athena
通过使用标准的SQL语言,可以在S3上进行数据分析的无服务器交互式查询服务,适用于付费的实时交互式查询。
什么是即席查询?
只在场合中一次性使用的查询
动手操作
在这个网站上,有关于AWS各项服务的实践操作指南。
其中,数据湖实践(下方网址)是一个选项。
我正在使用下面的AWS服务,所以我觉得它们很符合我目前的需求(尤其是Glue、Athena和QuickSight)。
-
- Amazon VPC
-
- Amazon EC2
-
- AWS CloudFormation
-
- AWS IAM
-
- Amazon OpenSearch Service
-
- Amazon CloudWatch
-
- AWS Lambda
-
- Amazon OpenSearch Service
-
- Amazon Kinesis Data Firehose
-
- Amazon S3
-
- Amazon Athena
-
- Amazon QuickSight
-
- Amazon Redshift
-
- Amazon Redshift Spectrum
- AWS Glue
试试看,我们来尝试使用这个数据湖亲自操作一下。
我会尝试进行实操的体验
在数据湖实战中,似乎有三种选择模式可供选取。
-
- 构建近乎实时数据分析环境(SpeedLayer):实验室1 → 实验室2 → 实验室3
-
- 构建长期数据的批量分析环境(BatchLayer),并进行性能和成本优化:实验室1 → 实验室4 或 实验室5 → 实验室6
- 全部实施:实验室1 → 实验室2 → 实验室3 → 实验室4 → 实验室5 → 实验室6
既然这么辛苦,那就按照第三个选项“全部实施”的方向来构建吧。
这是最终的设计图。
实验1:准备阶段
第一部分:准备阶段
在 EC2 上创建密钥对。
第二部分:EC2环境建设
步骤1: 通过云形成在EC2上构建一个实例。
学习如何编写模板:TODO: (1-minilake_ec2.yaml)
听说在这个步骤中可以构建VPC并安装Fluentd。太厉害了。这就是所谓的基础设施代码化呀……。
实验2:实时可视化应用程序日志。
第一部分:打开 OpenSearch 服务的设置。
步骤1:启动OpenSearch服务
有一点堵塞。
以下的句子没有出现……。
[info]: #0 Connection opened to OpenSearch cluster => {.....
反而,会出现以下错误。
2022-01-01 17:38:12 +0900 [warn]: #0 failed to flush the buffer. retry_time=0 next_retry_seconds=2022-01-01 17:38:12 +0900 chunk="5d481349520709f026879bd3090f8419" error_class=Elasticsearch::Transport::Transport::Errors::Forbidden error="[403] "
2022-01-01 17:38:12 +0900 [warn]: #0 suppressed same stacktrace
20
看起来似乎是权限的问题。
切换到root用户后,可以通过cp命令运行。
# sudo su -
在这之后,
-
- host: OpenSearch Service のエンドポイント
-
- user: OpenSearch Service のマスターユーザー名
- password: OpenSearch Service のマスターパスワード
设定了之后,执行了下面的命令,但仍然出现了与之前相同的错误。
# /etc/init.d/td-agent restart
# tail -f /var/log/td-agent/td-agent.log
对下面的日志感到有些担忧。
[403] "
2022-01-01 18:10:11 +0900 [warn]: #0 /opt/td-agent/embedded/lib/ruby/gems/2.4.0/gems/elasticsearch-transport-5.0.4/lib/elasticsearch/transport/transport/base.rb:202:in `__raise_transport_error'
2022-01-01 18:10:11 +0900 [warn]: #0 /opt/td-agent/embedded/lib/ruby/gems/2.4.0/gems/elasticsearch-transport-5.0.4/lib/elasticsearch/transport/transport/base.rb:319:in `perform_request'
2022-01-01 18:10:11 +0900 [warn]: #0 /opt/td-agent/embedded/lib/ruby/gems/2.4.0/gems/elasticsearch-transport-5.0.4/lib/elasticsearch/transport/transport/http/faraday.rb:20:in `perform_request'
2022-01-01 18:10:11 +0900 [warn]: #0 /opt/td-agent/embedded/lib/ruby/gems/2.4.0/gems/elasticsearch-transport-5.0.4/lib/elasticsearch/transport/client.rb:131:in `perform_request'
2022-01-01 18:10:11 +0900 [warn]: #0 /opt/td-agent/embedded/lib/ruby/gems/2.4.0/gems/elasticsearch-api-5.0.4/lib/elasticsearch/api/actions/ping.rb:20:in `ping'
2022-01-01 18:10:11 +0900 [warn]: #0 /opt/td-agent/embedded/lib/ruby/gems/2.4.0/gems/fluent-plugin-elasticsearch-2.6.0/lib/fluent/plugin/out_elasticsearch.rb:218:in `client'
2022-01-01 18:10:11 +0900 [warn]: #0 /opt/td-agent/embedded/lib/ruby/gems/2.4.0/gems/fluent-plugin-elasticsearch-2.6.0/lib/fluent/plugin/out_elasticsearch.rb:451:in `rescue in send_bulk'
2022-01-01 18:10:11 +0900 [warn]: #0 /opt/td-agent/embedded/lib/ruby/gems/2.4.0/gems/fluent-plugin-elasticsearch-2.6.0/lib/fluent/plugin/out_elasticsearch.rb:445:in `send_bulk'
2022-01-01 18:10:11 +0900 [warn]: #0 /opt/td-agent/embedded/lib/ruby/gems/2.4.0/gems/fluent-plugin-elasticsearch-2.6.0/lib/fluent/plugin/out_elasticsearch.rb:432:in `write'
2022-01-01 18:10:11 +0900 [warn]: #0 /opt/td-agent/embedded/lib/ruby/gems/2.4.0/gems/fluentd-1.0.2/lib/fluent/plugin/output.rb:1093:in `try_flush'
2022-01-01 18:10:11 +0900 [warn]: #0 /opt/td-agent/embedded/lib/ruby/gems/2.4.0/gems/fluentd-1.0.2/lib/fluent/plugin/output.rb:1318:in `flush_thread_run'
2022-01-01 18:10:11 +0900 [warn]: #0 /opt/td-agent/embedded/lib/ruby/gems/2.4.0/gems/fluentd-1.0.2/lib/fluent/plugin/output.rb:439:in `block (2 levels) in start'
2022-01-01 18:10:11 +0900 [warn]: #0 /opt/td-agent/embedded/lib/ruby/gems/2.4.0/gems/fluentd-1.0.2/lib/fluent/plugin_helper/thread.rb:78:in `block in thread_create'
2022-01-01 18:10:12 +0900 [warn]: #0 failed to flush the buffer. retry_time=0 next_retry_seconds=2022-01-01 18:10:12 +0900 chunk="5d481a7018422269ab33b2f73af82bc4" error_class=Elasticsearch::Transport::Transport::Errors::Forbidden error="[403] "
如果将 fluent-plugin-elasticsearch 的版本设置为2.4.0,那会怎样呢?
如果卸载版本2.6.0,会有改善吗……?
执行下列命令。
# td-agent-gem uninstall -v 2.6.0 fluent-plugin-elasticsearch
# /etc/init.d/td-agent restart
# tail -f /var/log/td-agent/td-agent.log
出现相同的错误。
试一试卸载 2.4.0 版本,并尝试安装 2.6.0 版本。
# td-agent-gem uninstall -v 2.4.0 fluent-plugin-elasticsearch
Successfully uninstalled fluent-plugin-elasticsearch-2.4.0
# td-agent-gem list | grep plugin-elasticsearch
fluent-plugin-elasticsearch (2.6.0)
# /etc/init.d/td-agent restart
# tail -f /var/log/td-agent/td-agent.log
嗯,错误没有改变。
那么,版本可能是无关紧要的吧。
因为不太清楚原因,所以我决定重新创建一个 OpenSearch Service 的域名来试试。
我重新构建域名时意识到的情况。
[要素を追加] をクリックし、タイプに [IAM ARN] を選択、プリンシパルに「 ご自身のAWSアカウントID 」を入力、アクションに [許可] を選択
这个设置可能是错误的。
在尝试了多种方法后,结果发现原因在于
[要素を追加] をクリックし、タイプに [IPv4 アドレス] を選択、プリンシパルに「 Lab1で作成したインスタンスのパブリックIP 」を入力、アクションに [許可] を選択
在进行此设置时,由于输入了预设的公共IP地址,因此未获得许可。这花费了相当多的时间…嗯,这也是一次很好的学习经历。
点击了 [OpenSearch Dashboards 的 URL]。
{"Message":"User: anonymous is not authorized to perform: es:ESHttpGet"}
看到显示为”と”。试着查找原因。
唔,写在资源策略中的。
"arn:aws:iam::814937260541:root"
我觉得有点可疑,但看起来这个格式似乎是正确的。
如果这样的话,为什么无法访问呢?
在安全政策设置中,我忘记了以下的设定……
这种情况经常发生。
タイプに [IPv4 アドレス] を選択、プリンシパルに「 ご自身のIPアドレス 」を入力、アクションに [許可] を選択
这样就可以在Kibana中进行可视化了。
实验3: 应用程序日志的实时可视化和警报
第一部分:EC2的配置更改
步骤1:配置IAM角色
步骤2:对于OpenSearch的角色进行认证设置。
没有遇到任何问题,设置成功。
第二部分:云监控,开放搜索服务的设置更改。
步骤1:配置 CloudWatch Logs。
(Translated from English to Chinese)
步骤2:打开搜索服务的设置
步骤3:设置CloudWatch报警
顺利完成设置,没有遇到特别困难。
TODO: 对 CloudWatch 的熟练掌握。