Hi Tom

It is my understanding that in addition to block verification on client reads, 
each data node runs a DataBlockScanner in a background thread that periodically 
verifies all the blocks stored on the data node. The 
dfs.datanode.scan.period.hours property controls how often this verification 
occurs.

I think the reports are available via the data node /blockScannerReport HTTP 
endpoint, although I’m not sure I ever actually looked at one. (add ?listblocks 
to get the verification status of each block).

More info here: 
https://blog.cloudera.com/hdfs-datanode-scanners-and-disk-checker-explained/

Thanks

Austin

> On 21 Oct 2020, at 16:47, TomK <tomk...@mdevsys.com> wrote:
> 
> Hey Sanjeev,
> 
> Allright.  Thank you once more.  This is clear. 
> 
> However, this poses an issue then.  If during the two years, disk drives 
> develop bad blocks but do not necessarily fail to the point that they cannot 
> be mounted, that checksum would have changed since those filesystem blocks 
> can no longer be read.  However, from an HDFS perspective, since no checks 
> are done regularly, that is not known.   So HDFS still reports that the file 
> is fine, in other words, no missing blocks.  For example, if a disk is going 
> bad, but those files are not read for two years, the system won't know that 
> there is a problem.  Even when removing a data node temporarily and re-adding 
> the datanode, HDFS isn't checking because that HDFS file isn't read.
> 
> So let's assume this scenario.  Data nodes dn01 to dn10  exist. Each data 
> node has 10 x 10TB drives.
> And let's assume that there is one large file on those drives and it's 
> replicated to factor of X3.  
> 
> If during the two years the file isn't read, and 10 of those drives develop 
> bad blocks or other underlying hardware issues, then it is possible that HDFS 
> will still report everything fine, even with a replication factor of 3.  
> Because with 10 disks failing, it's possible a block or sector has failed 
> under each of the 3 copies of the data.  But HDFS would NOT know since 
> nothing triggered a read of that HDFS file.  Based on everything below, then 
> corruption is very much possible even with a replication of factor X3.  A 
> this point the file is unreadable but HDFS still reports no missing blocks.  
> 
> Similarly, if once I take a data node out, I adjust one of the files on the 
> data disks, HDFS will not know and still report everything fine.  That is 
> until someone read's the file.
> 
> Sounds like this is a very real possibility. 
> 
> Thx,
> TK
> 
> 
> On 10/21/2020 10:26 AM, संजीव (Sanjeev Tripurari) wrote:
>> Hi Tom
>> 
>> Therefore, if I write a file to HDFS but access it two years later, then the 
>> checksum will be computed only twice, at the beginning of the two years and 
>> again at the end when a client connects?  Correct?  As long as no process 
>> ever accesses the file between now and two years from now, the checksum is 
>> never redone and compared to the two year old checksum in the fsimage?
>> 
>> yes, Exactly unless data is read checksum is not verified. (when data is 
>> written and when the data is read), 
>> if checksum is mismatched, there is no way to correct it, you will have to 
>> re-write that file.
>> 
>> When  datanode is added back in, there is no real read operation on the 
>> files themselves.  The datanode just reports the blocks but doesn't really 
>> read the blocks that are there to re-verify the files and ensure consistency?
>> 
>> yes, Exactly, datanode maintains list of files and their blocks, which it 
>> reports, along with total disk size and used size.
>> Namenode only has list of blocks, unless datanodes is connected it wont know 
>> where the blocks are stored.
>> 
>> Regards
>> -Sanjeev
>> 
>> 
>> On Wed, 21 Oct 2020 at 18:31, TomK <tomk...@mdevsys.com 
>> <mailto:tomk...@mdevsys.com>> wrote:
>> Hey Sanjeev,
>> 
>> Thank you very much again.  This confirms my suspision.
>> 
>> Therefore, if I write a file to HDFS but access it two years later, then the 
>> checksum will be computed only twice, at the beginning of the two years and 
>> again at the end when a client connects?  Correct?  As long as no process 
>> ever accesses the file between now and two years from now, the checksum is 
>> never redone and compared to the two year old checksum in the fsimage?
>> 
>> When  datanode is added back in, there is no real read operation on the 
>> files themselves.  The datanode just reports the blocks but doesn't really 
>> read the blocks that are there to re-verify the files and ensure consistency?
>> 
>> Thx,
>> TK
>> 
>> 
>> 
>> On 10/21/2020 12:38 AM, संजीव (Sanjeev Tripurari) wrote:
>>> Hi Tom,
>>> 
>>> Every datanode sends heartbeat to namenode, on its list of blocks it has.
>>> 
>>> When a datanode which is disconnected for a while, after connecting will 
>>> send heartbeat to namenode, with list of blocks it has (till then namenode 
>>> will have under-replicated blocks).
>>> As soon as the datanode is connected to namenode, it will clear 
>>> under-replicatred blocks.
>>> 
>>> When a client connects to read or write a file, it will run checksum to 
>>> validate the file.
>>> 
>>> There is no independent process running to do checksum, as it will be heavy 
>>> process on each node.
>>> 
>>> Regards
>>> -Sanjeev
>>> 
>>> On Wed, 21 Oct 2020 at 00:18, Tom <t...@mdevsys.com 
>>> <mailto:t...@mdevsys.com>> wrote:
>>> Thank you.  That part I understand and am Ok with it.  
>>> 
>>> What I would like to know next is when again the CRC32C checksum is ran and 
>>> checked against the fsimage that the block file has not changed or become 
>>> corrupted?  
>>> 
>>> For example, if I take a datanode out, and within 15 minutes, plug it back 
>>> in, does HDF rerun the CRC 32C on all data disks on that node to make sure 
>>> blocks are ok?
>>> 
>>> Cheers,
>>> TK
>>> 
>>> Sent from my iPhone
>>> 
>>>> On Oct 20, 2020, at 1:39 PM, संजीव (Sanjeev Tripurari) 
>>>> <sanjeevtripur...@gmail.com <mailto:sanjeevtripur...@gmail.com>> wrote:
>>>> 
>>>> its done as sson as  a file is stored on disk.. 
>>>> 
>>>> Sanjeev 
>>>> 
>>>> On Tuesday, 20 October 2020, TomK <tomk...@mdevsys.com 
>>>> <mailto:tomk...@mdevsys.com>> wrote:
>>>> Thanks again.
>>>> 
>>>> At what points is the checksum validated (checked) after that?  For 
>>>> example, is it done on a daily basis or is it done only when the file is 
>>>> accessed?
>>>> 
>>>> Thx,
>>>> TK
>>>> 
>>>> On 10/20/2020 10:18 AM, संजीव (Sanjeev Tripurari) wrote:
>>>>> As soon as the file is written first time checksum is calculated and 
>>>>> updated in fsimage (first in edit logs), and same is replicated other 
>>>>> replicas.
>>>>> 
>>>>> 
>>>>> 
>>>>> On Tue, 20 Oct 2020 at 19:15, TomK <tomk...@mdevsys.com 
>>>>> <mailto:tomk...@mdevsys.com>> wrote:
>>>>> Hi Sanjeev,
>>>>> 
>>>>> Thank you.  It does help. 
>>>>> 
>>>>> At what points is the checksum calculated?  
>>>>> 
>>>>> Thx,
>>>>> TK
>>>>> 
>>>>> On 10/20/2020 3:03 AM, संजीव (Sanjeev Tripurari) wrote:
>>>>>> For Missing blocks and corrupted blocks, do check if all the datanode 
>>>>>> services are up, non of the disks where hdfs data is stored is 
>>>>>> accessible and have no issues, hosts are reachable from namenode,
>>>>>> 
>>>>>> If you are able to re-generate the data and write its great, otherwise 
>>>>>> hadoop cannot correct itself.
>>>>> Could you please elaborate on this?  Does it mean I have to continuously 
>>>>> access a file for HDFS to be able to detect corrupt blocks and correct 
>>>>> itself?
>>>>> 
>>>>>> 
>>>>>> 
>>>>>> "Does HDFS check that the data node is up, data disk is mounted, path to
>>>>>> the file exists and file can be read?"
>>>>>> -- yes, only after it fails it will say missing blocks.
>>>>>> 
>>>>>> Or does it also do a filesystem check on that data disk as well as
>>>>>> perhaps a checksum to ensure block integrity?
>>>>>> -- yes, every file cheksum is maintained and cross checked, if it fails 
>>>>>> it will say corrupted blocks.
>>>>>> 
>>>>>> hope this helps.
>>>>>> 
>>>>>> -Sanjeev
>>>>>> 
>>>>>> 
>>>>>> On Tue, 20 Oct 2020 at 09:52, TomK <tomk...@mdevsys.com 
>>>>>> <mailto:tomk...@mdevsys.com>> wrote:
>>>>>> Hello,
>>>>>> 
>>>>>> HDFS Missing Blocks / Corrupt Blocks Logic:  What are the specific 
>>>>>> checks done to determine a block is bad and needs to be replicated?
>>>>>> 
>>>>>> Does HDFS check that the data node is up, data disk is mounted, path to 
>>>>>> the file exists and file can be read?
>>>>>> 
>>>>>> Or does it also do a filesystem check on that data disk as well as 
>>>>>> perhaps a checksum to ensure block integrity?
>>>>>> 
>>>>>> I've googled on this quite a bit.  I don't see the exact answer I'm 
>>>>>> looking for.  I would like to know exactly what happens during file 
>>>>>> integrity verification that then constitutes missing blocks or corrupt 
>>>>>> blocks in the reports.
>>>>>> 
>>>>>> -- 
>>>>>> Thank  You,
>>>>>> TK.
>>>>>> 
>>>>>> ---------------------------------------------------------------------
>>>>>> To unsubscribe, e-mail: user-unsubscr...@hadoop.apache.org 
>>>>>> <mailto:user-unsubscr...@hadoop.apache.org>
>>>>>> For additional commands, e-mail: user-h...@hadoop.apache.org 
>>>>>> <mailto:user-h...@hadoop.apache.org>
>>>>>> 
>>>>> 
>>>> 
>>>> -- 
>>>> Thx,
>>>> TK.
>> 
>> -- 
>> Thx,
>> TK.
> 
> -- 
> Thx,
> TK.

Reply via email to