我想在 AWS 上进行数据分析 – 实验1、实验2、实验3

背景

由于在个人领域需要进行数据分析,所以我决定试试看能否使用 AWS,并进行不断尝试和调整。我将记录下这个过程。

本次的目标是什么

找到适用于数据分析的 AWS 服务。
并且加深对这些服务的了解。

首先去谷歌搜索

尽管有许多选择,但以下的 AWS 官方漫画非常易懂。

数据湖是什么?
-> 数据的存储位置。非结构化数据也可以直接保存。

数据湖的主要利用方向如下所述。

    1. 收集数据

 

    1. 储存数据 <-> 数据目录

 

    1. 处理数据 <-> 数据目录

 

    1. 分析

 

    可视化

数据存储在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

试试看,我们来尝试使用这个数据湖亲自操作一下。

我会尝试进行实操的体验

在数据湖实战中,似乎有三种选择模式可供选取。

    1. 构建近乎实时数据分析环境(SpeedLayer):实验室1 → 实验室2 → 实验室3

 

    1. 构建长期数据的批量分析环境(BatchLayer),并进行性能和成本优化:实验室1 → 实验室4 或 实验室5 → 实验室6

 

    全部实施:实验室1 → 实验室2 → 实验室3 → 实验室4 → 实验室5 → 实验室6

既然这么辛苦,那就按照第三个选项“全部实施”的方向来构建吧。
这是最终的设计图。

architecture_all.png

实验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 的熟练掌握。

广告
将在 10 秒后关闭
bannerAds