Return-Path: X-Original-To: apmail-hadoop-hdfs-issues-archive@minotaur.apache.org Delivered-To: apmail-hadoop-hdfs-issues-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 9ED5A18096 for ; Tue, 8 Mar 2016 19:21:41 +0000 (UTC) Received: (qmail 275 invoked by uid 500); 8 Mar 2016 19:21:41 -0000 Delivered-To: apmail-hadoop-hdfs-issues-archive@hadoop.apache.org Received: (qmail 228 invoked by uid 500); 8 Mar 2016 19:21:41 -0000 Mailing-List: contact hdfs-issues-help@hadoop.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: hdfs-issues@hadoop.apache.org Delivered-To: mailing list hdfs-issues@hadoop.apache.org Received: (qmail 99890 invoked by uid 99); 8 Mar 2016 19:21:41 -0000 Received: from arcas.apache.org (HELO arcas) (140.211.11.28) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 08 Mar 2016 19:21:41 +0000 Received: from arcas.apache.org (localhost [127.0.0.1]) by arcas (Postfix) with ESMTP id 014462C1F7B for ; Tue, 8 Mar 2016 19:21:41 +0000 (UTC) Date: Tue, 8 Mar 2016 19:21:41 +0000 (UTC) From: "Wei-Chiu Chuang (JIRA)" To: hdfs-issues@hadoop.apache.org Message-ID: In-Reply-To: References: Subject: [jira] [Commented] (HDFS-8564) BlockPoolSlice.checkDirs() will trigger excessive IO while traversing all sub-directories under finalizedDir MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-JIRA-FingerPrint: 30527f35849b9dde25b450d4833f0394 [ https://issues.apache.org/jira/browse/HDFS-8564?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15185558#comment-15185558 ] Wei-Chiu Chuang commented on HDFS-8564: --------------------------------------- [~cmccabe] Colin, you're right. The docs about BlockScanner was wrong about it. It's run periodically by default 5 weeks. IMO, 5 weeks in between makes it hardly the replacement for BlockPoolSlice.checkDirs(). > BlockPoolSlice.checkDirs() will trigger excessive IO while traversing all sub-directories under finalizedDir > ------------------------------------------------------------------------------------------------------------ > > Key: HDFS-8564 > URL: https://issues.apache.org/jira/browse/HDFS-8564 > Project: Hadoop HDFS > Issue Type: Bug > Components: datanode > Affects Versions: 3.0.0 > Reporter: Esteban Gutierrez > Assignee: Esteban Gutierrez > Priority: Critical > > DataNodes continuously call checkDiskErrorAsync() for multiple operations in the DN in order to verify if a volume hasn't experienced any failure. When DN.startCheckDiskErrorThread() is invoked we need to traverse all configured data volumes on a DN to see which volumes need to be removed (see FsVolumeList.checkDir(s)) however that means that for each directory on BlockPoolSlice we need to call DiskChecker.checkDirs() which will recursively will look into the rbw, tmp and finalized directories: > {code} > void checkDirs() throws DiskErrorException { > DiskChecker.checkDirs(finalizedDir); > DiskChecker.checkDir(tmpDir); > DiskChecker.checkDir(rbwDir); > } > {code} > Unfortunately after HDFS-6482, the subdirectory structure is created with the following algorithm: > {code} > public static File idToBlockDir(File root, long blockId) { > int d1 = (int)((blockId >> 16) & 0xff); > int d2 = (int)((blockId >> 8) & 0xff); > String path = DataStorage.BLOCK_SUBDIR_PREFIX + d1 + SEP + > DataStorage.BLOCK_SUBDIR_PREFIX + d2; > return new File(root, path); > } > {code} > Which leaves each data volume with 64K directories (256 directories x 256 subdirectories) A side effect of this is that if the dentries haven't been cached by the OS, then the DN needs to recursively scan up to 64k directories x the number of configured data volumes (x number of files) impacting IO for other operations while DiskChecker.checkDirs(finalizedDir) is running. > There are few possibilities to address this problem: > 1. Do not scan at all finalizedDir > 2. Limit to one level the number of sub directories to scan recursively. (256) > 3. Remove a subdirectory immediately it doesn't have any block under it. -- This message was sent by Atlassian JIRA (v6.3.4#6332)