AWS S3上的HBase HFile损坏

时间:2017-12-27 21:41:40

标签: hadoop amazon-s3 mapreduce hbase elastic-map-reduce

我在 EMR群集 (emr-5.7.0)上运行 HBase > S3 即可。  我们使用“ ImportTsv ”和“ CompleteBulkLoad ”实用程序将数据导入HBase。  在我们的过程中,我们观察到间歇性地存在失败,表明某些导入文件存在 HFile损坏 。偶尔会发生这种情况,并且没有我们可以推断出错误的模式。

经过大量研究并在博客中提出了许多建议后,我尝试了以下修正但无济于事,我们仍然面临着这种差异。

  

技术堆栈:

     
      
  • AWS EMR群集(emr-5.7.0 | r3.8xlarge | 15个节点)

  •   
  • AWS S3

  •   
  • HBase 1.3.1

  •   
  

数据量:

     
      
  • ~960000行(待上传)| ~7GB TSV文件
  •   
  

按顺序使用的命令:

 1) hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.separator="|"  -Dimporttsv.columns="<Column Names (472 Columns)>" -Dimporttsv.bulk.output="<HFiles Path on HDFS>" <Table Name> <TSV file path on HDFS> 
 2) hadoop fs -chmod 777 <HFiles Path on HDFS>
 3) hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles <HFiles Path on HDFS> <Table Name>
  

已尝试修复:

     
      
  1. 增加S3 Max Connections:

         
        
    • 我们增加了以下属性,但似乎没有解决问题。 fs.s3.maxConnections :值已尝试 - 10000,20000,50000,100000。
    •   
  2.   
  3. HBase修复:

         
        
    • 另一种方法是执行HBase修复命令但它似乎也没有帮助。
        命令: hbase hbase hbck -repair
    •   
  4.   

错误跟踪如下:

  

[LoadIncrementalHFiles-17] mapreduce.LoadIncrementalHFiles:收到了   来自区域服务器的CorruptHFileException:表格中的行'00218333246'   'WB_MASTER'在   区域= WB_MASTER,00218333246,1506304894610.f108f470c00356217d63396aa11cf0bc。,   hostname = ip-10-244-8-74.ec2.internal,16020,1507907710216,seqNum = 198   org.apache.hadoop.hbase.io.hfile.CorruptHFileException:   org.apache.hadoop.hbase.io.hfile.CorruptHFileException:问题   从文件中读取HFile Trailer   S3:// wbpoc-landingzone / emrfs_test / wb_hbase_compressed /数据/默认/ WB_MASTER / f108f470c00356217d63396aa11cf0bc / CF / 2a9ecdc5c3aa4ad8aca535f56c35a32d_SeqId_200_     在   org.apache.hadoop.hbase.io.hfile.HFile.pickReaderVersion(HFile.java:497)     在   org.apache.hadoop.hbase.io.hfile.HFile.createReader(HFile.java:525)     在   org.apache.hadoop.hbase.regionserver.StoreFile $读者。(StoreFile.java:1170)     在   org.apache.hadoop.hbase.regionserver.StoreFileInfo.open(StoreFileInfo.java:259)     在   org.apache.hadoop.hbase.regionserver.StoreFile.open(StoreFile.java:427)     在   org.apache.hadoop.hbase.regionserver.StoreFile.createReader(StoreFile.java:528)     在   org.apache.hadoop.hbase.regionserver.StoreFile.createReader(StoreFile.java:518)     在   org.apache.hadoop.hbase.regionserver.HStore.createStoreFileAndReader(HStore.java:667)     在   org.apache.hadoop.hbase.regionserver.HStore.createStoreFileAndReader(HStore.java:659)     在   org.apache.hadoop.hbase.regionserver.HStore.bulkLoadHFile(HStore.java:799)     在   org.apache.hadoop.hbase.regionserver.HRegion.bulkLoadHFiles(HRegion.java:5574)     在   org.apache.hadoop.hbase.regionserver.RSRpcServices.bulkLoadHFile(RSRpcServices.java:2034)     在   org.apache.hadoop.hbase.protobuf.generated.ClientProtos $ ClientService $ 2.callBlockingMethod(ClientProtos.java:34952)     在org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:2339)     在org.apache.hadoop.hbase.ipc.CallRunner.run(CallRunner.java:123)     在   org.apache.hadoop.hbase.ipc.RpcExecutor $ Handler.run(RpcExecutor.java:188)     在   org.apache.hadoop.hbase.ipc.RpcExecutor $ Handler.run(RpcExecutor.java:168)   引起:java.io.FileNotFoundException:S3上的文件不存在   com.amazon.ws.emr.hadoop.fs.s3n.S3NativeFileSystem $ NativeS3FsInputStream.read(S3NativeFileSystem.java:203)     在java.io.BufferedInputStream.fill(BufferedInputStream.java:246)at   java.io.BufferedInputStream.read1(BufferedInputStream.java:286)at   java.io.BufferedInputStream.read(BufferedInputStream.java:345)at   java.io.DataInputStream.readFully(DataInputStream.java:195)at   org.apache.hadoop.hbase.io.hfile.FixedFileTrailer.readFromStream(FixedFileTrailer.java:391)     在   org.apache.hadoop.hbase.io.hfile.HFile.pickReaderVersion(HFile.java:482)

找出造成这种差异的根本原因的任何建议都会非常有用。

感谢您的帮助!谢谢!

1 个答案:

答案 0 :(得分:0)

经过大量研究和试验后错误,感谢AWS支持人员,我终于能够找到解决此问题的方法。似乎问题是S3最终一致性的结果。 AWS团队建议使用以下属性,它就像一个魅力,到目前为止我们还没有遇到HFile腐败问题。希望如果有人面临同样的问题,这会有所帮助!

属性 hbase-site.xml ):    hbase.bulkload.retries.retryOnIOException:true