[jira] [Commented] (SPARK-47622) Spark creates lot of tiny blocks for a single driverLog file of size less than a dfs.blocksize

2024-03-28 Thread Srinivasu Majeti (Jira)


[ 
https://issues.apache.org/jira/browse/SPARK-47622?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=17831831#comment-17831831
 ] 

Srinivasu Majeti commented on SPARK-47622:
--

CCing [~vanzin] to look at it and guide on the next proceedings. Thank you!

> Spark creates lot of tiny blocks for a single driverLog file of size less 
> than a dfs.blocksize
> --
>
> Key: SPARK-47622
> URL: https://issues.apache.org/jira/browse/SPARK-47622
> Project: Spark
>  Issue Type: Bug
>  Components: Spark Shell, Spark Submit
>Affects Versions: 3.3.2
>Reporter: Srinivasu Majeti
>Priority: Major
>
> Upon reviewing the spark code, found that /user/spark/driverLogs are synced 
> to HDFS with hsync option as shown below.
> {code:java}
>  hdfsStream.hsync(EnumSet.allOf(classOf[HdfsDataOutputStream.SyncFlag]))
> Ref: 
> https://github.com/apache/spark/blob/a3c04ec1145662e4227d57cd953bffce96b8aad7/core/src/main/scala/org/apache/spark/util/logging/DriverLogger.scala{code}
> As a result of this we see lot of tiny blocks getting synced every 5 seconds 
> with a new block. So we see a small HDFS file with 8 blocks as shown in the 
> below example.
> {code:java}
> [r...@ccycloud-3.smajeti.root.comops.site subdir0]# hdfs fsck 
> /user/spark/driverLogs/application_1710495774861_0002_driver.log
> Connecting to namenode via 
> https://ccycloud-3.smajeti.root.comops.site:20102/fsck?ugi=hdfs=%2Fuser%2Fspark%2FdriverLogs%2Fapplication_1710495774861_0002_driver.log
> FSCK started by hdfs (auth:KERBEROS_SSL) from /10.140.136.139 for path 
> /user/spark/driverLogs/application_1710495774861_0002_driver.log at Thu Mar 
> 28 06:37:29 UTC 2024
> Status: HEALTHY
>  Number of data-nodes:4
>  Number of racks: 1
>  Total dirs:  0
>  Total symlinks:  0
> Replicated Blocks:
>  Total size:  157574 B
>  Total files: 1
>  Total blocks (validated):8 (avg. block size 19696 B)
>  Minimally replicated blocks: 8 (100.0 %) {code}
> HdfsDataOutputStream.SyncFlag includes two flags UPDATE_LENGTH and END_BLOCK. 
> This has been an expected behavior for some time now and these flags will 
> help visualize the latest size of the HDFS Driver log file and to achieve 
> that, blocks are being ended/closed every 5-second sync. Every new sync will 
> create a new block for the same HDFS driver log file. This hysnc behavior was 
> started after fixing SPARK-29105 (SHS may delete driver log file of 
> in-progress application) 5 years back.
> But this leaves Namenode to manage a lot of meta and becomes an overhead at 
> times in large clusters.
> {code:java}
> public static enum SyncFlag {
> UPDATE_LENGTH,
> END_BLOCK;
> private SyncFlag() {
> }
> }
> {code}
> I don't see any configurable option to avoid this and avoiding this type of 
> hsync may have some side effects in spark as we saw SPARK-29105 bug.
> We only have two options that needs manual intevention
> 1. Keep cleaning these Driver logs after some time
> 2. Keep merging these small block files into files with 128MB 
> Can we provide some customizable option to merge these blocks while closing 
> the spark-shell or during closing the driver log file?



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

-
To unsubscribe, e-mail: issues-unsubscr...@spark.apache.org
For additional commands, e-mail: issues-h...@spark.apache.org



[jira] [Created] (SPARK-47622) Spark creates lot of tiny blocks for a single driverLog file of size less than a dfs.blocksize

2024-03-28 Thread Srinivasu Majeti (Jira)
Srinivasu Majeti created SPARK-47622:


 Summary: Spark creates lot of tiny blocks for a single driverLog 
file of size less than a dfs.blocksize
 Key: SPARK-47622
 URL: https://issues.apache.org/jira/browse/SPARK-47622
 Project: Spark
  Issue Type: Bug
  Components: Spark Shell, Spark Submit
Affects Versions: 3.3.2
Reporter: Srinivasu Majeti


Upon reviewing the spark code, found that /user/spark/driverLogs are synced to 
HDFS with hsync option as shown below.
{code:java}
 hdfsStream.hsync(EnumSet.allOf(classOf[HdfsDataOutputStream.SyncFlag]))

Ref: 
https://github.com/apache/spark/blob/a3c04ec1145662e4227d57cd953bffce96b8aad7/core/src/main/scala/org/apache/spark/util/logging/DriverLogger.scala{code}
As a result of this we see lot of tiny blocks getting synced every 5 seconds 
with a new block. So we see a small HDFS file with 8 blocks as shown in the 
below example.
{code:java}
[r...@ccycloud-3.smajeti.root.comops.site subdir0]# hdfs fsck 
/user/spark/driverLogs/application_1710495774861_0002_driver.log
Connecting to namenode via 
https://ccycloud-3.smajeti.root.comops.site:20102/fsck?ugi=hdfs=%2Fuser%2Fspark%2FdriverLogs%2Fapplication_1710495774861_0002_driver.log
FSCK started by hdfs (auth:KERBEROS_SSL) from /10.140.136.139 for path 
/user/spark/driverLogs/application_1710495774861_0002_driver.log at Thu Mar 28 
06:37:29 UTC 2024

Status: HEALTHY
 Number of data-nodes:  4
 Number of racks:   1
 Total dirs:0
 Total symlinks:0

Replicated Blocks:
 Total size:157574 B
 Total files:   1
 Total blocks (validated):  8 (avg. block size 19696 B)
 Minimally replicated blocks:   8 (100.0 %) {code}
HdfsDataOutputStream.SyncFlag includes two flags UPDATE_LENGTH and END_BLOCK. 
This has been an expected behavior for some time now and these flags will help 
visualize the latest size of the HDFS Driver log file and to achieve that, 
blocks are being ended/closed every 5-second sync. Every new sync will create a 
new block for the same HDFS driver log file. This hysnc behavior was started 
after fixing SPARK-29105 (SHS may delete driver log file of in-progress 
application) 5 years back.

But this leaves Namenode to manage a lot of meta and becomes an overhead at 
times in large clusters.
{code:java}
public static enum SyncFlag {
UPDATE_LENGTH,
END_BLOCK;

private SyncFlag() {
}
}
{code}
I don't see any configurable option to avoid this and avoiding this type of 
hsync may have some side effects in spark as we saw SPARK-29105 bug.
We only have two options that needs manual intevention
1. Keep cleaning these Driver logs after some time
2. Keep merging these small block files into files with 128MB 

Can we provide some customizable option to merge these blocks while closing the 
spark-shell or during closing the driver log file?



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

-
To unsubscribe, e-mail: issues-unsubscr...@spark.apache.org
For additional commands, e-mail: issues-h...@spark.apache.org