You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@hbase.apache.org by "Guanghao Zhang (Jira)" <ji...@apache.org> on 2020/04/02 15:32:00 UTC
[jira] [Resolved] (HBASE-24021) Fail fast when bulkLoadHFiles
method catch some IOException
[ https://issues.apache.org/jira/browse/HBASE-24021?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Guanghao Zhang resolved HBASE-24021.
------------------------------------
Fix Version/s: 2.2.5
2.4.0
2.3.0
3.0.0
Resolution: Fixed
Pushed to branch-2.2+.
> Fail fast when bulkLoadHFiles method catch some IOException
> -----------------------------------------------------------
>
> Key: HBASE-24021
> URL: https://issues.apache.org/jira/browse/HBASE-24021
> Project: HBase
> Issue Type: Improvement
> Components: HFile, regionserver
> Reporter: niuyulin
> Assignee: niuyulin
> Priority: Major
> Fix For: 3.0.0, 2.3.0, 2.4.0, 2.2.5
>
>
> In production environment, we usually do bulkload huge amount hfile . It reasonable fail fast when any IOException occur
>
> hbase/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java
> {code:java}
> public Map<byte[], List<Path>> bulkLoadHFiles(Collection<Pair<byte[], String>> familyPaths,
> boolean assignSeqId, BulkLoadListener bulkLoadListener,
> boolean copyFile, List<String> clusterIds, boolean replicate) throws IOException {
> ......
> try {
> this.writeRequestsCount.increment();
> // There possibly was a split that happened between when the split keys
> // were gathered and before the HRegion's write lock was taken. We need
> // to validate the HFile region before attempting to bulk load all of them
> List<IOException> ioes = new ArrayList<>();
> List<Pair<byte[], String>> failures = new ArrayList<>();
> for (Pair<byte[], String> p : familyPaths) {
> byte[] familyName = p.getFirst();
> String path = p.getSecond();
> HStore store = getStore(familyName);
> if (store == null) {
> IOException ioe = new org.apache.hadoop.hbase.DoNotRetryIOException(
> "No such column family " + Bytes.toStringBinary(familyName));
> ioes.add(ioe);
> } else {
> try {
> store.assertBulkLoadHFileOk(new Path(path));
> } catch (WrongRegionException wre) {
> // recoverable (file doesn't fit in region)
> failures.add(p);
> } catch (IOException ioe) {
> // unrecoverable (hdfs problem)
> ioes.add(ioe);
> }
> }
> }
> // validation failed because of some sort of IO problem.
> if (ioes.size() != 0) {
> IOException e = MultipleIOException.createIOException(ioes);
> LOG.error("There were one or more IO errors when checking if the bulk load is ok.", e);
> throw e;
> }
> {code}
--
This message was sent by Atlassian Jira
(v8.3.4#803005)