Hadoop相關問題解決
Hive
1.查詢hivemeta信息,查到的numRows為-1
集群廠商 | 集群版本 | 是否高可用 | 是否開啟認證 |
---|---|---|---|
cdh | 不限 | 不限 | 不限 |
在hivemeta庫中可以通過以下sql查詢表的元數據信息
SELECT * FROM TABLE_PARAMS WHERE tbl_id = 45857
其中numRows會被用來統計為表的行數,但是發現有些表查出來行數為-1
可能原因
對於一個新創建的表,默認情況下,如果通過INSERT OVERWRITE的方式插入數據,那么Hive會自動將該表或分區的統計信息更新到元數據。
有一個參數來控制是否自動統計,hive.stats.autogather,默認為true.
可能是因為這個表新建后沒有通過這種方式插入過數據,所以表沒有進行過統計,默認信息即為numRows=-1
解決方案
使用命令 ANALYZE TABLE tableName COMPUTE STATISTICS; 統計元數據信息
再查詢時,numRows變為0
2. bucketId out of range: -1 (state=,code=0)
集群廠商 | 集群版本 | 是否高可用 | 是否開啟認證 |
---|---|---|---|
hdp | 3.1.1 | 是 | 是 |
執行一個普普通通的 SELECT * FROM student WHERE 1 = 1 LIMIT 5;報錯
Error: java.io.IOException: java.lang.IllegalArgumentException: bucketId out of range: -1 (state=,code=0)
可能原因
初步懷疑和hadoop3支持事務有關
hadoop3.1建表默認創建acid表,acid表只支持ORC格式
解決方案
在建表語句最后加上STORED AS textfile;
3.集群客戶端使用hive命令連接,報錯認證失敗
集群廠商 | 集群版本 | 是否高可用 | 是否開啟認證 |
---|---|---|---|
hdp | 3.1.1 | 是 | 是 |
報錯信息忘了拷貝了
可能原因
客戶端java 的安全認證文件沒有下發,kerberos加密解密有問題
需要jar包:
- local_policy.jar
- US_export_policy.jar
解決方案
拷貝安全認證文件到客戶端
scp root@ip:/opt/third/jdk/jre/lib/security/*.jar /opt/third/jdk/jre/lib/security/
4.運行hive任務卡在Tez session hasn't been created yet. Opening session
集群廠商 | 集群版本 | 是否高可用 | 是否開啟認證 |
---|---|---|---|
hdp | 3.1.1 | 是 | 是 |
可能原因
沒有指定tez隊列,無法獲取到足夠的資源啟動任務
解決方案
設置tez隊列 set tez.queue.name =
問題拓展
hive 設置隊列需要根據所使用的引擎進行對應的設置才會有效果,否則無效
# 設置引擎
set hive.execution.engine=mr;
set hive.execution.engine=spark;
set hive.execution.engine=tez;
# 如果使用的是mr(原生mapreduce)
SET mapreduce.job.queuename=etl;
# 如果使用的引擎是tez
set tez.queue.name=etl
# 設置隊列(etl為隊列名稱,默認為default)
MapReduce:是一種離線計算框架,用於大規模數據集(大於1TB)的並行運算,將一個算法抽象成Map和Reduce兩個階段進行處理,非常適合數據密集型計算。
Spark:Spark是UC Berkeley AMP lab所開源的類Hadoop MapReduce的通用的並行計算框架,Spark基於map reduce算法實現的分布式計算,擁有Hadoop MapReduce所具有的優點;但不同於MapReduce的是Job中間輸出和結果可以保存在內存中,從而不再需要讀寫HDFS,因此Spark能更好地適用於數據挖掘與機器學習等需要迭代的map reduce的算法。
Storm:MapReduce也不適合進行流式計算、實時分析,比如廣告點擊計算等。Storm是一個免費開源、分布式、高容錯的實時計算系統。Storm令持續不斷的流計算變得容易,彌補了Hadoop批處理所不能滿足的實時要求。Storm經常用於在實時分析、在線機器學習、持續計算、分布式遠程調用和ETL等領域
Tez: 是基於Hadoop Yarn之上的DAG(有向無環圖,Directed Acyclic Graph)計算框架。它把Map/Reduce過程拆分成若干個子過程,即Map被拆分成Input、Processor、Sort、Merge和Output, Reduce被拆分成Input、Shuffle、Sort、Merge、Processor和Output等。同時可以把多個Map/Reduce任務組合成一個較大的DAG任務,減少了Map/Reduce之間的文件存儲。同時合理組合其子過程,也可以減少任務的運行時間
5.Unable to read HiveServer2 configs from ZooKeeper
集群廠商 | 集群版本 | 是否高可用 | 是否開啟認證 |
---|---|---|---|
fi | 5.15.2 | 是 | 是 |
沒有進行zk認證
HDFS
1.No common protection layer between client and server
集群廠商 | 集群版本 | 是否高可用 | 是否開啟認證 |
---|---|---|---|
cdh | 5.15.2 | 是 | 是 |
javax.security.sasl.SaslException: No common protection layer between client and server
at com.sun.security.sasl.gsskerb.GssKrb5Client.doFinalHandshake(GssKrb5Client.java:251)
at com.sun.security.sasl.gsskerb.GssKrb5Client.evaluateChallenge(GssKrb5Client.java:186)
at org.apache.hadoop.security.SaslRpcClient.saslEvaluateToken(SaslRpcClient.java:483)
at org.apache.hadoop.security.SaslRpcClient.saslConnect(SaslRpcClient.java:427)
at org.apache.hadoop.ipc.Client$Connection.setupSaslConnection(Client.java:594)
at org.apache.hadoop.ipc.Client$Connection.access$2000(Client.java:396)
at org.apache.hadoop.ipc.Client$Connection$2.run(Client.java:761)
at org.apache.hadoop.ipc.Client$Connection$2.run(Client.java:757)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:422)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1920)
at org.apache.hadoop.ipc.Client$Connection.setupIOstreams(Client.java:756)
at org.apache.hadoop.ipc.Client$Connection.access$3000(Client.java:396)
at org.apache.hadoop.ipc.Client.getConnection(Client.java:1557)
at org.apache.hadoop.ipc.Client.call(Client.java:1480)
at org.apache.hadoop.ipc.Client.call(Client.java:1441)
at org.apache.hadoop.ipc.ProtobufRpcEngine$Invoker.invoke(ProtobufRpcEngine.java:230)
可能原因
該異常由服務端與客戶端配置項hadoop.rpc.protection不一致導致。
解決方案
修正服務端hadoop.rpc.protection配置,確保兩端一致,重啟服務。
問題拓展
可選值(需要和集群配置保持同步):authentication,integrity,privacy
在hadoop服務和客戶端之間傳輸的數據可以在線上加密。在core-site.xml中將hadoop.rpc.protection
設置為privacy會激活數據加密。以上三項分別為
- authentication【認證:僅認證(默認)】
- integrity 【完整性:除了認證之外的完整性檢查】
- Privacy 【隱私:除了完整性檢查之外的數據加密】
2.Can't get Master Kerberos principal for use as renewer
集群廠商 | 集群版本 | 是否高可用 | 是否開啟認證 |
---|---|---|---|
cdh | 5.15.2 | 是 | 是 |
可能原因
獲取fileReader的時候沒有傳入yarn.resourcemanager.principal參數。
解決方案
傳入yarn.resourcemanager.principal參數。
3.Does not contain a valid host:port authority: hdp-2.6-node1.dtwave.com
可能原因
解決方案
HBase
1.KeeperErrorCode = NoNode for /hbase/meta-region-server
集群廠商 | 集群版本 | 是否高可用 | 是否開啟認證 |
---|---|---|---|
hdp | 3.1.1 | 是 | 是 |
可能原因
hbase.znode.parent 沒有配置正確,客戶端需要與集群使用的一致。
解決方案
修正配置
Ranger
1.User doesn't have necessary permission to grant access
調用rangerApi授權出現以上返回,但是我的用戶是admin用戶,照理說是有所有權限的。
問題原因
可能是因為沒有把用戶添加到具體的規則中
Delegate Admin
kerberos
1.Fail to create credential. (63) - No service creds
集群廠商 | 集群版本 | 是否高可用 | 是否開啟認證 |
---|---|---|---|
hdp | 2.6 | 是 | 是 |
可能原因
該異常由服務端與客戶端配置項hadoop.rpc.protection不一致導致。