[ https://issues.apache.org/jira/browse/MAPREDUCE-7435?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17714273#comment-17714273 ]
ASF GitHub Bot commented on MAPREDUCE-7435: ------------------------------------------- steveloughran commented on PR #5519: URL: https://github.com/apache/hadoop/pull/5519#issuecomment-1515223731 parallel test running failed everywhere, but I have improved ITestAbfsLoadManifestsStage performance * back to the original 200 manifest files * increase worker pool and buffer queue size (more significant before reducing the manifest count) brings test time down to 10s locally. IOStats does imply many MB of data is being PUT/GET so it is good to keep small so people running with less bandwidth don't suffer. Maybe, maybe, the size could switch with a -Dscale? iostat. there seems a lot of delete requests, but its because when we write the manifest it is done as a write to temp then rename, and the dest is deleted first, without any check. in production that cost is absorbed in task commit, and @60ms vs 40 for a head, we should decide what to do here. I think for renames in job commit, we could do the HEAD before the DELETE simply because that is bottleneck, so maybe do it here too... ``` 2023-04-19 19:43:05,489 INFO [JUnit]: manifest.AbstractManifestCommitterTest (AbstractManifestCommitterTest.java:dumpFileSystemIOStatistics(450)) - Aggregate FileSystem Statistics counters=((action_http_delete_request=402) (action_http_delete_request.failures=200) (action_http_get_request=202) (action_http_head_request=404) (action_http_head_request.failures=202) (action_http_put_request=1103) (bytes_received=10160814) (bytes_sent=10160814) (committer_task_directory_count=20000) (committer_task_file_count=20000) (committer_task_manifest_file_size=10160814) (connections_made=2111) (directories_created=303) (files_created=200) (get_responses=2111) (job_stage_create_target_dirs=1) (job_stage_load_manifests=1) (job_stage_setup=1) (op_create=200) (op_create_directories=1) (op_delete=803) (op_get_file_status=407) (op_get_file_status.failures=202) (op_list_status=2) (op_load_all_manifests=1) (op_load_manifest=200) (op_mkdirs=605) (op_msync=1) (op_open=200) (op_rename=400) (rename_path_attempts=200) (send_requests=1103) (task_stage_save_manifest=200) (task_stage_save_task_manifest=200) (task_stage_setup=200)); gauges=(); minimums=((action_http_delete_request.failures.min=25) (action_http_delete_request.min=36) (action_http_get_request.min=40) (action_http_head_request.failures.min=22) (action_http_head_request.min=20) (action_http_put_request.min=24) (committer_task_directory_count=100) (committer_task_file_count=100) (committer_task_manifest_file_size=49990) (job_stage_create_target_dirs.min=259) (job_stage_load_manifests.min=2804) (job_stage_setup.min=183) (op_create_directories.min=256) (op_delete.min=25) (op_get_file_status.failures.min=22) (op_get_file_status.min=22) (op_list_status.min=87) (op_load_all_manifests.min=2627) (op_load_manifest.min=49) (op_mkdirs.min=24) (op_msync.min=0) (op_rename.min=70) (task_stage_save_manifest.min=273) (task_stage_save_task_manifest.min=144) (task_stage_setup.min=51)); maximums=((action_http_delete_request.failures.max=413) (action_http_delete_request.max=291) (action_http_get_request.max=2031) (action_http_head_request.failures.max=439) (action_http_head_request.max=430) (action_http_put_request.max=2662) (committer_task_directory_count=100) (committer_task_file_count=100) (committer_task_manifest_file_size=50876) (job_stage_create_target_dirs.max=259) (job_stage_load_manifests.max=2804) (job_stage_setup.max=183) (op_create_directories.max=256) (op_delete.max=413) (op_get_file_status.failures.max=439) (op_get_file_status.max=22) (op_list_status.max=127) (op_load_all_manifests.max=2627) (op_load_manifest.max=2031) (op_mkdirs.max=245) (op_msync.max=0) (op_rename.max=932) (task_stage_save_manifest.max=2863) (task_stage_save_task_manifest.max=2757) (task_stage_setup.max=471)); means=((action_http_delete_request.failures.mean=(samples=200, sum=9850, mean=49.2500)) (action_http_delete_request.mean=(samples=202, sum=12448, mean=61.6238)) (action_http_get_request.mean=(samples=202, sum=78955, mean=390.8663)) (action_http_head_request.failures.mean=(samples=202, sum=12782, mean=63.2772)) (action_http_head_request.mean=(samples=202, sum=8096, mean=40.0792)) (action_http_put_request.mean=(samples=1103, sum=108966, mean=98.7906)) (committer_task_directory_count=(samples=200, sum=20000, mean=100.0000)) (committer_task_file_count=(samples=200, sum=20000, mean=100.0000)) (committer_task_manifest_file_size=(samples=200, sum=10160814, mean=50804.0700)) (job_stage_create_target_dirs.mean=(samples=1, sum=259, mean=259.0000)) (job_stage_load_manifests.mean=(samples=1, sum=2804, mean=2804.0000)) (job_stage_setup.mean=(samples=1, sum=183, mean=183.0000)) (op_create_directories.mean=(samples=1, sum=256, mean=256.0000)) (op_delete.mean=(samples=401, sum=22278, mean=55.5561)) (op_get_file_status.failures.mean=(samples=202, sum=12806, mean=63.3960)) (op_get_file_status.mean=(samples=1, sum=22, mean=22.0000)) (op_list_status.mean=(samples=2, sum=214, mean=107.0000)) (op_load_all_manifests.mean=(samples=1, sum=2627, mean=2627.0000)) (op_load_manifest.mean=(samples=200, sum=79570, mean=397.8500)) (op_mkdirs.mean=(samples=302, sum=15536, mean=51.4437)) (op_msync.mean=(samples=1, sum=0, mean=0.0000)) (op_rename.mean=(samples=200, sum=22999, mean=114.9950)) (task_stage_save_manifest.mean=(samples=200, sum=115797, mean=578.9850)) (task_stage_save_task_manifest.mean=(samples=200, sum=82893, mean=414.4650)) (task_stage_setup.mean=(samples=200, sum=21878, mean=109.3900))); ``` > ManifestCommitter OOM on azure job > ---------------------------------- > > Key: MAPREDUCE-7435 > URL: https://issues.apache.org/jira/browse/MAPREDUCE-7435 > Project: Hadoop Map/Reduce > Issue Type: Bug > Components: client > Affects Versions: 3.3.5 > Reporter: Steve Loughran > Assignee: Steve Loughran > Priority: Major > Labels: pull-request-available > > I've got some reports of spark jobs OOM if the manifest committer is used > through abfs. > either the manifests are using too much memory, or something is not working > with azure stream memory use (or both). > before proposing a solution, first step should be to write a test to load > many, many manifests, each with lots of dirs and files to see what breaks. > note: we did have OOM issues with the s3a committer, on teragen but those > structures have to include every etag of every block, so the manifest size is > O(blocks); the new committer is O(files + dirs). > {code} > java.lang.OutOfMemoryError: Java heap space > at > org.apache.hadoop.fs.azurebfs.services.AbfsInputStream.readOneBlock(AbfsInputStream.java:314) > at > org.apache.hadoop.fs.azurebfs.services.AbfsInputStream.read(AbfsInputStream.java:267) > at java.io.DataInputStream.read(DataInputStream.java:149) > at > com.fasterxml.jackson.core.json.ByteSourceJsonBootstrapper.ensureLoaded(ByteSourceJsonBootstrapper.java:539) > at > com.fasterxml.jackson.core.json.ByteSourceJsonBootstrapper.detectEncoding(ByteSourceJsonBootstrapper.java:133) > at > com.fasterxml.jackson.core.json.ByteSourceJsonBootstrapper.constructParser(ByteSourceJsonBootstrapper.java:256) > at com.fasterxml.jackson.core.JsonFactory._createParser(JsonFactory.java:1656) > at com.fasterxml.jackson.core.JsonFactory.createParser(JsonFactory.java:1085) > at > com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3585) > at > org.apache.hadoop.util.JsonSerialization.fromJsonStream(JsonSerialization.java:164) > at org.apache.hadoop.util.JsonSerialization.load(JsonSerialization.java:279) > at > org.apache.hadoop.mapreduce.lib.output.committer.manifest.files.TaskManifest.load(TaskManifest.java:361) > at > org.apache.hadoop.mapreduce.lib.output.committer.manifest.impl.ManifestStoreOperationsThroughFileSystem.loadTaskManifest(ManifestStoreOperationsThroughFileSystem.java:133) > at > org.apache.hadoop.mapreduce.lib.output.committer.manifest.stages.AbstractJobOrTaskStage.lambda$loadManifest$6(AbstractJobOrTaskStage.java:493) > at > org.apache.hadoop.mapreduce.lib.output.committer.manifest.stages.AbstractJobOrTaskStage$$Lambda$231/1813048085.apply(Unknown > Source) > at > org.apache.hadoop.fs.statistics.impl.IOStatisticsBinding.invokeTrackingDuration(IOStatisticsBinding.java:543) > at > org.apache.hadoop.fs.statistics.impl.IOStatisticsBinding.lambda$trackDurationOfOperation$5(IOStatisticsBinding.java:524) > at > org.apache.hadoop.fs.statistics.impl.IOStatisticsBinding$$Lambda$217/489150849.apply(Unknown > Source) > at > org.apache.hadoop.fs.statistics.impl.IOStatisticsBinding.trackDuration(IOStatisticsBinding.java:445) > at > org.apache.hadoop.mapreduce.lib.output.committer.manifest.stages.AbstractJobOrTaskStage.loadManifest(AbstractJobOrTaskStage.java:492) > at > org.apache.hadoop.mapreduce.lib.output.committer.manifest.stages.LoadManifestsStage.fetchTaskManifest(LoadManifestsStage.java:170) > at > org.apache.hadoop.mapreduce.lib.output.committer.manifest.stages.LoadManifestsStage.processOneManifest(LoadManifestsStage.java:138) > at > org.apache.hadoop.mapreduce.lib.output.committer.manifest.stages.LoadManifestsStage$$Lambda$229/137752948.run(Unknown > Source) > at > org.apache.hadoop.util.functional.TaskPool$Builder.lambda$runParallel$0(TaskPool.java:410) > at > org.apache.hadoop.util.functional.TaskPool$Builder$$Lambda$230/467893357.run(Unknown > Source) > at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) > at java.util.concurrent.FutureTask.run(FutureTask.java:266) > at > java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) > at > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) > at java.lang.Thread.run(Thread.java:750) > {code} -- This message was sent by Atlassian Jira (v8.20.10#820010) --------------------------------------------------------------------- To unsubscribe, e-mail: mapreduce-issues-unsubscr...@hadoop.apache.org For additional commands, e-mail: mapreduce-issues-h...@hadoop.apache.org