标签: amazon-emr

AWS EMR在群集中所有已在运行的计算机上执行"bootstrap"脚本

我有一个全天候运行的EMR集群.我无法将其关闭并启动新的.

我想要做的是在已经运行的集群上执行类似bootstrap操作的操作,最好使用Python和boto或AWS CLI.

我可以想象通过两个步骤做到这一点:

1)在所有正在运行的实例上运行脚本(如果以某种方式可能,例如来自boto,这将是很好的)

2)将脚本添加到引导操作以用于我想要调整集群大小的情况.

所以我的问题是:使用boto或至少AWS CLI是否可以这样?我会通过GitHub上的文档和源代码,但我无法弄清楚如何添加新的"引导"行为时,集群已在运行.

python boto amazon-web-services amazon-emr emr

16
推荐指数
1
解决办法
1313
查看次数

为什么EMR上的Yarn不会将所有节点都分配给运行Spark作业?

我在Amazon Elastic Map Reduce(EMR)上运行Apache Spark上的工作.目前我正在运行emr-4.1.0,其中包括Amazon Hadoop 2.6.0和Spark 1.5.0.

当我开始工作时,YARN正确地将所有工作节点分配给spark作业(当然,一个用于驱动程序).

我将魔术"maximizeResourceAllocation"属性设置为"true",并将spark属性"spark.dynamicAllocation.enabled"也设置为"true".

但是,如果通过将节点添加到工作计算机的CORE池来调整emr集群的大小,则YARN仅会将一些新节点添加到spark作业.

例如,今天早上我有一个使用26个节点的工作(m3.2xlarge,如果这很重要) - 1个用于驱动程序,25个执行程序.我想加快工作,所以我尝试添加8个节点.YARN已经获取了所有新节点,但只将其中一个分配给了Spark作业.Spark成功地接收了新节点,并将其用作执行器,但我的问题是为什么YARN让其他7个节点闲置?

由于显而易见的原因,这很烦人 - 即使它们没有被使用,我也必须为资源付费,而我的工作根本没有加速!

有人知道YARN如何决定何时添加节点来运行火花作业?什么变量发挥作用?记忆?V-核心?什么?

提前致谢!

amazon-emr elastic-map-reduce emr hadoop-yarn apache-spark

16
推荐指数
1
解决办法
6652
查看次数

EMR笔记本安装其他库

我通过我的EMR笔记本使用其他库时非常困难.EMR的AWS界面允许我创建Jupyter笔记本并将它们附加到正在运行的集群.我想在其中使用其他库.SSH进入机器并手动安装ec2-userroot不会使库可用于笔记本,因为它显然使用了livy用户.引导操作安装的东西hadoop.我无法从笔记本电脑安装,因为它的用户显然没有sudo,git等等,它可能不会安装到奴隶反正.

为通过EMR界面创建的笔记本安装附加库的规范方法是什么?

bash amazon-web-services libraries amazon-emr jupyter-notebook

16
推荐指数
1
解决办法
1753
查看次数

AWS Glue 与 EMR 无服务器

最近,AWS 发布了 Amazon EMR Serverless(预览版)https://aws.amazon.com/blogs/big-data/announcing-amazon-emr-serverless-preview-run-big-data-applications-without-managing-servers/ - 非常有前途的新服务。

根据我的理解 - AWS Glue 是 Apache Spark 之上的托管服务(用于转换层)。AWS EMR 也主要用于 Apache Spark。因此,EMR Serverless(适用于 Apache Spark)看起来与 AWS Glue 非常相似。

现在我脑子里有一个问题 - 与 AWS Glue 的核心区别是什么以及何时选择 EMR Serverless 而不是 Glue?

潜在的 EMR Serverless,甚至可能成为 AWS Glue 转换层生态系统的一部分?也许 AWS 将用 EMR Serverless 取代 AWS Glue 中的转换层,这样就有意义了。AWS Glue 将扮演 ETL Overlay、Metastore 的角色,并以 EMR Serverless 作为处理层。

amazon-web-services amazon-emr aws-glue emr-serverless

16
推荐指数
1
解决办法
7531
查看次数

如何删除AWS EMR集群?

我一直在玩AWS EMR,现在我有一些终止的群集,我想要删除:

在此输入图像描述

但是,删除它们没有明显的选择.我如何让它们消失?

amazon-web-services amazon-emr emr

15
推荐指数
2
解决办法
6142
查看次数

亚马逊EMR上的Spark:"超时等待来自池的连接"

我正在小型三台服务器Amazon EMR 5(Spark 2.0)集群上运行Spark工作.我的工作运行了一个小时左右,因以下错误而失败.我可以手动重启并运行,处理更多数据,最终再次失败.

我的Spark代码非常简单,不直接使用任何Amazon或S3 API.我的Spark代码将S3文本字符串路径传递给Spark,Spark在内部使用S3.

