[ 
https://issues.apache.org/jira/browse/HDFS-15715?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17248729#comment-17248729
 ] 

zhengchenyu edited comment on HDFS-15715 at 12/14/20, 3:52 AM:
---------------------------------------------------------------

I solve this problem, and run on one cluster in near one week. But our version 
is hadoop-2.7.3. Because after hadoop-2.8, moudle hadoop-hdfs was split with 
multi maven moudle. So I submited a ugly patch, this is not final version. I 
only wanna show how to slove this problem. I submited HDFS-15715.001.patch.

I think there will be two way to solve this problem:

(1) recode chooseStorageTypes, and remove the result which is not meet storage 
policy demand from results.
(2) remove the result which is not meet storage policy demand from results, 
after chooseStorageTypes.

I choose first way, becuase I thinks it save calculation. To label it, i use a 
new method 'chooseStorageTypesWIth Node'. But a little ugly, maybe we need to 
reorganize the code. 





was (Author: zhengchenyu):
I solve this problem, and run on one cluster in near one week. But our version 
is hadoop-2.7.3. Because after hadoop-2.8, moudle hadoop-hdfs was split with 
multi maven moudle. So I submited a ugly patch, this is not final version. I 
only wanna show how to slove this problem. I submited HDFS-15715.001.patch.

I think there will be two way to solve this problem:

(1) recode chooseStorageTypes, and remove the result which is not meet storage 
policy demand from results.
(2) remove the result which is not meet storage policy demand from results, 
after chooseStorageTypes.

I choose first way, becuase I thinks it save calculation. But a little ugly, 
maybe we need to reorganize the code. 




> ReplicatorMonitor performance degrades, when the storagePolicy of many file 
> are not match with their real datanodestorage 
> --------------------------------------------------------------------------------------------------------------------------
>
>                 Key: HDFS-15715
>                 URL: https://issues.apache.org/jira/browse/HDFS-15715
>             Project: Hadoop HDFS
>          Issue Type: Bug
>          Components: hdfs
>    Affects Versions: 2.7.3, 3.2.1
>            Reporter: zhengchenyu
>            Assignee: zhengchenyu
>            Priority: Major
>             Fix For: 3.3.1
>
>         Attachments: HDFS-15715.001.patch
>
>
> One of our Namenode which has 300M files and blocks. In common way, this 
> namode shoud not be in heavy load. But we found rpc process time keep high, 
> and decommission is very slow.
>  
> I search the metrics, I found uderreplicated blocks keep high. Then I jstack 
> namenode, found 'InnerNode.getLoc' is hot spot cod. I think maybe 
> chooseTarget can't find block, so result to performance degradation. Consider 
> with HDFS-10453, I guess maybe some logical trigger to the scene where 
> chooseTarget can't find proper block.
> Then I enable some debug. (Of course I revise some code so that only debug 
> isGoodTarget, because enable BlockPlacementPolicy's debug log is dangrouse). 
> I found "the rack has too many chosen nodes" is called. Then I found some log 
> like this 
> {code}
> 2020-12-04 12:13:56,345 WARN 
> org.apache.hadoop.hdfs.server.blockmanagement.BlockPlacementPolicy: Failed to 
> place enough replicas, still in need of 0 to reach 3 (unavailableStorages=[], 
> storagePolicy=BlockStoragePolicy{HOT:7, storageTypes=[DISK], 
> creationFallbacks=[], replicationFallbacks=[ARCHIVE]}, newBlock=false) For 
> more information, please enable DEBUG log level on 
> org.apache.hadoop.hdfs.server.blockmanagement.BlockPlacementPolicy
> 2020-12-04 12:14:03,843 WARN 
> org.apache.hadoop.hdfs.server.blockmanagement.BlockPlacementPolicy: Failed to 
> place enough replicas, still in need of 0 to reach 3 (unavailableStorages=[], 
> storagePolicy=BlockStoragePolicy{COLD:2, storageTypes=[ARCHIVE], 
> creationFallbacks=[], replicationFallbacks=[]}, newBlock=false) For more 
> information, please enable DEBUG log level on 
> org.apache.hadoop.hdfs.server.blockmanagement.BlockPlacementPolicy
> {code} 
> Then through some debug and simulation, I found the reason, and reproduction 
> this exception.
> The reason is that some developer use COLD storage policy and mover, but the 
> operatiosn of setting storage policy and mover are asynchronous. So some 
> file's real  datanodestorages are not match with this storagePolicy.
> Let me simualte this proccess. If /tmp/a is create, then have 2 replications 
> are DISK. Then set storage policy to COLD. When some logical trigger(For 
> example decommission) to copy this block. chooseTarget then use 
> chooseStorageTypes to filter real needed block. Here the size of variable 
> requiredStorageTypes which chooseStorageTypes returned is 3. But the size of  
> result is 2. But 3 means need 3 ARCHIVE storage. 2 means bocks has 2 DISK 
> storage. Then will request to choose 3 target. choose first target is right, 
> but when choose seconde target, the variable 'counter' is 4 which is larger 
> than maxTargetPerRack which is 3 in function isGoodTarget. So skip all 
> datanodestorage. Then result to bad performance.
> I think chooseStorageTypes need to consider the result, when the exist 
> replication doesn't meet storage policy's demand, we need to remove this from 
> result. 
> I changed by this way, and test in my unit-test. Then solve it.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

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

Reply via email to