本人的一些总结
有關idea
1、maven倉庫的問題
步驟:
1、先看看設置里面的倉庫,是不是自己的倉庫。如果不是的話,先換成自己的倉庫。(必須注意的)
2、檢查一下你本地庫里面,是不是有未下載完的文件。類似與這樣的文件,刪一下,倉庫可能沒有下載完畢。
2、mvn package看看
百度mvn package的使用方法。
3、idea上就是爆出xxx.jar不存在,明明配置了自己的maven倉庫。
mvn dependency:sources // 命令jar包被下載下來
首選這種
有關flink
1、代碼中容易忽略的地址問題。
只要沒有new,就是同一個地址,也就是對同一個地址上的內容進行修改。
package com.atguigu.app.function;import com.alibaba.fastjson.JSONObject;public class test {public static void main(String[] args) {// {"after":"123456","tablename":"table1","db":"database","before2":"xyz","before1":"xyz"}JSONObject value=new JSONObject();value.put("db", "database") ;value.put("tablename", "table1");value.put("before1", "xyz");value.put("before2", "xyz");value.put("after", "123456");System.out.println(value.toString());// {"value":{"after":"123456","tablename":"table1","db":"database","before2":"xyz","before1":"xyz"}}JSONObject value1=new JSONObject();value1.put("value",value) ;// {"after":"123456","tablename":"table1","db":"database","before2":"xyz","before1":"xyz"}JSONObject data = value1.getJSONObject("value");String filterColumn = "db"+","+"tablename"+","+"after";test2.filterColumn(data, filterColumn);System.out.println(value1.toString());}} {"after":"123456","tablename":"table1","db":"database","before2":"xyz","before1":"xyz"} {"value":{"after":"123456","tablename":"table1","db":"database"}}用到的過濾方法
package com.atguigu.app.function;import com.alibaba.fastjson.JSONObject;import java.util.Arrays; import java.util.List;public class test2 {protected static void filterColumn(JSONObject data, String sinkColumns) {String[] fields = sinkColumns.split(",");List<String> columns = Arrays.asList(fields);data.entrySet().removeIf(next -> !columns.contains(next.getKey()));} }有關kafka
1、啟動不起來Kafka
在日志中找到
在三臺機器上面的/opt/module/kafka/datas路徑下,分別:
/opt/module/kafka/datas下面的meta.properties的cluster.id改成iMgAX07PTsyBQnXIQZSfjA
kafka啟動不輸出消息到控制臺,輸出到指定的文件名。這里輸出到temp.log中。temp.log的路徑是執行命令時候的當前路徑。也就是在Kafka下面。
參考來源
2、有的節點啟動不起來
打開日志(KafkaServer.out文件),然后最后一行是這樣的錯誤。
ERROR Shutdown broker because all log dirs in /opt/module/kafka/data
have failed (kafka.log.LogManager)
注意:如果是重要數據,一定要備份!!!不能只刪除。
之前可能是刪除過topic,爆出了這樣的錯誤。
于是,試了一下,這樣做是可以的,網上其他的做法試了不行。
有關hbase、phoenix
1、一定要退出安全模式,在啟動hbase之前,否則會有一些錯誤,比如phoenix無法連接。
hdfs dfsadmin -safemode leave
2、phoenix遲遲連不上,首先檢查安全模式的有沒有關,不行的話,然后試試下面的方法。
3、hbase中的rowkey設計
HBase的rowkey設計一直都是難點和痛點,不合適的rowkey設計會導致讀寫性能、吞吐不佳等諸多問題。
hbase中的rowkey設計的參考文章
有關副本
HBase的副本機制是通過通過底層的HDFS實現的。所以,HBase的副本與分片是解耦的,是存儲計算分離的。這使得region可以在RS之間靈活的移動,而不需要進行數據遷移,這賦予了HBase秒級擴容的能力和極大的靈活性。好的分布是怎么樣的?
對于單個表而言,一個“好”的數據分布,應該是:-- 每個region的數據量大小相近,請求量(吞吐)接近,每臺機器調度的region數量大致相同。這樣,這張表的數據和訪問能夠均勻的分布在整個集群中,從而得到最好的資源利用率和服務質量,即達到負載均衡。當集群進行擴容、縮容時,我們希望這種“均衡”能夠自動保持。如果數據分布未能實現負載均衡,則 ---負載較高的機器--- 很容易稱為整個系統的瓶頸,這臺機器的響應慢,可能導致客戶端的大部分線程都在等待這臺機器返回,從而影響整體吞吐。所以,負載均衡是region劃分和調度的重要目標。負載均衡問題:
數據的邏輯分布:即region劃分/分布,是rowkey到region的映射問題 數據的物理分布:即region在RS上的調度問題 訪問的分布:即系統吞吐(請求)在各個RS上的分布問題,涉及數據量和訪問量之間的關系,訪問熱點等。HBase能夠實現靈活調度、秒級擴容的關鍵
可見,一行數據的分布(找到一行數據所在的RS),存在2個層級的路由:一是rowkey到region的路由,二是region到RS的路由。這一點是HBase能夠實現靈活調度、秒級擴容的關鍵。邏輯分布 – 基于rowkey范圍的region劃分
就是: 一張表如何劃分成多個region region劃分的粒度是行,region就是這個表中多個連續的行構成的集合。行的唯一標識符是rowkey,所以,可以將region理解為一段連續分布的rowkey的集合。所以,稱這種方式為基于rowkey范圍的劃分。一個region負責的rowkey范圍是一個左閉右開區間,所以,后一個region的start key是前一個region的end key。注意,第一個region是沒有start key的,最后一個region是沒有end key的。這樣,這個表的所有region加在一起就能覆蓋任意的rowkey值域。 一般來說,region的生成有3種方式:建表時進行預分區:通過對rowkey進行預估,預先劃分好region region分裂:手工分裂,或達到一定條件時自動分裂(如region大小超過一個閾值) region合并:手工合并 所以,為了使表從一開始就具備良好的吞吐和性能,實際生產環境中建表通常都需要進行預分區。但也有一些例外,比如無法預先對rowkey范圍進行預估,或者,不容易對rowkey范圍進行均勻的拆分,此時,也可以創建只有一個region的表,由系統自己分裂,從而逐漸形成一個“均勻的”region分布。總結
- 上一篇: 德邦物流年营收313亿:扣非后亏损2亿
- 下一篇: 大咖云集、精彩议题、独家内容,2019