我的Spark程序在循环中执行以下操作:从S3加载数据 - >处理 - >将数据写入S3上的不同位置.

我的第一个怀疑是,某些内部Amazon或Spark代码未正确处理连接,并且连接池已耗尽.

com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.AmazonClientException: Unable to execute HTTP request: Timeout waiting for connection from pool
            at com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:618)
            at com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.http.AmazonHttpClient.doExecute(AmazonHttpClient.java:376)
            at com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.http.AmazonHttpClient.executeWithTimer(AmazonHttpClient.java:338)
            at com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:287)
            at com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:3826)
            at com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.services.s3.AmazonS3Client.getObjectMetadata(AmazonS3Client.java:1015)
            at com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.services.s3.AmazonS3Client.getObjectMetadata(AmazonS3Client.java:991)
            at com.amazon.ws.emr.hadoop.fs.s3n.Jets3tNativeFileSystemStore.retrieveMetadata(Jets3tNativeFileSystemStore.java:212)
            at sun.reflect.GeneratedMethodAccessor45.invoke(Unknown Source)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
            at java.lang.reflect.Method.invoke(Method.java:498)
            at org.apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.java:191)
            at org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:102)
            at com.sun.proxy.$Proxy44.retrieveMetadata(Unknown Source)
            at com.amazon.ws.emr.hadoop.fs.s3n.S3NativeFileSystem.getFileStatus(S3NativeFileSystem.java:780)
            at org.apache.hadoop.fs.FileSystem.exists(FileSystem.java:1428)
            at com.amazon.ws.emr.hadoop.fs.EmrFileSystem.exists(EmrFileSystem.java:313)
            at org.apache.spark.sql.execution.datasources.InsertIntoHadoopFsRelationCommand.run(InsertIntoHadoopFsRelationCommand.scala:85)
            at org.apache.spark.sql.execution.command.ExecutedCommandExec.sideEffectResult$lzycompute(commands.scala:60)
            at org.apache.spark.sql.execution.command.ExecutedCommandExec.sideEffectResult(commands.scala:58)
            at org.apache.spark.sql.execution.command.ExecutedCommandExec.doExecute(commands.scala:74)
            at org.apache.spark.sql.execution.SparkPlan$$anonfun$execute$1.apply(SparkPlan.scala:115)
            at org.apache.spark.sql.execution.SparkPlan$$anonfun$execute$1.apply(SparkPlan.scala:115)
            at org.apache.spark.sql.execution.SparkPlan$$anonfun$executeQuery$1.apply(SparkPlan.scala:136)
            at org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:151)
            at org.apache.spark.sql.execution.SparkPlan.executeQuery(SparkPlan.scala:133)
            at org.apache.spark.sql.execution.SparkPlan.execute(SparkPlan.scala:114) …
Run Code Online (Sandbox Code Playgroud)

amazon-emr apache-spark

15
推荐指数
2
解决办法
7031
查看次数

表格的异常通过AWS Glue Crawler识别并存储在数据目录中

我正在努力建立公司的新数据湖,并试图找到最好的和最近的选择在这里工作.因此,我找到了一个非常好的解决方案来使用EMR + S3 + Athena + Glue.

我做的过程是:

1 - 运行Apache Spark脚本,在Orc存储的S3中按日期分区生成3000万行.

2 - 运行Athena查询以创建外部表.

3 - 检查与胶水数据目录相关的EMR表,它运行良好.Spark和Hive都可以​​访问.

4 - 在按日期分区的其他文件夹中生成另外3000万行.在Orc格式

5 - 运行识别新表的Glue Crawler.添加到数据目录,Athena能够进行查询.但Spark和Hive无法做到这一点.请参阅以下例外:

火花 Caused by: java.lang.ClassCastException: org.apache.hadoop.io.Text cannot be cast to org.apache.hadoop.hive.ql.io.orc.OrcStruct

蜂巢 Error: java.io.IOException: org.apache.hadoop.hive.ql.metadata.HiveException: Error evaluating audit_id (state=,code=0)

我正在检查是否有任何序列化问题,我发现了这个:

手动创建的表(配置):

输入格式 org.apache.hadoop.hive.ql.io.orc.OrcInputFormat

输出格式为 org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat

Serde序列化lib org.apache.hadoop.hive.ql.io.orc.OrcSerde

orc.compress SNAPPY

使用Glue Crawler创建的表:

输入格式 org.apache.hadoop.mapred.TextInputFormat

输出格式 org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat

Serde序列化lib org.apache.hadoop.hive.ql.io.orc.OrcSerde

因此,这不适用于从Hive或Spark读取.它适用于雅典娜.我已经更改了配置,但对Hive或Spark没有任何影响.

有人遇到过这个问题?

amazon-s3 amazon-web-services amazon-emr apache-spark aws-glue

