場景1:
在datanode開始工作(通電)的時候,會上報本地的資料塊給namenode的客戶端進行註冊,這時候客戶端個數比較關鍵,如果太少,datanode在連線namenode的時候會出現總是超時或者連線被拒絕;如果設定太大,則記憶體開銷會增大,造成不必要的浪費,最終可能導致記憶體溢位。
引數:dfs.namenode.handler.count
namenode 有乙個工作執行緒池,用來處理不同 datanode 的併發心跳以及客戶端併發的元資料操作,執行緒池的大小就是根據該引數指定的,預設值 10,該值的一般設定原則是將其設定為 集群大小的自然對數乘以20,即
20logn,n為集群大小。
#配置檔案hdfs-site.xml
dfs.namenode.handler.count
10
具體計算可以使用python,以下示例以8個節點為例
[root@fan102 ~]# python -c 'import math ; print int(math.log(8) * 20)'
41
場景1:總共 7 臺機器,每天幾億條資料,資料來源->flume->kafka->hdfs->hive
面臨問題:資料統計主要用 hivesql,沒有資料傾斜,小檔案已經做了合併處理,開啟的 jvm 重用,而且 io 沒有阻塞,記憶體了不到 50%。但是還是跑的非常慢,而且資料 量洪峰過來時,整個集群都會宕掉。基於這種情況有沒有優化方案。
分析:記憶體利用率不夠。這個一般是 yarn 的 2 個配置造成的,單個任務可以申請的最大記憶體 大小,和 hadoop 單個節點可用記憶體大小。在yarn-site.xml檔案中調節這兩個引數能提高系統記憶體的利用率。
引數1:yarn.nodemanager.resource.memory-mb
表示該節點上 yarn 可使用的物理記憶體總量,預設是 8192(mb),一般128g伺服器配置為100g,64g伺服器配置50g,我們的伺服器是188g的,所以這個值我設定的是120g。注意,如果你的節點 記憶體資源不夠 8gb,則需要調減小這個值,而 yarn 不會智慧型的探測節點的物理記憶體總量。
引數2:yarn.scheduler.maximum-allocation-mb
表示單個任務可申請的最多物理記憶體量,預設是 8192(mb),該值需要根據任務的資料量的大小來確定,128mb對應1gb記憶體
HBase集群調優
2.5.2.1.zookeeper.session.timeout 這個預設值是3分鐘。這意味著一旦乙個server宕掉了,master至少需要3分鐘才能察覺到宕機,開始恢復。你可能希望將這個超時調短,這樣master就能更快的察覺到了。在你調這個值之前,你需要確認你的jvm的gc引數,否則乙個長時...
Kafka 集群調優
kafka 集群搭建鏈結 單個 kafka伺服器足以滿足本地開發或 poc要求,使用集群的最大好處是可以跨伺服器進行負載均衡,再則就是可以使用複製功能來避免因單點故障造成的資料丟失。在維護 kafka 或底層系統時,使用集群可以確保為客戶端提供高可用性。乙個 kafka 需要多少個 broker取決...
大資料開發之調優
1.1避免建立重複rdd 通常指,在開發spark作業中,首先基於某個資料來源,如hive或hdfs檔案 建立乙個初始rdd,接著對這個rdd進行某個運算元操作,然後得到下乙個rdd,以此類推,迴圈往復,直到計算出我們需要的結果 在此過程中多個rdd會通過不同運算元操作串起來。這個rdd串 rdd ...