端到端 AWS 定量分析:使用 AWS 和 AWSCLI 自动运行脚本

news2024/12/28 17:48:00

使用 AWSCLI 启动、运行和关闭 AWS 服务器

添加图片注释,不超过 140 字(可选)

欢迎来到雲闪世界。我们开发了两个 Python 脚本;一个用于为我们获取数据,另一个用于使用 sklearn 的决策树分类器处理数据。然后,我们将它们上传到 AWS 上的 S3 存储桶,以便妥善保管并方便从其他 AWS 服务访问。

在这篇文章中,我们将探讨如何设置一个工作流,该工作流为我们创建一个处理服务器,在该服务器中对我们的数据进行模型训练,然后在完成后删除该服务器。

在 Amazon Web Service (AWS) 上运行一组模型

AWS 的定价模式是“按使用量付费”,这意味着我们可以创建一个服务器,在其上进行一些数据处理,然后将其拆除,我们只需为服务器运行的时间付费。此外,我们将使用一个客户端库来启动服务器(创建服务器的花哨术语)和拆除服务器,称为 AWSCLI(AWS 客户端)。

配置我们的客户端应用程序

首先,我们将安装并配置 AWSCLI。我将使用 AWS CLI v2。安装后,我们可以测试它是否正常工作

aws2 --version >>> aws-cli/2.0.0dev2 Python/3.7.5 Windows/10 botocore/2.0.0dev1

然后我们进行配置。在配置 AWSCLI 时,此页面可能对默认区域选择有用。

我们还应该通过运行来创建默认角色

aws2 emr 创建默认角色

创建引导文件

配置完成后,我们可以使用 AWSCLI 启动服务器。如何创建一个引导文件来为我们初始化服务器。您会注意到我们需要在服务器中安装 pandas 和 matplotlib 等软件包,因为它附带了一些最低限度的 python 软件包。

这将是我们的引导文件:

#!/bin/bash
sudo update-alternatives --set python /usr/bin/python3.6
sudo python3 -m pip install pandas requests numpy matplotlib s3fs
aws s3 sync s3://workflow-scripts/ /home/hadoop/
sudo python3 /home/hadoop/obtain_data.py AAPL --output_directory s3://data-files
  • 第一行将python命令设置为指向 Python 3(当前为 3.6),而不是默认的 2.7(为什么默认仍然是 2.7?Bezos,自宣布弃用以来已经 6 年了)。这样,我们漂亮的脚本将由 Python 3.x 运行

  • 第二条命令使用 python 安装我们所需的库。您可以随意在此处添加对您有用的任何其他库。

  • 第三个命令将存储桶的内容复制workflow-scripts到集群中。您必须将其替换workflow-scripts为您的存储桶名称。

  • 第四行运行脚本(您可以在此处获取),该脚本将为我们获取数据,并将该数据存储在适当的 S3 存储桶中。您必须将 替换data-files为您的存储桶名称。

这个引导脚本将是我们服务器设置时运行的第一个项目。

配置 S3 的读/写权限

我们现在有了设置脚本和基本数据处理脚本。我们几乎可以运行代码了。我们需要确保脚本可以读取和写入 S3 存储桶。

我们将向默认角色添加允许该操作的策略。 这是什么意思?好吧,当我们创建一个 EMR 集群(一组为我们进行处理的计算机)时,我们会为该集群分配一个角色,这意味着我们赋予它一些权限来执行诸如在集群中安装库之类的操作。它就像我们的集群能够执行的操作的集合。希望我们按照指示创建了默认角色。但是,这些角色不包括与私有的 S3 存储桶交互的权限。有两种方法可以解决这个问题:

  • 将存储桶中的文件完全公开(这真是一个糟糕的想法)

  • 投入更多时间进行 AWS 配置,并赋予某些角色与我们拥有的 S3 存储桶进行交互的能力(效果要好得多)

导航到 AWS 中的 IAM 控制台,我们将找到所有可用角色的列表:

添加图片注释,不超过 140 字(可选)

然后点击每个默认角色,并选择添加内联策略