15
推荐指数
1
解决办法
1319
查看次数

无法在新的AWS EMR集群中获取SparkContext

我刚刚建立了一个AWS EMR集群(带有Spark 2.3.2的EMR版本5.18).我ssh到主maschine并运行spark-shell或pyspark并得到以下错误:

$ spark-shell

log4j:ERROR setFile(null,true) call failed.
java.io.FileNotFoundException: /stderr (Permission denied)
        at java.io.FileOutputStream.open0(Native Method)
        at java.io.FileOutputStream.open(FileOutputStream.java:270)
        at java.io.FileOutputStream.<init>(FileOutputStream.java:213)
        at java.io.FileOutputStream.<init>(FileOutputStream.java:133)
        at org.apache.log4j.FileAppender.setFile(FileAppender.java:294)
        at org.apache.log4j.FileAppender.activateOptions(FileAppender.java:165)
        at org.apache.log4j.DailyRollingFileAppender.activateOptions(DailyRollingFileAppender.java:223)
        at org.apache.log4j.config.PropertySetter.activate(PropertySetter.java:307)
        at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:172)
        at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:104)
        at org.apache.log4j.PropertyConfigurator.parseAppender(PropertyConfigurator.java:842)
        at org.apache.log4j.PropertyConfigurator.parseCategory(PropertyConfigurator.java:768)
        at org.apache.log4j.PropertyConfigurator.parseCatsAndRenderers(PropertyConfigurator.java:672)
        at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:516)
        at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:580)
        at org.apache.log4j.helpers.OptionConverter.selectAndConfigure(OptionConverter.java:526)
        at org.apache.log4j.LogManager.<clinit>(LogManager.java:127)
        at org.apache.spark.internal.Logging$class.initializeLogging(Logging.scala:120)
        at org.apache.spark.internal.Logging$class.initializeLogIfNecessary(Logging.scala:108)
        at org.apache.spark.deploy.SparkSubmit$.initializeLogIfNecessary(SparkSubmit.scala:71)
        at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:128)
        at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
log4j:ERROR Either File or DatePattern options are not set for appender [DRFA-stderr].
log4j:ERROR setFile(null,true) call failed.
java.io.FileNotFoundException: /stdout (Permission denied)
        at java.io.FileOutputStream.open0(Native …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services amazon-emr apache-spark pyspark

15
推荐指数
2
解决办法
4313
查看次数

AWS Athena 并发限制:提交的查询数 VS 正在运行的查询数

根据AWS Athena 限制,您一次最多可以提交 20 个相同类型的查询,但这是一个软限制,可以根据要求增加。我曾经boto3与 Athena 进行交互,我的脚本提交了 16 个 CTAS 查询,每个查询大约需要 2 分钟才能完成。在 AWS 账户中,只有我在使用 Athena 服务。但是,当我通过控制台查看查询状态时,我发现尽管所有查询都处于 state 状态,但实际上只有少数查询(平均 5 个)正在执行Running。以下是通常会在 Athena 历史选项卡中看到的内容:

雅典娜历史选项卡

我了解,在我向 Athena 提交查询后,它会根据整体服务负载和传入请求的数量分配资源来处理查询。但是我尝试在不同的日期和时间运行它们,仍然会同时执行大约 5 个查询。

所以我的问题是它应该如何?如果是这样,那么如果其中大约 15 个查询处于空闲状态并等待可用插槽,那么能够提交多达 20 个查询又有什么意义呢?

更新 2019-09-26

刚刚在 presto 文档中偶然发现了 HIVE CONNECTOR,其中有一节AWS Glue Catalog Configuration Properties。在那里我们可以看到

hive.metastore.glue.max-connections:到 Glue 的最大并发连接数(默认为 5)。

这让我想知道它是否与我的问题有关。据我了解,Athena 只是一个在 EMR 集群上运行的 Presto,该集群配置为使用 AWS Glue 数据目录作为 Metastore。

那么,如果我的问题来自这样一个事实,即 Athena 的 EMR 集群只是使用默认值来连接到 Glue 的并发连接,即 5,这正是在我的情况下实际执行(平均)并发查询的数量。

更新 2019-11-27

Athena 团队最近为 Athena 部署了许多新功能。虽然 …

concurrency limit amazon-emr amazon-athena aws-glue

15
推荐指数
1
解决办法
6359
查看次数

AWS EMR - IntelliJ远程调试Spark应用程序

我想调试在AWS EMR集群上运行的Spark应用程序.如果我可以使用IntelliJ远程连接和调试它将是太棒了.我搜索过但发现很少.

有可能,如果是这样,有人可以指出我正确的方向吗?

谢谢.

remote-debugging intellij-idea amazon-web-services amazon-emr apache-spark

14
推荐指数
1
解决办法
2416
查看次数