我有一个EMR集群,运行一个火花流作业成功了几天。但几天后,群集因步骤失败而终止。我查了日志上面写着
OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x00007f8cb0854000, 12288, 0) failed; error='Cannot allocate memory' (errno=12)
Command exiting with ret '1'
对于此错误,我进行了检查,发现对于JRE内存不足。
我发现集群创建EMR steps日志并存储在路径/mnt/var/logs/hadoop/steps/step_id/上,在创建集群时,我给出了一个logUri路径,日志根据该路径复制到s3位置。所以我的猜测是,由于这些日志,步骤失败正在发生。
谁能建议我如何定期从集群中删除这些emr步骤日志,以便集群不会耗尽内存?
您可以使用以下boto3代码(我确信这也可以在Java中用AWS SDK for Java完成)来删除日志,对于定期删除,您有如下选项
函数删除日志(输入即将到期的阈值
、桶名
和前缀
,可以是“logs/sparksteps/j-”
)
def clean_s3(buck, match_prefix,exp_threshold):
s3_client = boto3.client('s3')
key_names = []
file_timestamp = []
file_size = []
kwargs = {"Bucket": buck, "Prefix": match_prefix}
while True:
result = s3_client.list_objects_v2(**kwargs)
for obj in result["Contents"]:
if "." in obj["Key"]:
key_names.append(obj["Key"])
file_timestamp.append(obj["LastModified"].timestamp())
file_size.append(obj["Size"])
try:
kwargs["ContinuationToken"] = result["NextContinuationToken"]
except KeyError:
break
key_info = {
"key_path": key_names,
"timestamp": file_timestamp,
"size": file_size
}
#print(f'All Keys in {buck} with {prefix} Prefix found!')
s3_file = key_info
for i, fs in enumerate(s3_file["timestamp"]):
#file_expired = is_expired(fs)
#print(fs)
if fs < exp_threshold: #if True is recieved
print("Deleting %s" % {s3_file["key_path"][i]})
s3_client.delete_object(Bucket=buck, Key=s3_file["key_path"][i])
您可以计算您需要通过的过期阈值(以纪元秒为单位),如下所示
date_now = time.time()
days = 7 # 7 days
total_time = 86400*days
exp_threshold = date_now-total_time
s3_cleanup = PythonOperator(
task_id='s3cleanup',
python_callable=clean_s3,
op_kwargs={
'buck': '<you bucket>',
'match_prefix': "logs/sparksteps/j-",
'exp_threshold':exp_threshold,
},dag=dag)
或者,使用apporach 2,您可以使用AWS lamda调度它,请参见此处的lambda调度指南
命令用于删除集群及其所有相关内容。 这个操作是永久的并且回滚。 以下语句是命令的基本语法。 其中定义要移除的群集的名称,定义要移除的群集的ID。 示例 尝试使用以下命令删除群集。 如果上述查询成功执行,您将得到以下输出。
问题内容: 我当前的光泽配置设置如下所示: 并且想知道如何删除设置的 “ max_bytes_per_sec” 部分。 你能给我一个建议吗? 问题答案: 好的。我发现了如何删除持久性设置:您转到主节点的已定义数据路径,更具体地说(在我的情况下),然后删除全局状态文件。然后重新启动elasticsearch。
本部分将删除该教程所创建的全部计算资源。 计算节点 删除所有的控制节点和 worker 节点: gcloud -q compute instances delete controller-0 controller-1 controller-2 worker-0 worker-1 worker-2 网路 删除外部负载均衡器以及网络资源: gcloud -q compute forwardin
大家好,所以我有这个MYSQl代码,我插入日期,当它发送和输入的日子,可以是从1做7。我怎样才能让MYSQl在输入天之后删除一行?例如:我在2021年22.03.2021下午3:54创建了一个产品,输入的过期天数是6天。我想删除产品后正好6天。
本文向大家介绍nginx日志按天生成和定期删除日志的方法,包括了nginx日志按天生成和定期删除日志的方法的使用技巧和注意事项,需要的朋友参考一下 问题:nginx会按照nginx.conf的配置生成access.log和error.log,随着访问量的增长,日志文件会越来越大,既会影响访问的速度(写入日志时间延长),也会增加查找日志的难度,nginx没有这种按天或更细粒度生成日志的机制。所以下面
Tiller在我的kubernetes集群中工作不正常。我要删除所有的蒂勒。分蘖(2.5.1)有1个展开,1个复制集和1个荚。 null 结果为“replicaset”tiller-deploy-2745651589“deleted” 但是,会立即重新创建tiller-deploy-2745651589 Kubectl get RS-N kube-system显示tiller-deploy-274