返回顶部
首页 > 资讯 > 后端开发 > Python >在AWS上自动执行Hadoop计算
  • 798
分享到

在AWS上自动执行Hadoop计算

AWSHadoop 2023-01-31 08:01:34 798人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

hadoop框架为大数据项目提供了许多有用的工具。但是自己管理它太复杂了。几个月前,我正在使用Cloudera部署Hadoop集群。我发现它仅适用于计算和存储容量不变的架构。将Cloudera这样的工具用于需要扩展的系统是一场噩梦。这就是

hadoop框架大数据项目提供了许多有用的工具。但是自己管理它太复杂了。几个月前,我正在使用Cloudera部署Hadoop集群。我发现它仅适用于计算和存储容量不变的架构。将Cloudera这样的工具用于需要扩展的系统是一场噩梦。这就是云技术的用武之地,让我们的生活更轻松。Amazon WEB Services(AWS)是此用例的最佳选择。AWS为Hadoop提供了一个名为Elastic Map Reduce(EMR)的托管解决方案。EMR允许开发人员快速启动Hadoop集群,做必要的计算,并终止他们的时候所有的工作完成。为了进一步自动化此过程,AWS为EMR服务提供了SDK。使用它,您可以使用单个命令启动Hadoop任务。我将在下面的示例中展示它是如何完成的。

我将在EMR中的Hadoop集群上执行spark作业。我的目标是计算amazon.com上大型客户评论数据集的每个星级评分(1-5)的平均评论长度。通常,要执行Hadoop计算,我们需要将所有数据存储在hdfs中。但EMR与S3集成,我们不需要启动数据实例并 为了两分钟的计算而复制大量数据。这种与S3的兼容性是使用EMR的一大优势。许多数据集都是使用S3 分发的,包括我在这个例子中使用的数据集(你可以在这里找到它)。

最初,您应手动启动EMR集群 (使用控制台),以便让AWS为集群映像创建必要的安全组(它们将是我们自动执行脚本所必需的)。为此,请转到EMR服务页面,单击“创建群集”,然后启动具有默认设置的群集。之后,终止它,您将为主实例和从属实例创建两个默认安全组。您还应该创建一个S3存储桶来存储Spark作业执行的结果。

整个自动化解决方案包含两个python文件。第一个是Spark作业本身(将在集群上执行)。第二个是启动脚本,它将调用EMR并将Spark作业传递给它。该脚本将被执行 在您的机器上本地。您应该安装boto3 Python库以使用AWS SDK。

job.py文件的内容:

导入 系统
进口 pyspark

sc = pyspark。SparkContext(appName = “评论”)

def to_entity(item):

Words = item。拆分('\ t')
尝试:
    rating = int(words [ 7 ])
    评论 = 单词 [ 13 ]
    返回(评级,len(评论))
除了 ValueError:
    返回(无,无)

def avg_sec(a,b):return(a [ 0 ] + b,a [ 1 ] + 1)
def avg_comb(a,b):return(a [ 0 ] + b [ 0 ],a [ 1 ] + b [ 1 ])
def avg_eval(a):返回 a [ 0 ] / a [ 1 ]

fileName = 'amazon_reviews_us_Camera_v1_00.tsv.gz'
dirName = 's3:// amazon-reviews-pds / tsv /'
rdd = sc。textFile(dirName + fileName)

outFile = sys。argv [ 1 ]

#过滤跳过标题
评论 = rdd。map(to_entity)。过滤器(拉姆达 X:X [ 0 ] 是 不 无)。坚持()

INIT =(0,0)
结果 = 评论。aggregateByKey(init,avg_sec,avg_comb)。mapValues(avg_eval)
结果。saveAsTextFile(outFile)
launcher.py文件的内容:

导入 boto3
进口 时间
import argparse

parser = argparse。ArgumentParser(description = '在AWS EMR上启动Spark作业')

解析器。add_argument('aws_access_key',metavar = 'ACCESS_KEY',help = 'AWS Access Key')
解析器。add_argument('aws_secret_key',metavar = 'SECRET_KEY',help = 'AWS Secret Key')
解析器。add_argument('aws_region',metavar = 'REGION',help = 'AWS Region')
解析器。add_argument('bucket',metavar = 'BUCKET',help = 'S3 Bucket')
解析器。add_argument('job_file',metavar = 'JOB_FILE',help = 'Spark Job file')
解析器。add_argument('result_folder',metavar = 'RESULT_FOLDER',help = '结果的S3文件夹')
解析器。add_argument('cluster_name',metavar = 'CLUSTER_NAME',help = 'EMR Cluster Name')
解析器。add_argument('key_name',metavar = 'ssh_KEY_NAME',help = 'SSH Key Name')
解析器。add_argument('master_sg',metavar = 'MASTER_SG',help = '主实例组的安全组ID')
解析器。add_argument('slave_sg',metavar = 'SLAVE_SG',help = '从属实例组的安全组ID')

