1. 程式人生 > >大資料平臺hbase,phoenix,spark搭建和研發問題和解決方式彙總

大資料平臺hbase,phoenix,spark搭建和研發問題和解決方式彙總

#Q
Caused by: java.lang.NoSuchMethodError: org.apache.hadoop.tracing.SpanReceiverHost.get
$A
<hadoop.version>2.7.3</hadoop.version>

#Q
Caused by: java.net.UnknownHostException: mycluster
$A 修改host檔案 118.178.104.96 mycluster

#flume 兩種記日誌方式,掃描資料夾和log4j寫netcat埠,netcat容易關閉,第二 flume一旦停止再重啟,日誌寫入失敗,改用資料夾監聽,不同字串傳送到不同topic
#hbase連線不上, IP對映,60020埠telnet下。 hbase的hbase-site.xml配置正確和phoeix的對映要複製到phoenix上去
#spring-data管理HbaseTemplate connection 坑之原始碼分析 每一個hbasetemplate重複建立connection
#hadoop version修改,重啟hadoop,格式化
#IDEA打包外部引用類 外掛
#phoenix的thin-clientjar包打包了其他很多hadoop相關jar包,衝突
#KAFKA ip順序不對,導致連線不上
#hadoop多版本jar包衝突,找不到類
#springboot 解決kafka多個topic監聽,優雅
#springboot 預設連線池採用hakip,新版本對phonix不支援,報SQLfezeNOTSUPPORT,需改用自定義配置連線池
#springboot
@phoenix做好和namespace的對映,修改hbase.xml做二級索引

#mybatis 生成的field要加雙引號,mybatis生成的欄位強制用資料表一致,不用駝峰原則

#phoenix二級索引更新必須通過phoenix CLIENT API ,hbase更新的話,不會同步到phoenix索引,在某些情況下,phoenix client操作的資料也不會更新索引
#hbase 1.4版本客戶端測試要禁用斷言。
#hbase:長久連線不上,最後報錯:Caused by: java.lang.NoClassDefFoundError: Could not initialize class org.apache.hadoop.hbase.util.ByteStringer
把3.5的替換為2.5的(protobuf-java-2.5.0.jar) Doing a drop replacement of protobuf-java-2.5.0.jar makes the hbase pipelines to run fine.

#HBASE連線不上
port:regionserver繫結的埠,預設是60020;,沒有 開啟的原因
#phoenix連不上
Remote driver error: RuntimeException:
java.sql.SQLException: org.apache.hadoop.hbase.client.RetriesExhaustedException:
Failed after attempts=36, exceptions:
#A
hadoop.proxyuser.HTTP.groups=*
hadoop.proxyuser.HTTP.hosts=*
jar uf phoenix-4.7.0.2.5.3.0-37-client.jar hbase-site.xml
#phoenix 4.8 bug order by limit offset 查不出資料來
#A:select * from “test” order by col2 limit 1 offset 1;

https://issues.apache.org/jira/browse/PHOENIX-997

#phoenix 4.9 連線時報錯,SYSTEM:CATALOG is found but client does not have phoenix.schema.isNamespaceMappingEnabled enabled

hbase.phoenix.datasource.connectionProperties=phoenix.schema.isNamespaceMappingEnabled=true

#phoneix Cannot initiate connection as SYSTEM:CATALOG is found but client does not have phoenix.schema.isNamespaceMappingEnabled enabled,Cannot initiate connection as SYSTEM:CATALOG is found but client does not have phoenix.schema.isNamespaceMappingEnabled enable
#多資料來源時 pring+mybatis多資料來源,報Invalid bound statement的問題
A: 因為將dao和mybatis的對映檔案都放在了巢狀的目錄裡,所以在spring掃描的時候,記錄了首次掃描到dao的方法,然後使用首次掃描到dao的方法,呼叫其他路徑的對映檔案時,就會提示無法找到對映檔案的方法。 只需要將dao和mapping的對映文件,放在不同目錄下,不可巢狀或者同級目錄。就可以找到對映關係了

#PHOENIX mybatis 長久等待連不上資料庫,查詢不到資料,protobuf
#A:protobuf從2.5升級到3.5

#protobuf版本的包衝突問題
修改2.4.1中class的名字(通過修改package名)並重新打jar包,然後修改canal中引用到protobuf的地方並重新打jar包
mvn install:install-file -Dfile=D:\projects\code\dev\protobuf2.5\target\protobuf25-java-2.5.0.jar -DgroupId=com.google.protobuf25 -DartifactId=protobuf25-java -Dversion=2.5.0 -Dpackaging=jar

