原创 HDFS目錄掃描

1、背景 爲了分析HDFS文件生命週期,需要獲取一定深度的HDFS目錄。 2、實現 static final String hdfsBaseDir = "hdfs://nameservice1:8020";

原创 Spark Codegen原理分析

1、背景 Spark Codegen是在CBO&RBO後,將算子的底層邏輯用代碼來實現的一種優化。 具體包括Expression級別和WholeStage級別的Codegen。 2、舉例說明 ① Expression級別:摘一個網

原创 Hadoop 3.x新特性

1、糾刪碼(Erasure Coding) 目的: 爲了節省HDFS存儲空間成本。 實現: dfs.namenode.ec.system.default.policy默認使用了RS-6-3-1024k,即原6*3(副本)=18份,

原创 Hive權限認證模塊詳解

1、前言 前段時間,在升級Hive版本(從Hive1.1.0升級至Hive2.3.6)的過程中,遇到了權限兼容問題。 (升級相關請移步Hive1.1.0升級至2.3.6 踩坑記錄) Hive1.1.0使用的是AuthorizerV

原创 Hadoop ViewFs 官方文檔解讀

官方文檔地址: http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/ViewFs.html 1、簡介 ViewFs是用來管理多個Hadoop

原创 Hive SQL執行全過程源碼解析(Hive3.1)

1、Hive執行SQL的主要流程及Hive架構 Hive執行SQL的主要流程圖 看着有很多階段,實際上很簡單。Hive就是把SQL通過AST解析,然後遍歷若干次(進行算子替換以及優化),最後再次遍歷算子,如果爲reduceSink

原创 G1日誌詳解

爲什麼要看GC日誌? 因爲JVM的GC狀態能在很大程度上衡量一個Java應用是否健康,在相同條件下能否持續穩定運行。 G1和CMS在日誌上會有些許的區別,由於平時用G1爲主,這邊就不提CMS了。 G1日誌詳解 本文參考了RedHa

原创 記一次多線程併發問題的排查

背景 最近在做離線batch任務執行的中間件,目標將線上所有的批任務都接過來,以便Hive向Spark 遷移,對任務整個鏈路追蹤(從開始預執行,到執行引擎選擇,到執行日誌收集,到執行完成後結果分析 是否傾斜等等)。 在做自適應選擇

原创 Spark Skew Join Optimization

數據傾斜在分佈式計算中是一個很常見的問題,Spark提供了一種比較便捷的方法來處理一些簡單的數據傾斜場景。 Spark中定位數據傾斜 1、找到耗時長的stage並確定爲shuffle stage。 2、給所有的task按照shuf

原创 Spark Dynamic Allocation 源碼解析

爲什麼研究Dynamic Allocation的源碼? 在線上任務執行的過程中,有些任務佔用着Yarn資源卻並行度極低,比如申請了100核cpu(現象持續時間超過了executor idle time),但那個stage只有9個r

原创 記一次Spark ThriftServer Bug排查

問題描述 我們在用Spark ThriftServer(以下簡稱STS)用在查詢平臺時,遇到了以下報錯: ERROR SparkExecuteStatementOperation: Error executing query, c

原创 記一次Spark SQL問題排查的經歷

起因 分析師A:哇 你們這個數據查詢平臺查Spark ,同樣的SQL結果每次都不同,這能用? 我:???第一反應是你八成是在查一張,別人在更新數據的表吧。。(同個SQL也會去跑兩遍 小聲bb) 排查過程 過了一會兒,分析師A:看了

原创 LockSupport詳解

前言 LockSupport是concurrent包中一個工具類,不支持構造,提供了一堆static方法,比如park(),unpark()等。 LockSupport中的主要成員及其加載時的初始化: 不難發現,他們在初始化的時

原创 CyclicBarrier和CountDownLatch的用法與區別

前言 CyclicBarrier和CountDownLatch這兩個工具都是在java.util.concurrent包下,並且平時很多場景都會使用到。 本文將會對兩者進行分析,記錄他們的用法和區別。 CountDownLatch

原创 ThreadLocal詳解

ThreadLocal是什麼 ThreadLocal是一個本地線程副本變量工具類。主要用於將私有線程和該線程存放的副本對象做一個映射,各個線程之間的變量互不干擾,在高併發場景下,可以實現無狀態的調用,特別適用於各個線程依賴不通的變量值