args = 解析器。parse_args()

client = boto3。客户(

'emr',
aws_access_key_id = args。aws_access_key,
aws_secret_access_key = args。aws_secret_key,
region_name = args。aws_region

s3Client = boto3。客户(

's3',
aws_access_key_id = args。aws_access_key,
aws_secret_access_key = args。aws_secret_key,
region_name = args。aws_region

邮票 = STR(INT(时间。时间()))
s3JobFileName = 'job_' + stamp + ' .py '
s3ResultFolderName = args。result_folder + '_' + 戳

s3Client。upload_file(ARGS。job_file,ARGS。桶,s3JobFileName)

响应 = 客户端。run_job_flow(

Name = args。cluster_name,
LogUri = 's3:// aws-logs-511622038217-eu-central-1 / elasticmapReduce /',
ReleaseLabel = 'emr-5.17.0',
Instances = {
    ' MasterInstanceType':'m4.large',
    'SlaveInstanceType':'m4.large',
    'InstanceCount':5,
    'Ec2KeyName':args。key_name,
    'KeepJobFlowAliveWhenNoSteps' :虚假,
    'TerminationProtected':错误,
    'HadoopVersion':'2.8.4',
    'EmrManagedMasterSecurityGroup':args。master_sg,
    'EmrManagedSlaveSecurityGroup':args。slave_sg
},
步骤 = [
    {
        '名字':'星火工作',
        'ActionOnFailure':'继续',
        'HadoopjarStep':{
            'Jar':'command-runner.jar',
            'Args':[
                'spark-submit',
                '--deploy-mode',
                '集群',
                's3://'  +  args。bucket  +  '/'  +  s3JobFileName,
                's3://'  +  args。bucket  +  '/'  +  s3ResultFolderName
            ]
        }
    },
]
应用 = [
    {
        '名字':'火花'
    },
]
VisibleToAllUsers = True,
JobFlowRole = 'EMR_EC2_DefaultRole',
ServiceRole = 'EMR_DefaultRole',
ScaleDownBehavior = 'TERMINATE_AT_TASK_COMPLETION',
EbsRootVolumeSize = 32

打印(“响应:” + str(响应))
由于launcher.py需要许多参数,因此通过包含此命令的模板shell脚本更容易调用它:

python3 launcher.py \
<AWS_KEY_ID> \
<AWS_SECRET> \
<REGION> \
<S3存储桶(已创建)> \
<Spark作业文件(本地)> \
<输出S3 foler名称> \
<CLUSTER_NAME> \
<EC2_SSH_KEY_NAME> \
<SECURITY_GROUP_ID_FOR_MASTER_INSTANCE(已创建)> \
<SECURITY_GROUP_ID_FOR_SLAVE_INSTANCES(已创建)>

--结束END--

本文标题: 在AWS上自动执行Hadoop计算

本文链接: https://lsjlt.com/news/193045.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 在AWS上自动执行Hadoop计算
    Hadoop框架为大数据项目提供了许多有用的工具。但是自己管理它太复杂了。几个月前,我正在使用Cloudera部署Hadoop集群。我发现它仅适用于计算和存储容量不变的架构。将Cloudera这样的工具用于需要扩展的系统是一场噩梦。这就是...
    99+
    2023-01-31
    AWS Hadoop
  • 在 AWS EC2 上如何使用 Go SDK 自动化脚本执行?
    怎么入门Golang编程?需要学习哪些知识点?这是新手们刚接触编程时常见的问题;下面编程网就来给大家整理分享一些知识点,希望能够给初学者一些帮助。本篇文章就来介绍《在 AWS EC2 上如何使用 G...
    99+
    2024-04-04
  • php如何在虚拟主机上自动执行
    要在虚拟主机上自动执行PHP代码,可以按照以下步骤进行操作:1. 创建一个以 .php 结尾的 PHP 文件,例如 index.ph...
    99+
    2023-08-25
    虚拟主机 php
  • 如何在html5中自动计算fontSize
    本篇文章为大家展示了如何在html5中自动计算fontSize,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。具体如下:var winWidth = window.inn...
    99+
    2023-06-09
  • linux 上在指定时间段内每隔多少分钟自动执行任务计划crontab
    #/bin/sh datename=$(date +%Y%m%d-%H%M%S) echo $datename >> /tmp/logtest.txt */2 19,20 * * * /bin/sh ...
    99+
    2022-06-04
    linux执行任务crontab linux crontab linux间隔执行任务
  • 怎么在自己的计算机上激活Golang
    本篇内容介绍了“怎么在自己的计算机上激活Golang”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!第一步:安装Golang在激活Golang...
    99+
    2023-07-05
  • 【Linux】在服务器上创建Crontab(定时任务),自动执行shell脚本
    业务场景:该文即为上次编写shell脚本的姊妹篇,在上文基础上,将可执行的脚本通过linux的定时任务自动执行,节省人力物力,话不多说,开始操作! 一、打开我们的服务器连接工具 连上服务器后,在...
    99+
    2023-09-23
    服务器 linux 运维
  • 怎么在启动Jupyter Notebook时自动执行一段代码
    本篇内容主要讲解“怎么在启动Jupyter Notebook时自动执行一段代码”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么在启动Jupyter Notebook时自动执行一段代码”吧!在我...
    99+
    2023-06-16
  • 如何进行Spark SQL在100TB上的自适应执行实践
    本篇文章给大家分享的是有关如何进行Spark SQL在100TB上的自适应执行实践,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Spark SQL是Apache Spark最广...
    99+
    2023-06-02
  • 在 pytorch 中实现计算图和自动求导
    前言: 今天聊一聊 pytorch 的计算图和自动求导,我们先从一个简单例子来看,下面是一个简单函数建立了 yy 和 xx 之间的关系 然后...
    99+
    2024-04-02
  • 如何在Windows中启用自动登录即自动执行登录过程
     本文介绍如何通过在注册表数据库中存储密码和其他相关信息,将 Windows 配置为自动执行登录过程。此功能允许其他用户启动您的计算机并使用您建立的帐户自动登录。 重要说明:如果启用自动登录,可以更方便地使用 ...
    99+
    2023-06-01
    Windows 自动登录 自动执行 过程 登录
  • java通过MySQL驱动拦截器实现执行sql耗时计算
    目录背景具体实现MySQL5MySQL6MySQL8使用方法测试结果背景 公司的一个需求,公司既有的链路追踪日志组件要支持MySQL的sql执行时间打印,要实现链路追踪常用的手段就是...
    99+
    2023-03-20
    java sql耗时计算 MySQL驱动拦截器耗时计算
  • 运行在YARN上的计算框架有什么作用
    本篇内容主要讲解“运行在YARN上的计算框架有什么作用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“运行在YARN上的计算框架有什么作用”吧!1. 将框架运行在...
    99+
    2024-04-02
  • 如何在Unix系统上使用NumPy进行高效计算?
    作为一个广受欢迎的科学计算工具,NumPy提供了一种高效的方法来在Unix系统上进行计算。本文将介绍如何在Unix系统上使用NumPy进行高效计算,并提供一些示例代码来帮助您开始使用。 安装NumPy 在Unix系统上安装NumPy非常...
    99+
    2023-09-24
    numpy 分布式 unix
  • java怎么通过MySQL驱动拦截器实现执行sql耗时计算
    这篇文章主要介绍了java怎么通过MySQL驱动拦截器实现执行sql耗时计算的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇java怎么通过MySQL驱动拦截器实现执行sql耗时计算文章都会有所收获,下面我们一起...
    99+
    2023-07-05
  • NumPy是否适合在Unix系统上进行分布式计算?
    NumPy是Python中非常流行的一个数值计算库,它提供了丰富的数值计算工具和高效的数组操作,被广泛应用于科学计算和数据分析等领域。但是,在大规模数据处理和分布式计算方面,NumPy能否胜任呢?本文将探讨NumPy在Unix系统上进行分...
    99+
    2023-09-24
    numpy 分布式 unix
  • 怎么在Linux中使用shell脚本自动执行脚本文件
    本篇文章为大家展示了怎么在Linux中使用shell脚本自动执行脚本文件,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一、定时复制文件  a、在/usr/local/wfjb_web_back目录下...
    99+
    2023-06-09
  • 线程管理在云计算中的应用:并发执行的无限可能
    线程并发:提升资源利用率 线程管理的关键目标之一是提高资源利用率。通过允许多个线程同时执行,系统可以最大限度地利用CPU和其他硬件资源。这对于处理大量I/O操作或需要密集计算的应用程序尤为重要。 负载均衡:优化资源分配 线程管理还涉及负载...
    99+
    2024-04-02
  • 计算机可以进行自动控制处理的原因是什么
    这篇文章将为大家详细讲解有关计算机可以进行自动控制处理的原因是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。因为其能够“存储程序”。存储程序是计算机能自动控制处理的基础,其原理是将根据特定问题编写的程...
    99+
    2023-06-15
  • 查看执行计划的方法【在前人的基础上学习和总结】
    exp:create table t1 as select * from dba_objects;        create table...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作