#HBASE API org.apache.hadoop.hbase.DoNotRetryIOException: java.lang.NoClassDefFoundError: Could not initialize class org.apache.hadoop.hbase.util.ByteStringer
#A:protobuf從3.5降級到2.5
#spark phoenix
1.query 是table
2.jar包的META-INF路徑是 main\resources否則打包不進去。
3.刪除META-INF重新打包jar包,重新包含所有依賴包
4. phoenix jdbc maven provide去掉,否則不會打包進來。
5.spark 是jdbc的API不可用thin driver
6.檢查meta-inf classpath是否包含所有的依賴jar

#mavn install jar
mvn install:install-file -Dfile=spark-redis-0.3.2.jar -DgroupId=RedisLabs -DartifactId=spark-redis -Dversion=0.3.2 -Dpackaging=jar
#Exception in thread “main” java.net.ConnectException: Call From Trade-Test-Spark001/10.25.172.171 to Trade-Test-Spark001:9000 failed on connection exception: java.net.ConnectException: Connection refused;
#A: hadoop namenode 啟動 start-dfs.sh

#spark 下的GSON.jar版本衝突,已替換spark的jars下的jar為高版本的。其他伺服器也要替換TODO

#KAFKA method:org.springframework.kafka.listener.KafkaMessageListenerContainer$1.onFailure(KafkaMessageListenerContainer.java:273)
Error while stopping the container:
java.lang.NoClassDefFoundError: com/google/protobuf/GeneratedMessageV3

#HBASE REGION SERVER LOG
Unable to return groups for user Administrator
PartialGroupNameException The user name ‘Administrator’ is not found. id: Administrator: no such user

#org.apache.hadoop.hbase.MasterNotRunningException: com.google.protobuf.ServiceException: java.net.ConnectException: Connection refused: no further information
檢視埠對映是否正確

#phoenix drop index exception

#phoenix索引和hbase資料的錯亂關係,如果刪除了表,但是沒有刪除相應的索引表,索引表裡有資料,查詢的時候走索引查詢,導致查詢不一致。
更新插入資料的時候不走phoneix雖然查出資料,但是是索引裡的資料。
#phoneix4.9-1.2 更新索引 notsuchmethod error。需換回4.8, 4.8的limit bug問題,目前客戶端仍用4.9暫時沒發現問題。
#phoenix thin query server driver,表結構變化後不識別新的表結構。fat driver沒問題。
#flume同時傳送兩條訊息到kafka
原因是同時起了兩個flume程序。
#spark在叢集裡執行錯誤
需要分配記憶體到節點。
#spark-env.sh不能一樣,否則報錯

#iptable 的規則只儲存在記憶體中,需要呼叫service iptable save儲存在檔案裡,iptable service需要另外安裝。
#spark在standalone叢集模式下需要把jar包放在HDFS下,否則找不到jar包。
#spark執行jar application,logback衝突,需要在springboot裡禁用logback。

#spark conf下需要放hbase-site.xml 來解決 phoenix.schema.isNamespaceMappingEnabled
#spark-phoenix原始碼把saveashadoop的資料夾寫死了。獲取不到環境變數值,另外把取column名轉大寫的方法去掉。否則找不到列

#phoenix-query-client 會引入acativa,順便引入地版本的fastxml javasonException與spark-scala的衝突, 註釋掉POM不引入phoenix-client

#aused by: org.apache.hadoop.hbase.DoNotRetryIOException: java.lang.IllegalAccessError: tried to access method com.google.common.base.Stopwatch.()V from class org.apache.hadoop.hbase.zookeeper.MetaTableLocator
guava17開始,constructors發生變化,如果確認當前專案只有一個guava包,需確認版本問題。
測試,hbase1.2.1:guava12-16,執行無誤;guava17開始,同樣出現標題異常,已強制pom改成14版本的guava— 待觀察TODO

#Spark-sql 2.2.0的spark只有scala2.1.0的版本 所以scala改成2.1.7
#Caused by: java.io.NotSerializableException: org.springframework.data.redis.core.RedisTemplate
spark裡的函式不能包含spring依賴
SparkContext和SparkSession 都不能作為函式的引數,函式的引數傳遞的時候會被序列化,而這兩個引數都不能序列化
The functions and any classes containing the functions that run on the executors should not have any dependency on Spring Boot. See if you can find the reference by inspection, or maybe the serialisation stack trace will help you. Declaring the functions run on the executors as static methods in dedicated classes is a good way to avoid this issue.

#crotab 任務執行不了

  1. 首先 輸出到日誌>>
    2.spark-class 的JAVA_HOME不是環境變數配置的,而是在spark-env.sh裡配置的。