我在 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>
已尝试修复:
增加S3 Max Connections:
- 我们增加了以下属性,但似乎没有解决问题。 fs.s3.maxConnections :值已尝试 - 10000,20000,50000,100000。
- 醇>
HBase修复:
- 另一种方法是执行HBase修复命令但它似乎也没有帮助。
命令: hbase hbase hbck -repair
错误跟踪如下:
[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)
找出造成这种差异的根本原因的任何建议都会非常有用。
感谢您的帮助!谢谢!
答案 0 :(得分:0)
经过大量研究和试验后错误,感谢AWS支持人员,我终于能够找到解决此问题的方法。似乎问题是S3最终一致性的结果。 AWS团队建议使用以下属性,它就像一个魅力,到目前为止我们还没有遇到HFile腐败问题。希望如果有人面临同样的问题,这会有所帮助!
属性( hbase-site.xml ): hbase.bulkload.retries.retryOnIOException:true