添加图片注释

然后我们将为我们的角色添加完整的读写策略,如下所示:

添加图片注释,不超过 140 字(可选)

实际上,我们可以更加具体地制定我们的策略以及我们的角色如何与 S3 存储桶进行交互。现在,我们将为所有四个资源组(访问点、存储桶、作业和对象)选择“任意”,然后我们可以审查策略并批准它。

如果有需要,应该选择更严格的条件。

YARN 的配置文件

我们在本演示中要做的事情将需要机器上大量的 RAM,超过默认值允许的量。因此,我们必须创建一个配置文件来帮助我们解决这个问题。

一般情况下,大数据不会全部加载到 RAM 中,而是使用 HIVE 或 Spark 进行交互。然而,为了将 Spark 与我们的经典机器学习方法进行比较,我们将反其道而行之,将大量数据加载到 RAM 中。

让我们在本地机器上创建一个名为 config.json 的配置文件。配置文件如下所示:

[
  {
    "Classification": "yarn-site",
    "Properties": {
	  "yarn.scheduler.minimum-allocation-mb": "1024",
	  "yarn.scheduler.maximum-allocation-mb": "30384",
	  "yarn.nodemanager.resource.memory-mb": "30384",
	  "yarn.nodemanager.vmem-check-enabled": "false",
	  "yarn.nodemanager.pmem-check-enabled": "false"
    }
  }
]

它与我们的资源管理器 YARN(又一个资源协商器)打交道,并告诉我们可以为整个应用程序分配多少内存,以及告诉 YARN 不要检查内存违规(整个内存中只有一小部分会分配给我们的 Python 脚本,因此我们需要停止检查那小块之外的违规行为)。

再次强调,这样做是为了比较我们的基础sklearn决策树,而不是处理大数据的方式。

为我们的集群设置身份验证

我们必须从 EC2 仪表板创建一个密钥对,并将其下载到我们的计算机

添加图片注释,不超过 140 字(可选)

下载密钥对后,你必须通过运行以下命令使其可读

chmod 400 我的密钥对.pem

使用终端 (Mac) 或 Git-Bash (Windows) 在文件上。这样您以后就可以连接到您启动的实例(如果它正在运行)。

通过 AWS CLI 启动 EMR 集群

终于,我们期待已久的时刻到了。使用 AWSCLI,我们可以舒舒服服地在家里启动一个集群来为我们做一些工作。为此,我们将运行以下命令:

aws2 emr create-cluster \ 
--name "带步骤的 Spark 集群" \ 
--release-label emr-5.29.0 \ 
--applications Name=Spark \ 
--log-uri s3://log-bucket/logs/ \ 
--ec2-attributes KeyName= my-key-pair \ 
--instance-type m5.2xlarge \ 
--instance-count 1 \ 
--bootstrap-actions Path= s3://scripts-and-setup/bootstrap_file.sh \ 
--configuration file://config.json \ 
--steps Name="Command Runner",Jar="command-runner.jar",Args=["spark-submit","--deploy-mode=cluster","--executor-memory","20G"," s3://workflow-script/process_data.py , s3://data-files/ AAPL.csv”] \ 
--use-default-roles \ 
--auto-terminate
这个命令有很多内容,所以让我们来解析一下重要内容:
  • aws2 emr create-cluster— 希望这是不言自明的

  • --name "Spark cluster with step"— 将此名称替换为您喜欢的任何名称,但这将是集群的名称

  • --release-label emr-5.29.0— 要使用的集群的版本。不同版本的集群包含各种其他应用程序的不同版本,例如 Hadoop、Spark、Hive 等。

  • --applications Name=Spark— 我们将推出一款 Spark 应用程序

  • --log-uri s3://log-bucket/logs/—这是我们将日志发送到的地方。您需要一个日志存储桶,以防您的集群发生故障,您可以查看出错的日志。您必须用您的存储桶替换它。

  • --ec2-attributes KeyName=my-key-pair—这是您稍后可以使用的密钥对,以便建立与集群的 ssh 连接(如果需要)

  • --instance-type m5.2xlarge— 这是我们将使用的实例类型和大小。AWSCLI 不支持小于 xlarge 的实例

  • --instance-count 1— 我们将仅启动 1 个实例(实际上并不像集群那样,但我们将在下一篇文章中介绍它)

  • --bootstrap-actions Path=s3://scripts-and-setup/bootstrap_file.sh— 这是命令的一部分,告诉集群使用哪个脚本来启动集群。您必须将其替换为您的脚本文件位置

  • --configuration file://config.json— 这告诉 AWSCLI 使用我们创建的 config.json 文件,前缀file://告诉 AWSCLI 这是我们机器的本地文件(尽管我们也可以将其存储在 AWS S3 上)

  • --steps Name="Command Runner",Jar="command-runner.jar",Args=["spark-submit","--deploy-mode=cluster","--executor-memory","20G","s3://workflow-scripts/process_data.py, s3://data-files/AAPL.csv"]— 这个相当复杂,所以我们将其进一步分解。首先,我们将使用command-runner.jarJar 文件运行我们的 python 脚本。这是一个 Java 可执行文件,它将运行我们的 python 脚本并管理所有与 Spark 相关的工作。 我们向该 .jar 文件发送一些参数Args。它们是spark-submit,表示这项作业已提交给 Spark 框架,,--deploy-mode=cluster表示我们正在集群内部启动我们的可执行文件(而不是从我们的家用非 AWS 机器启动),我们要求 Spark 框架在运行我们的脚本及其其他步骤时使用 20GB 内存(实际上,由于 Spark 和 YARN 之间的内存分配方式,我们的脚本会少一些),命令"--executor-memory"和"20G",最后是最后一个参数,它神奇地通过 AWS 魔法被解析成(注意,逗号被空格替换以形成完整的命令)。这是 Spark 环境将运行的完整命令,即我们的 Python 脚本(在此处下载)及其所有参数。对于这一步,您必须将存储桶名称替换为您自己的适当名称。 s3://workflow-scripts/process_data.py, s3://data-files/AAPL.csv s3://workflow-scripts/process_data.py s3://data-files/AAPL.csv

  • --use-default-roles— 告诉 AWS 使用我们之前设置的默认角色

  • --auto-terminate— 这是一个非常漂亮的参数。它告诉集群在完成所有处理后终止,这样我们就不必让集群闲置在那里,不做任何事情就从我们的信用卡中扣款。如果您想让集群保持运行以进行调试,您可以忽略此参数或使用显式版本--no-auto-terminate。但是,请确保您手动终止它。

我们的运行结果

在我的计算机上输入命令后,集群大约需要 2 秒钟才能启动,又需要 12 分钟才能完成我要求的所有操作并终止。检查 S3 存储桶上的日志时,决策树分类器报告已运行 8 分钟进行拟合和预测。

到目前为止,我们已经启动了一个节点来为我们进行一些处理,请注意,我们使用比家用笔记本电脑更强大的机器获得了好处。我们使用 sklearn 进行分析的代码现在在一台功能强大的计算机上运行了约 12 分钟。 虽然这个集群在分布式计算领域还没有做太多事情,但我们已经为 Spark 的运行奠定了基础。我在这里提到过几次 Spark,在下一​​篇文章中,我将最终展示这个框架在我们用决策树探索的相同数据上的实际运行情况。

迄今总成本

我想在这里停下来谈谈成本问题。练习和磨练 AWS 技能的最大障碍之一是,在大多数数据科学信息和技能都是免费的(Kaggle 的免费数据集、Python 和 R 等免费编程工具)的情况下,AWS 需要花钱,而且直到第二天收到账单后才完全清楚要花多少钱。 在学习和试验如何正确设置此设置的过程中,我已经启动(设置)和拆除了 100 多个集群,到目前为止,我注册 AWS 的总费用约为 1 美元,加上所有这些集群的费用不到 5 美元。到目前为止,我的账单很便宜,主要是因为我的每个“集群”中只有一个实例(--instance-count 1),而且我使用类型集群练习了大多数启动和拆除m5.xlarge。我将数据框的大小缩小到原型,并最终在 上进行了原型设计m5.2xlarge。

感谢关注雲闪世界。(Aws解决方案架构师vs开发人员&GCP解决方案架构师vs开发人员)

订阅频道(https://t.me/awsgoogvps_Host) TG交流群(t.me/awsgoogvpsHost)

#aws CLI cheat sheet #aws cli Debug #aws cli get S3 object #aws cli login with access key #aws cli to download from s3 #aws command line download from s3 #homebrew install aws cli#aws sdk get caller identity #aws s3 cli get object #aws s3 put object#aws s3 headobject#aws s3 put-object #aws s3 sync vs cp

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1992797.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

NAT、服务代理、内网穿透

文章目录 NAT技术NAT IP转换过程NATPNAT的优点NAT的缺点 代理服务器正向代理反向代理 内网穿透和内网打洞内网穿透内网穿透 NAT技术 NAT技术即网络地址转换技术。用于将私有IP地址转换为公共IP地址,以便在互联网或其他外部网络中通信。为了解决IPv4协议下IP地址不足…

【Nacos无压力源码领读】(三) Nacos 配置中心与热更新原理详解超详细解读

本文将从 Nacos 配置中心的基本使用入手, 详细介绍 Nacos 客户端发布配置, 拉取配置, 订阅配置的过程以及服务器对应的处理过程; 配置订阅以及热更新原理相关的部分, 我看了主流的博客网站, 绝对没有比这更详细的讲解; 如果在阅读过程中对文中提到的 SpringBoot 启动过程以及…

交叉编译nginx1.20.0

一、说明 简略写一下过程,仅用于参考,建议与其他交叉编译教程一起看,检查是否有遗漏的问题。 二、源码修改 1、auto/cc/name vi auto/cc/name 注释 21 行 exit 1。 2、auto/types/sizeof vi auto/types/sizeof 将 15 行处的” ngx_size”…

数字图像处理(理论篇)专栏介绍

专栏导读 数字图像处理是计算机视觉领域的基石,它涉及到图像的获取、表示、处理和分析等多个方面。本专栏将通过一系列精心挑选的实战案例,引导读者从基础概念到高级技术,逐步深入学习数字图像处理的各个方面。 专栏目录 数字图像处理 第一…

离线+树状数组,ABC253 F - Operations on a Matrix

一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 F - Operations on a Matrix 二、解题报告 1、思路分析 我们通过差分树状数组,可以轻松解决操作1 操作3我们也可以通过树状数组来获取对应列的值 关键是操作2会对操作3造成影响 所以我们先对…

你了解堆和栈的由来吗?

人们提出内存中堆和栈这两个概念,肯定是要解决当时所遇到的问题,不会为了提出概念而提概念。堆和栈都是为了解决一些问题而发展出来的结果,并没有任何的高深之处。 要搞懂堆和栈的概念是如何来的,就需要从计算机诞生时说起了。 …

UE中的运行时Mesh - 学习笔记

UE中的运行时Mesh Runtime Mesh 广泛应用于仿真、游戏及医疗等相关应用领域。 运行时Mesh可以摆脱UE编辑器的依赖,独立开发相对独立的应用程序。 应用示例 地质领域: 模型编辑修改:膨胀 导入、材质设置、补洞及简化: mar…

【Java】韩顺平Java学习笔记 第23章 反射

文章目录 需求和快速入门反射原理反射相关主要类反射的优点和缺点及其优化Class类Class类常用方法获取Class类对象的六种方式有Class对象的类型 类加载动态加载和静态加载类加载时机类加载流程图类加载五个阶段加载阶段连接阶段-验证连接阶段-准备连接阶段-解析总结Initializat…

【Bug记录】operator->返回类型错误导致operator->调用不了

项目场景: 模拟list,出现operator->调用不了的情况,这是什么情况呢??? 问题描述 这里我是明确写了operator->函数的: 但是却有下面报错: 原因分析: 这里有…

python判断和循环语句

python判断语句 1、单个条件判断 if 条件:满足条件要做的事情1满足条件要做的事情2 else:不满足条件要做的事情3不满足条件要做的事情2 2、多个条件判断(满足条件1就不会判断条件2) else可以省略不写 if 条件1:满足条件1要做的事情a满足条件1要做的事…

JavaEE从入门到起飞 (三) ~AOP

晚上好,愿这深深的夜色给你带来安宁,让温馨的夜晚抚平你一天的疲惫,美好的梦想在这个寂静的夜晚悄悄成长。 文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结 前言 了解面向切面编程(AOP&#xf…

牛客网每日刷题之 HJ99.自守数(C++)

在不断学习的过程中也不能忘记了基础知识的巩固,在学习新的知识后要学会去举一反三,前不久我刚刚了解了一些关于 string 类的知识,对牛客网的 自守数 有了新的解题思路,让我们一起看看这道题吧 思路解析 a. 整数方法 1. 首先我们知…

C++(2):λ表达式,类函数重载

λ表达式 [&]捕获前面所有 [i] j闭包函数内访问不了,在函数内i只能用不能改 [&I,j] i在函数内可改j不行 未捕获可以充当函数指针使用 new,delete和malloc,free区别 new会调构造函数 malloc不会,delete会调析构函数free不会malloc调用需要强转…

从混沌到秩序:一本书教你掌握互联网内容审核与信息安全的密钥

随着互联网技术的迅猛发展,视频、图片、文字等多媒体内容以前所未有的速度在全球范围内传播与分享,极大地丰富了人们的信息获取渠道和娱乐生活方式。然而,这一繁荣景象背后,也隐藏着内容安全、版权侵犯、虚假信息传播、不良内容泛…

公司邮箱办理流程复杂吗?三步快速开通公司邮箱

对于许多企业而言, 开通公司邮箱是一项重要的基础建设工作。但是, 很多企业主可能会担心这一过程是否过于繁琐。实际上, 只需要注册、设置域名和邮箱, 以及开始使用这三个步骤。本文将为您介绍如何通过Zoho邮箱快速完成公司邮箱的开通。 Zoho邮箱因其卓越的服务质量和可靠性, …

数据传输为什么占用空间变大了

最近在做数据备份,很尴尬的是,不到3T的数据,用一个4T的硬盘拷贝中转到存储服务器上发现放不下。特别是以小文件为主的标注文件的文件夹,几十M几百M变成几十G或者100多G的空间占用。下面是几张图。 ​ ​ ​ 服务器之间拷贝占用空间…

Linux初启征程指南:攻克常见系统指令与权限初理解

有时候觉得,电脑就像一个高贵冷艳的妹纸。 400,是她冷冰冰地说:“我听不懂你在说什么”; 401,是她无情地转身:“我不认识你,别说那些奇怪的话”; 403,是她残酷的拒绝&…

Mysql-窗口函数二

文章目录 1. 前百分之N的问题 排名 row_number1.1 需求1.2 准备工作1.3 分析1.4 实现 2. 前百分之N的问题 ntile2.1 介绍2.2 语法2.2.1 示例2.2.2 结果示例2.2.3 注意事项 2.3 需求2.4 分析2.5 实现 3. 前百分之N的问题 百分比 PERCENT_RANK3.1 语法3.1.1 示例3.1.2 注意事项 3…

函数的练习

1.判断一个数是否为素数 代码如下&#xff1a; #include <stdio.h> int jum(int num) {int i 0;for (i 2;i < num;i){if (num % i 0){return 0;break;}}return 1; }void Jum1(int (*pf)(int)) {int num 0;printf("请输入操作数&#xff1a;");scanf_s…

声压、声强、响度之间的区别与联系

声压、声强、响度是声学中描述声音特性的重要概念&#xff0c;它们之间有一定的关系&#xff0c;但分别反映了不同的物理或感知特性。 1、声压&#xff08;Sound Pressure&#xff09; 声压是声波传播时在介质中引起的压力波动&#xff0c;通常以帕斯卡&#xff08;Pa&#x…