【问题标题】:Disable CloudWatch for AWS Kinesis at Spark Streaming在 Spark Streaming 上禁用 CloudWatch for AWS Kinesis
【发布时间】:2017-01-23 16:28:14
【问题描述】:

我想知道是否可以?

这里是代码:numStreams 我通过使用 AmazonKinesisClient API 得到它

 // Create the Kinesis DStreams
    List<JavaDStream<byte[]>> streamsList = new ArrayList<>(numStreams);
    for (int i = 0; i < numStreams; i++) {
      streamsList.add(
              KinesisUtils.createStream(jssc, kinesisAppName, streamName, endpointUrl, regionName,
              InitialPositionInStream.TRIM_HORIZON, kinesisCheckpointInterval,
              StorageLevel.MEMORY_AND_DISK_2(),accessesKey,secretKey)
      );
    }

我尝试查看 API,但找不到任何有关禁用 Apache Streaming CloudWatch 的参考。

这是我尝试摆脱的警告:

17/01/23 17:46:29 警告 CWPublisherRunnable:无法将 16 个数据发布到 CloudWatch com.amazonaws.AmazonServiceException:用户:arn:aws:iam:::user/Kinesis_Service 无权执行:cloudwatch:PutMetricData(服务:AmazonCloudWatch;状态代码:403;错误代码:AccessDenied;请求 ID:**** *) 在 com.amazonaws.http.AmazonHttpClient.handleErrorResponse(AmazonHttpClient.java:1377) 在 com.amazonaws.http.AmazonHttpClient.executeOneRequest(AmazonHttpClient.java:923) 在 com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:701) 在 com.amazonaws.http.AmazonHttpClient.doExecute(AmazonHttpClient.java:453) 在 com.amazonaws.http.AmazonHttpClient.executeWithTimer(AmazonHttpClient.java:415) 在 com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:364) 在 com.amazonaws.services.cloudwatch.AmazonCloudWatchClient.doInvoke(AmazonCloudWatchClient.java:984) 在 com.amazonaws.services.cloudwatch.AmazonCloudWatchClient.invoke(AmazonCloudWatchClient.java:954) 在 com.amazonaws.services.cloudwatch.AmazonCloudWatchClient.putMetricData(AmazonCloudWatchClient.java:853) 在 com.amazonaws.services.kinesis.metrics.impl.DefaultCWMetricsPublisher.publishMetrics(DefaultCWMetricsPublisher.java:63) 在 com.amazonaws.services.kinesis.metrics.impl.CWPublisherRunnable.runOnce(CWPublisherRunnable.java:144) 在 com.amazonaws.services.kinesis.metrics.impl.CWPublisherRunnable.run(CWPublisherRunnable.java:90) 在 java.lang.Thread.run(Unknown Source)

【问题讨论】:

  • 嗨@tal-bary。你在这个问题上有什么进展吗?

标签: apache-spark spark-streaming amazon-kinesis


【解决方案1】:

前言:我知道这是一个老问题,但刚刚遇到这个问题,所以为任何遇到 Spark 问题的人发布一个解决方案

在构建客户端时,可以使用withMetrics 方法在 KCL(Kinesis 客户端)库级别禁用 Cloudwatch 指标报告。

不幸的是,Spark KinesisInputDStream 方法没有公开更改此设置的方法,更糟糕的是,默认级别是“详细”,每 10 秒发送 10 秒的指标。

我为了禁用它而采取的方法是从 KinesisInputDStream 向方法 cloudWatchCredentials 提供无效凭据。即:.cloudWatchCredentials(SparkAWSCredentials.builder.basicCredentials("DISABLED", "DISABLED").build())

然后是 CloudWatchAsyncClient 每次滴答时的日志记录警告问题,我通过在 spark log4j.properties 配置中设置以下内容来禁用它:

# Set Kinesis logging metrics to Warn - Since we intentionally provide
# wrong credentials in order to disable cloudwatch logging. Bad credential
# warning are logged at WARN level - so we still get errors.
log4j.logger.com.amazonaws.services.kinesis.metrics=ERROR

这将仅抑制针对度量包类的警告(例如您提到的那个),但不会抑制错误,以防需要。

这与理想的解决方案相去甚远,但这使我们能够在部署现有 Spark 版本的同时部署解决方案。

后续步骤:向 Spark 打开一张票,以便他们希望我们能够在下一个版本中禁用它。

编辑 - 创建:https://issues.apache.org/jira/browse/SPARK-27420 用于跟踪

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-30
    • 1970-01-01
    • 2018-04-26
    • 1970-01-01
    • 1970-01-01
    • 2017-04-13
    • 1970-01-01
    相关资源
    最近更新 更多