hive多並發問題報錯:Caused by: java.sql.BatchUpdateException: Duplicate entry 'admin-ROLE-All-admin-ROLE' for key 'GLOBALPRIVILEGEINDEX'


報錯日志:

at org.apache.hadoop.hive.metastore.RawStoreProxy.invoke(RawStoreProxy.java:114) at 
com.sun.proxy.$Proxy82.grantPrivileges(Unknown Source) at org.apache.hadoop.hive.metastore.HiveMetaStore$HMSHandler.createDefaultRoles_core(HiveMetaStore.java:679) 
at org.apache.hadoop.hive.metastore.HiveMetaStore$HMSHandler.createDefaultRoles(HiveMetaStore.java:648) at 
org.apache.hadoop.hive.metastore.HiveMetaStore$HMSHandler.init(HiveMetaStore.java:462) 
at org.apache.hadoop.hive.metastore.RetryingHMSHandler.(RetryingHMSHandler.java:66) at 
org.apache.hadoop.hive.metastore.RetryingHMSHandler.getProxy(RetryingHMSHandler.java:72) at 
org.apache.hadoop.hive.metastore.HiveMetaStore.newRetryingHMSHandler(HiveMetaStore.java:5768) at 
org.apache.hadoop.hive.metastore.HiveMetaStoreClient.(HiveMetaStoreClient.java:199) at org.apache.hadoop.hive.metastore.HiveMetaStoreClient.(HiveMetaStoreClient.java:181) at org.apache.hive.hcatalog.common.HiveClientCache$CacheableHiveMetaStoreClient.(HiveClientCache.java:330) ... 64 more 
Caused by: java.sql.BatchUpdateException: Duplicate entry 'admin-ROLE-All-admin-ROLE' for key 'GLOBALPRIVILEGEINDEX' at 
com.mysql.jdbc.SQLError.createBatchUpdateException(SQLError.java:1167) at com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.java:1778) at com.mysql.jdbc.PreparedStatement.executeBatchInternal(PreparedStatement.java:1262) at com.mysql.jdbc.StatementImpl.executeBatch(StatementImpl.java:970) at com.jolbox.bonecp.StatementHandle.executeBatch(StatementHandle.java:424) at org.datanucleus.store.rdbms.ParamLoggingPreparedStatement.executeBatch(ParamLoggingPreparedStatement.java:372) at org.datanucleus.store.rdbms.SQLController.processConnectionStatement(SQLController.java:628) at 
org.datanucleus.store.rdbms.SQLController.processStatementsForConnection(SQLController.java:596) at org.datanucleus.store.rdbms.SQLController$1.transactionFlushed(SQLController.java:683) at org.datanucleus.store.connection.AbstractManagedConnection.transactionFlushed(AbstractManagedConnection.java:86) at 
org.datanucleus.store.connection.ConnectionManagerImpl$2.transactionFlushed(ConnectionManagerImpl.java:454) at 
org.datanucleus.TransactionImpl.flush(TransactionImpl.java:203) at 
org.datanucleus.TransactionImpl.commit(TransactionImpl.java:267) at 
org.datanucleus.api.jdo.JDOTransaction.commit(JDOTransaction.java:98) ... 81 more 
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry 'admin-ROLE-All-admin-ROLE' for key 'GLOBALPRIVILEGEINDEX' at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:526) at com.mysql.jdbc.Util.handleNewInstance(Util.java:425) at com.mysql.jdbc.Util.getInstance(Util.java:408) at 
com.mysql.jdbc.SQLError.createSQLException(SQLError.java:935) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3973) at 
com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3909) at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2527) at 
com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2680) at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2487) at 
com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1858) at com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2079) at com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.java:1756) ... 93 more

 

解決方案:

1.重新調度腳本進行執行測試一下

2.減少腳本的調度數量

3.設置參數: datanucleus.autoCreateScheme=false ; datanucleus.fixedStoredata=true ;(注:此種方法盡量在hive-site.xml配置文件中進行設置,否則可能不生效,要是用oozie調度,此文件更新到相應的hadoop目錄下)

主要引起原因: java.sql.BatchUpdateException: Duplicate entry 'admin-ROLE-All-admin-ROLE' for key 'GLOBALPRIVILEGEINDEX'–主鍵重復 分析: 在以上場景中,多個進程同時在刪除表創建表導致metastore頻繁的修改,導致datanucleus在操作mysql的catalog時產生很多的叫諸如DELETEME.TIMESTAMP的表。 這些表會被datanucleus馬上刪掉。同時另一邊datanucleus有個線程在頻繁的讀取mysql所有表的所有列信息。mysql的JDBC驅動通過先查詢所有的表,然后遍歷所有 表的列來達到這個目的。如果在這個過程中有表被刪了,mysql就會報一個異常。 然而這個異常被hive解釋為“default”這個默認的數據庫不存在,同時datanucleus.autoCreateScheme這個參數設為true和datanucleus.fixedStoredata設為false,所以 hive就會往metastore里面又加一條記錄(對應於mysql的metastore.DBS這個表),從而引發了這個異常 java.sql.BatchUpdateException: Duplicate entry 'admin-ROLE-All-admin-ROLE' for key 'GLOBALPRIVILEGEINDEX'

參考:

http://shzhangji.com/cnblogs/2013/09/06/hive-deleteme-error/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM