- Spark有3種運行模式(分佈式部署方式):獨立集羣運行模式、YARN運行模式、Mesos運行模式。
- SecondaryNameNode:它的目的是幫助 NameNode 合併編輯日誌,減少 NameNode 啓動時間。
- 以下python語句(Python 2.7.13)的執行結果是:
import re
key = r"mat cat hat pat"
p1 = r"[^c|p]at"
pattern1 = re.compile(p1)
print pattern1.findall(key)
[]是基於字符的,
[abc]是匹配a, b, c中的 一個 字符,
[^abc]中的 ^ 是表否定, 表示匹配a, b, c之外的字符.
所以和上面相同的結果的另一個正則是 p1 = r"[^cp]at".
- 文件系統元數據
a. 元數據指用來描述一個文件的特徵的系統數據,諸如訪問權限、文件擁有者以及文件數據塊的分佈信息等等。
b. 我們可以使用stat命令來查看文件更多的元數據信息。
c. 若一個 inode 號對應多個文件名,則稱這些文件爲硬鏈接。換言之,硬鏈接就是同一個文件使用了多個別名。若文件用戶數據塊中存放的內容是另一文件的路徑名的指向,則該文件就是軟鏈接。 - 生成式模型與判別式模型
生成模型使用聯合概率建模,判別模型直接使用條件概率建模。
常見的判別模型有:
支持向量機
傳統的神經網絡
線性判別分析
線性迴歸
產生式模型常見的主要有:
高斯
樸素貝葉斯
混合多項式
混合高斯模型
專家的混合物
隱馬爾可夫模型
馬爾可夫的隨機場 - mapreduce
實際的處理過程可以理解爲Input->Map->Sort->Combine->Partition->Reduce->Output。 - select * from tablename where columnA=’a’ union select * from tablename where columnB=’b’ 與此查詢語句等價的選項是
select * from tablename where columnA=‘a‘ or columnB=‘b‘ - 人工神經網絡(ANN)
神經網絡對訓練數據中的噪聲非常魯棒
可以處理冗餘特徵
訓練ANN是一個很耗時的過程 - hadoop2.6.0集羣中的一臺服務器上運行jps指令,可能出現的進程是
NameNode、DataNode、ResourceManager - Yarn作爲Hadoop2.0中的資源管理器對各類應用程序進行資源管理和調度。請列出Yarn中的關鍵組件並簡述各關鍵組件內部的交互原理。
1)關鍵組件:
ResourceManager(RM)
NodeManager(NM)
ApplicationMaster(AM)
Container
2)交互原理:
(1)RM調度資源並在合適的NM節點上啓動對應的AM。AM向RM註冊,包含二者之間的握手信息、AM偵聽端口,及後續進行AM管理和監控的URL。
(2)RM接收AM註冊信息,並反饋響應給AM,包含集羣資源信息。
(3)AM向RM發起資源分配請求,包含需要使用的Container個數,同時附帶歸屬於本AM的Container信息。
(4)AM向RM獲取資源分配進度信息,並保持與RM之間的心跳。
(5)RM根據資源調度策略,分配容器資源給AM。
(6)AM根據RM反饋信息,指示對應NM完成Container的拉起。一個NM上可以啓動多個Container。
(7)在Container運行過程中,AM向NM獲取Container的運行狀態報告。
(8)NM將Container的運行狀態信息反饋給AM。 - 現有1TB文本文件words.txt,文件每行爲若干個英文單詞,單詞間用空格分隔,文件中存在單詞word1佔據了總單詞量的30%以上,其他單詞出現頻率較爲平均。根據以上場景,請描述mapreduce如何統計每個單詞出現的頻次。
題中所述文本文件存在明顯的數據傾斜問題,word1出現頻次遠大於其他單詞,因此需要對word1在map階段的輸出key值進行構造,從而將word1均分給多個reduce計算。
注:如果只答出一般的wordcount步驟,沒有考慮到數據傾斜問題,嚴格來說應不得分。
1)map階段
map方法按行讀取文件,每行文件按空格分隔爲一個單詞列表,依次讀取每個單詞.
若單詞爲word1,則map階段的輸出爲<word1_randomInt(50),1>,即"word1_“加0-50 之間的隨機整數。 其他單詞直接輸出<單詞,1>。
注:只要答出map階段對單詞word1的輸出key值進行構造,以達到將word1均分爲多個不同的key輸出的目的即可,具體方法可有所區別。
2)combine階段
注:計算方法同reduce階段,該步驟可省去,答出+1分。
3)reduce階段
對同一key值得value進行累加,得出各個key值的出現次數。
4)計算最終結果。
依次逐行讀取reduce階段輸出目錄中的所有文件:
a.若key不是形同"word1_XX”,直接輸出key和value,即得出對應單詞的出現頻次。
b.若key類似"word1_XX",對所有key的value值累加,即可得出word1的出現頻次。 - 又到一年畢業季,一大批剛剛步入職場的應屆生申請辦理我行信用卡,爲了能最大程度的得到優質的信用卡客戶,更精準地確定客戶優劣和價值高低。考慮利用機器學習的思想在已有傳統人工規則的基礎上作輔助決策。針對這個場景,詳細描述所需要的數據、數據的處理過程、選擇的算法及原因、評價指標等過程。
利用分類模型lr,gbdt,xgboodt,決策樹等都可以。這裏以lr爲例子,需要數據爲:客戶基本信息,包括年齡,收入,性別等,客戶徵信信息,包括貸款,還款記錄等,客戶司法信息,包括是否有犯罪等。這些特效數值型與分類型均有。預處理需要缺失填補,異常值處理,歸一化等,然後特徵選擇,基於熵或者iv,woe編譯。最後擬合模型,常見模型評估用混淆矩陣,召回率,精確率,auc值等。 - 以下哪個關鍵字是用來刪除表 drop
- 查詢client表中的所有非空phone信息
select phone from client where not phone is null - 在做數據庫的TRUNCATE操作時
會將列上的自增長值恢復至種子值
會將所刪除的數據保存到回滾段(rollback segment)中
表的索引和約束保持不變
不會觸發觸發器(trigger) - Hadoop配置機架感知
HDFS寫入數據的時候會寫到不同機架的DataNode中。
MapReduce會根據機架獲取離自己比較近的網絡數據。
Hadoop配置機架需與物理機架保持一致,纔可達到最好的容災效果。 - Hive基本操作
創建外部表必須要指定location信息。 - Spark on Yarn模式提交任務後,會進行以下幾個過程
①向Yarn申請executor資源。
②任務構建成DAG圖。
③Task發送給executor執行。
④進行Stage劃分與TaskSet生成。
⑤啓動SparkContext。
⑥executor向SparkContext進行註冊。
以上過程發生的先後順序爲516243 - Spark中各Stage的Task數量由什麼決定
Partition - Spark默認的存儲級別是
MEMORY_ONLY - Hive 的元數據存儲在 derby 和 MySQL 中有什麼區別
多會話 - spark 的 master 和 worker 通過什麼方式進行通信的
Akka - 數據倉庫的特點
面向主題的
集成的
反應歷史變化的 - 數據倉庫常用模型
星形模型
事實星座模
雪花模型 - 決策樹的說法
子樹可能在決策樹中重複多次
決策樹算法對於噪聲的干擾不是很敏感
尋找最佳決策樹是NP完全問題 - 以下哪種算法在預測時纔開始訓練
KNN - 下面的決策樹中,能解決迴歸問題的是 CART
ID3
C4.5
C5.0
CART - 以下屬於Bagging的特點是
有放回抽樣多個子集
訓練多個分類器
可以減少過擬合 - 以下哪些選項HIVE可以避免進行MapReduce
A. select * from employees;
B. select * from emplyees where age>25;
C. select * from employees where country=‘CHINA’; - 在python的類的方法定義中,請描述’self’參數的作用?
self在Python裏不是關鍵字。self代表當前對象的地址。
self能避免非限定調用造成的全局變量。
self在定義時需要定義,但是在調用時會自動傳入。
self的名字並不是規定死的,但是最好還是按照約定是用self。
self總是指調用時的類的實例。 - 簡述HDFS的Namenode的HA架構特點
1)ZKFC控制NameNode主備仲裁:NameNode主備仲裁,由ZKFC控制,ZKFC作爲一個精簡的仲裁代理,其利用zookeeper的分佈式鎖功能,實現主備仲裁,再通過命令通道,控制NameNode的主備狀態。
2)採用共享存儲同步日誌。主用NameNode對外提供服務,同時對元數據的修改採用寫日誌的方式寫入共享存儲,同時修改內存中的元數據。備用NameNode週期讀取共享存儲中的日誌,並生成新的元數據文件,持久化的硬盤,同時回傳給主NameNode。
3)採用隔離(fence)機制防止腦裂。共享存儲fencing,確保只有一個NN可以寫入edits。客戶端fencing,確保只有一個NN可以響應客戶端的請求。DataNode fencing,確保只有一個NN可以向DN下發命令,譬如刪除塊,複製塊,等等。
select id,name,address
from b
union all
select a.id,a.name,a.address
from a left join b
on a.id=b.id where b.id is null
- ID3決策樹根據信息增益選擇分支特徵。
- 在SQL Server中,要防止大於100的數被保存到int類型的列,可以使用
檢查約束 - 對數據庫事務的描述
一致性
持久性
原子性 - 屬於ETL工具
datastage
kettle
sqoop - OLAP技術的核心是
多維分析 - vertica基於列式存儲
- 以下哪個選項可以實現在文件a.txt中查找某字符串’str’
grep str a.txt - 下列關於大數據生態體系描述錯誤的是 C
A. Hadoop MapReduce只適用於批量處理數據
B. MapReduce/Spark/Flink/Storm均支持使用YARN調度資源
C. Flink和Spark既支持批量計算,也支持流式計算,兩者流式計算的本質都是微批處理
D. Spark Streaming 支持秒級延遲,其吞吐量優於Storm - HADOOP項目的組件
HDFS
YARN
MapReduce - Impala的SQl語法與Hive一致
- 下面哪個項目是Hadoop的接口定義語言 Thrift
- 對於spark參數spark.ui.port,以下哪一個環境中的參數在運行時生效
sparkcontext中採用conf.set(“spark.ui.port”,’‘14040’’)指定 - Spark中各Stage的Task數量由什麼決定
Partition - 如果你的umask設置爲022,缺省的你創建的文件的權限爲
rw-r–r-
默認777,umask爲022,那麼相減得755,也就是文件夾的權限,文件的權限再要減去111,也就是644 - 刪除被從表引用的主表記錄時,需修改從表的外鍵約束的“刪除規則”爲
設置Null
級聯 - ETL過程包含哪些
抽取
裝載
轉換 - spark支持的join類型有
inner join
left outer join
right outer join
full outer join - Apache Impala具有以下哪些特性
類SQL查詢
可擴展性
支持UDF函數 - 事實表和維度表的概念以及怎麼設計?
事實表:
每個數據倉庫都包含一個或者多個事實數據表。事實數據表可能包含業務銷售數據,如現金登記事務所產生的數據,事實數據表通常包含大量的行
一般事實表中只存放數字或者一些Flag用來統計(Count),如收益、數量、支出等
維度表(Dimension Table):
維度表可以看作是用戶來分析數據的窗口,維度表中包含事實數據表中事實記錄的特性,有些特性提供描述性信息,有些特性指定如何彙總事實數據表數據,以便爲分析者提供有用的信息,維度表包含幫助彙總數據的特性的層次結構。
事實表的設計是以能夠正確記錄歷史信息爲準則,維度表的設計是以能夠以合適的角度來聚合主題內容爲準則。 - hive表關聯查詢,什麼情況下會發生數據傾斜,應該如何解決?
傾斜原因:
map輸出數據按key Hash的分配到reduce中,由於key分佈不均勻、業務數據本身的特性、建表時考慮不周等原因造成的reduce 上的數據量差異過大。
解決方案:
(1)參數調節:
hive.map.aggr = true
hive.groupby.skewindata=true
有數據傾斜的時候進行負載均衡,當選項設定位true,生成的查詢計劃會有兩個MR Job。
第一個MR Job中,Map的輸出結果集合會隨機分佈到Reduce中,每個Reduce做部分聚合操作,並輸出結果,這樣處理的結果是相同的Group By Key有可能被分發到不同的Reduce中,從而達到負載均衡的目的;
第二個MR Job再根據預處理的數據結果按照Group By Key 分佈到 Reduce 中(這個過程可以保證相同的 Group By Key 被分佈到同一個Reduce中),最後完成最終的聚合操作。
(2)SQL 語句調節:
1)選用join key分佈最均勻的表作爲驅動表。做好列裁剪和filter操作,以達到兩表做join 的時候,數據量相對變小的效果。
2)大小表Join:
使用map join讓小的維度表(1000 條以下的記錄條數)先進內存。在map端完成reduce.
3)大表Join大表:
把空值的key變成一個字符串加上隨機數,把傾斜的數據分到不同的reduce上,由於null 值關聯不上,處理後並不影響最終結果。
4)count distinct大量相同特殊值:
count distinct 時,將值爲空的情況單獨處理,如果是計算count distinct,可以不用處理,直接過濾,在最後結果中加1。如果還有其他計算,需要進行group by,可以先將值爲空的記錄單獨處理,再和其他計算結果進行union。 - 談談數據庫優化方面的經驗看法
- 查看sql語句的執行計劃,內存消耗是否是否正常
- 優化查詢語句,減少update等低效率操作,減少多表一次性關聯,減少嵌套語句等
- 減少應用和數據庫的交互次數、同一個sql語句的執行次數
- 優化數據表結構,分析業務邏輯,對常用邏輯可提前計算好,減少重複查詢
- 對數據量大的表,可拆分做切片處理
- 簡述Spark任務提交到yarn-cluster上的任務運行過程。
Spark on Yarn-Cluster模式
1)Yarn-Cluster 第一步: Client向Yarn中提交應用程序,包括ApplicationMaster程序、啓動ApplicationMaster的命令、需要在Executor中運行的程序等;
2)Yarn-Cluster 第二步:ResourceManager收到請求後,在集羣中選擇一個NodeManager,爲該應用程序分配第一個Container,要求它在這個Container中啓動應用程序的ApplicationMaster,其中ApplicationMaster進行SparkContext等的初始化;
3)Yarn-Cluster 第三步:ApplicationMaster向ResourceManager註冊,這樣用戶可以直接通過ResourceManage查看應用程序的運行狀態,然後它將採用輪詢的方式通過RPC協議爲各個任務申請資源,並監控它們的運行狀態直到運行結束;
4)Yarn-Cluster 第四步:一旦ApplicationMaster申請到資源後,便與對應的NodeManager通信,要求它在獲得的Container中啓動啓動Executor,啓動後會向ApplicationMaster中的SparkContext註冊並申請Task;
5)Yarn-Cluster 第五步:ApplicationMaster中的SparkContext分配Task給Executor執行,Executor運行Task並向ApplicationMaster彙報運行的狀態和進度,以讓ApplicationMaster隨時掌握各個任務的運行狀態,從而可以在任務失敗時重新啓動任務;
6)Yarn-Cluster 第六步:應用程序運行完成後,ApplicationMaster向ResourceManager申請註銷並關閉自己。 - 簡述python是如何進行內存管理的。
參考答案:從三個方面來說,一對象的引用計數機制,二垃圾回收機制,三內存池機制
①對象的引用計數機制
Python內部使用引用計數,來保持追蹤內存中的對象,所有對象都有引用計數。
多數情況下,引用計數比你猜測得要大得多。對於不可變數據(如數字和字符串),解釋器會在程序的不同部分共享內存,以便節約內存。
②垃圾回收
當一個對象的引用計數歸零時,它將被垃圾收集機制處理掉。
當兩個對象a和b相互引用時,del語句可以減少a和b的引用計數,並銷燬用於引用底層對象的名稱。然而由於每個對象都包含一個對其他對象的應用,因此引用計數不會歸零,對象也不會銷燬。(從而導致內存泄露)。爲解決這一問題,解釋器會定期執行一個循環檢測器,搜索不可訪問對象的循環並刪除它們。
③內存池機制
Python提供了對內存的垃圾收集機制,但是它將不用的內存放到內存池而不是返回給操作系統。
Pymalloc機制。爲了加速Python的執行效率,Python引入了一個內存池機制,用於管理對小塊內存的申請和釋放。
Python中所有小於256個字節的對象都使用pymalloc實現的分配器,而大的對象則使用系統的malloc。
對於Python對象,如整數,浮點數和List,都有其獨立的私有內存池,對象間不共享他們的內存池。也就是說如果你分配又釋放了大量的整數,用於緩存這些整數的內存就不能再分配給浮點數。 - 當用戶使用稀疏特徵訓練模型時,對於離散特徵缺省值,以下哪種處理效果較好(B)
A. 刪除該特徵
B. 使用全新值來標記
C. 當零處理直接忽略
D. 使用平均值代替 - 機器學習中使用L2正則化可以得到平滑的權值
在AdaBoost算法中,所有被錯分的樣本的權重更新比例相同
梯度下降有時會陷於局部極小值,但EM算法不會 - 優化求解方法
ReLu
50.SVM的優勢
可以和核函數結合
通過調參可以往往可以得到很好的分類效果
泛化能力好 - Linux系統中,下列哪個符號可以起到追加內容到文件的作用(>>)
- 對於k折交叉驗證, 以下對k的說法正確的是()
k越大,不一定越好,選擇大的k會加大評估時間
選擇更大的k,就會有更小的bias (因爲訓練集更加接近總數據集)
在選擇k時,要最小化數據集之間的方差 - 關於特徵選擇,下列對 Ridge 迴歸和 Lasso 迴歸說法正確的是(Lasso迴歸適用於特徵選擇)
- 使用邏輯迴歸算法對樣本進行分類,得到訓練樣本的準確率和測試樣本的準確率。現在,在數據中增加一個新的特徵,其它特徵保持不變。然後重新訓練測試。則下列說法正確的是(訓練樣本準確率一定增加或保持不變)
- 基於用戶的協同過濾算法,適用於以下哪種場景(用戶個性化興趣不太明顯的場景)
- 基於物品的協同過濾算法
適用於用戶個性化需求強烈的領域
解決物品的長尾問題
適用於物品數明顯小於用戶數的場合 - 假設使用邏輯迴歸進行 n 多類別分類,使用 One-vs-rest 分類法。下列說法正確的是(對於n類別,需要訓練n個模型)
- Naive Bayes是一種特殊的Bayes分類器,特徵變量是X,類別標籤是C,它的一個假定是(特徵變量X的各個維度是類別條件獨立隨機變量)
- 分析顧客消費行業,以便有針對性的向其推薦感興趣的服務,屬於(關聯規則挖掘 )問題。
- 防止過擬合的方法(正則化, 增大樣本量, early stopping)
- 以下屬於spark的transform操作(filter, map, flatMap)
- 直接來對文本分類(決策樹, 支持向量機, KNN)
- 影響聚類算法效果的原因(特徵選取, 模式相似性測度, 分類準則)
- 在Logistic Regression 中,如果同時加入L1和L2範數,會產生什麼效果(可以做特徵選擇,並在一定程度上防止過擬合)
- 關於PreparedStatement與Statement描述
一般而言,PreparedStatement比Statement執行效率更高
PreparedStatement會預編譯SQL語句
Statement每次都會解析/編譯SQL,確立並優化數據獲取路徑 - 在二分類問題中,當測試集的正負例數量不均衡時,以下評價方案哪個是相對合理的(假設 precision=TP/(TP+FP),recall=TP/(TP+FN))?
F-value:2recallprecision/(recall+precision)
G-mean:sqrt(precision*recall)
AUC:曲線下面積 - 下面對k-means聚類描述正確的是(B)
A. 對噪聲和離羣點敏感
B. 在指定K的前提下,每次結果都是相同的
C. 算法複雜度爲O(nkt)
D. 不適合發現非凸形狀的聚類 - 在基本K均值算法裏,當鄰近度函數採用( 曼哈頓距離)的時候. 合適的質心是簇中各點的中位數。
- 以下選項,屬於進程和線程區別的是(進程可以用IPC進行通信,線程不行)
- 關於用戶畫像的說法錯誤的是()
A. 用戶畫像的標籤分爲定量標籤和定性標籤
B. 用戶畫像的應用場景有:產品設計,營銷推薦,風險控制等
C. 用戶標籤必須描述客觀的事實
D. 用戶畫像本質上是一套完整的標籤體系 - 掌上生活是招商銀行信用卡中心推出的一款消費金融APP,其中有針對持卡用戶提供不同種類的餐飲優惠券。現在需要預測用戶未來一週內是否會購買掌上生活APP上的優惠券(包括飯票、影票等),請問:
(1)可以使用哪些評價指標?可以構造的特徵有哪些 (至少寫出五個)?
(2)可供使用的模型有Logistic模型和xgboost模型,請簡述這兩個模型的原理,並比較這兩個模型的特點。
(3)訓練模型後在線下的離線評價效果很好,但上線使用後發現效果極差,請分析可能的原因及解決方案。
1)AUC、accuracy、precision、recall等二分類常用指標;
個人屬性、信用卡消費數據、APP操作行爲日誌等等; (評價指標和特徵各1分)
- 模型原理各2分,模型比較2分;共6分
3)時間因素:上線一般會有時間延遲,訓練模型中可能加入了與訓練樣本時間相關的特徵變量,需要在線下訓練模型中找到並剔除這樣的變量; (分析原因2分,解決方案2分)
-
簡述曼哈頓距離、歐式距離、明式距離、餘弦距離、皮爾森相關係數的原理及定義,並在此基礎上說明不同距離適合的應用場景。
原理及定義:(共5分,每種距離1分)
1)曼哈頓距離:曼哈頓街道距離(出租車距離)。向量對應元素差值的絕對值之和。 (1分)
2)歐式距離:歐幾里得向量空間幾何距離(絕對距離)。對應元素差值的平方和,再開方。(1分)
3)明式距離:兩個n維變量a(x11,x12,…,x1n)與 b(x21,x22,…,x2n)間的閔可夫斯基距離定義爲: (1分)
其中p是一個變參數。 當p=1時,就是曼哈頓距離 當p=2時,就是歐氏距離 當p→∞時,就是切比雪夫距離
4)餘弦距離:argcos夾角大小。對應元素相乘求和,除以各向量長度(模值)之積。(1分)
5)皮爾森相關係數:相關係數,向量減去自身均值之後的餘弦距離 (1分)
應用場景:(共5分,答出3點即可)
1)如果數據存在“分數膨脹“問題,就使用皮爾遜相關係數
2)如果數據比較密集,變量之間基本都存在共有值,且這些距離數據都是非常重要的,那就使用歐幾里得或者曼哈頓距離
3)如果數據是稀疏的,就使用餘弦相似度
4)歐氏距離能夠體現個體數值特徵的絕對差異,所以更多的用於需要從維度的數值大小中體現差異的分析,如使用用戶行爲指標分析用戶價值的相似度或差異;
5)餘弦相似度更多的是從方向上區分差異,而對絕對的數值不敏感,更多的用於使用用戶對內容評分來區分用戶興趣的相似度和差異,同時修正了用戶間可能存在的度量標準不統一的問題(因爲餘弦相似度對絕對數值不敏感)