原创 Hive map階段優化之一次詳細的優化分析過程 原

#背景 同事寫了這樣一段HQL(涉及公司數據,表名由假名替換,語句與真實場景略有不同,但不影響分析): CREATE TABLE tmp AS SELECT t1.exk, t1.exv, M.ma

原创 Kerberos的那些報錯彙總 原

案例一:多線程訪問啓用了Kerberos的服務報錯 情景:有一個採用了Kerberos認證的web服務,使用Jmeter對其進行壓測,在web的日誌裏看到如下報錯 錯誤如下:GSSException: Failure unspecified

原创 從源碼角度看Spark on yarn client & cluster模式的本質區別 原 薦

首先區分下AppMaster和Driver,任何一個yarn上運行的任務都必須有一個AppMaster,而任何一個Spark任務都會有一個Driver,Driver就是運行SparkContext(它會構建TaskScheduler和DAG

原创 KMS密鑰管理服務(Hadoop) 原

##前言 KMS是Hadoop下的一個密鑰管理服務,它實際是與Hadoop結合,提供HDFS文件做AES加密用的。所以它是用來存儲AES祕鑰的,AES提供三種位數的祕鑰,分別是128, 192, 256,所以KMS只能存儲這三種位數的byt

原创 ClassLoader和雙親委派機制 原 薦

前言:網上關於類加載器講解的文章特別多,在學習的時候讓我受益匪淺,某段時間覺得自己懂了。但是在昨天遇到一個問題,並去看Spark關於用戶類加載的時候,它實現的類加載器讓我看的很疑惑,半天沒有轉過來。我才發現自己原來根本不懂類加載器的原理,對

原创 Spark,Hive,HBase相互結合--數據讀取和計算的幾種方式 原

Spark與Hive可以相互結合,同時Spark也可以使用DataFrame讀取HBase裏的數據,Hive也同樣可以直接讀取HBase的數據。只不過在Spark和Hive讀取HBase數據的時候,需要做列簇或列映射,對於列不確定的需要列簇

原创 Hive源碼編譯及閱讀修改調試 原 薦

#下載編譯 在git上下載合適的master分支,使用maven編譯。執行編譯的目的在於,確保過程中生成的代碼(Thrift)已經生成,這樣導入IDEA就不會出現有些類找不到的情況。 執行源碼編譯分發命令,進入源碼根目錄執行: mvn cl

原创 從源碼角度對比Yarn下的App對任務失敗的控制 原 薦

在Yarn/MRV2/Spark裏都有任務失敗再重試的設置,Yarn作爲資源管理框架,而MRV2/Spark作爲計算框架,它們的失敗重試有什麼不同? 有哪些參數來控制失敗重試? Spark on Yarn的時候參數又有什麼影響? Yarn的

原创 Spark UDF變長參數的二三事兒 原

引子 變長參數對於我們來說並不陌生,在Java裏我們這麼寫 public void varArgs(String... args) 在Scala裏我們這麼寫 def varArgs(cols: String*): String 而在Sp

原创 也說Hadoop敏感信息加密方案的嘗試(上) 原

#前言 每個公司都會遇到數據安全性的問題,數據在當下甚至未來,其安全性只會越來越重要。而在大數據的環境下,數據多以集羣存儲,量大而複雜是大數據的一個重要特徵,在這種情況下,數據的安全性方案該如何設計才能保證數據安全,同時保證集羣負載小,對外

原创 Spark UDTF 與 輸出多列的UDF小筆記 原

前言 對於UDF和UDAF相比大家並不陌生,用起來也都很順手,在此就不多做介紹了~ 通常我們的UDF都是一個或多個輸入,然後一個輸出。如果想要使用多個輸出,比如像1.6版本里的json_tuple這樣 : df.select(json_tu

原创 Kafka源碼分析Producer讀取Metadata的數據結構及Metadata兩種更新機制介紹 轉

  問題導讀: 1. 什麼是多線程異步發送模型? 2. Metadata的線程安全性如何實現? 3. Metadata的數據結構是什麼? 4. producer如何讀取Metadata? 5. Sender的如何創建? 6. Sender

原创 也說Hadoop敏感信息加密方案的嘗試(下) 原

前面講到了AES對稱加密的兩個不同方案,一是Hive表存儲祕鑰,一是用KMS來存儲祕鑰。在這兩個大的分類下,又各自有兩種不同的方案,每種方案的嘗試都是因爲踩到了坑,所以纔不得不換一種姿勢。 前文博客見 也說Hadoop敏感信息加密方式的嘗試

原创 Spark的Shuffle過程 原

            Shuffle過程分爲shuffle write和shuffle read。 由父RDD(比如join就是join兩邊的RDD)根據分區數進行劃分,並寫內存或磁盤,構成write過程。由子RDD(join之後生成的

原创 從源碼看Spark讀取Hive表數據小文件和分塊的問題 頂 原 薦

前言 有同事問到,Spark讀取一張Hive表的數據Task有一萬多個,看了Hive表分區下都是3MB~4MB的小文件,每個Task只處理這麼小的文件,實在浪費資源浪費時間。而我們都知道Spark的Task數由partitions決定,所以