補充: mapreduce 、hive. 爲何不用mapredeuce,用hive?html
1.MapReduce is hard to program.
java
2.No Schema,lack of query lanaguager. eg.SQLnode
後面facebook 開源了一個hive的框架,它是基於hadoop的。mysql
what is hive?
linux
A Hadoop-based system for querying and managing structured data
web
Uses Map/Reduce for execution (執行)算法
Uses Hadoop Distributed File System (HDFS) for storagesql
Provides SQL-like query language named HiveQL;shell
Hive compile SQL queries into MapReduce jobs and run the jobs in the Hadoop cluster.數據庫
Hive Advantages
Indispensable for SQL users,ease-of-use;
Easier then java MR API;
Hive Disadvantages
Hive does Not provide low latency or realtime queries;
Even querying small amounts of data may take minutes;
Hive's Focus
Scalable SQL processing over data in Hadoop
Scales to 100PB+;
Data has a schema;
Designed for scalability and ease-of-use rather than low latency responses;
一、Hive內部表和外部表的區別?
1) 在導入數據到外部表,數據並無移動到本身的數據倉庫目錄下,也就是說外部表中的數據並非由它本身來管理的!而內部表則不同;
2) 在刪除內部表的時候,Hive將會把屬於內部表的元數據和數據所有刪掉;而刪除外部表的時候,Hive僅僅刪除外部表的元數據,數據是不會刪除的!
那麼,應該如何選擇使用哪一種表呢?在大多數狀況沒有太多的區別,所以選擇只是我的喜愛的問題。可是做爲一個經驗,若是全部處理都須要由Hive完成,那麼你應該建立內部表,不然使用外部表!
http://www.aboutyun.com/thread-7458-1-1.html
二、Hbase的rowkey怎麼建立比較好?列族怎麼建立比較好?
三、用mapreduce怎麼處理數據傾斜問題?
http://www.alidata.org/archives/2109
http://blog.csdn.net/biaorger/article/details/38392957
四、hadoop框架中怎麼來優化?
http://itindex.net/detail/49326-hadoop-%E4%BC%98%E5%8C%96-%E6%80%BB%E7%BB%93
五、Hbase內部是什麼機制?
http://ju.outofmemory.cn/entry/50070
六、hdfs的數據壓縮算法
http://blog.sina.com.cn/s/blog_66474b1601017yjq.html
七、hive底層與數據庫交互原理
八、hbase過濾器實現原則
http://zjushch.iteye.com/blog/1530143
一. 問答題
1) datanode在什麼狀況下不會備份?
2) hdfs的體系結構?
3) sqoop在導入數據到mysql時,如何讓數據不重複導入?若是存在數據問題sqoop如何處理?
4) 請列舉曾經修改過的/etc下的配置文件,並說明修改要解決的問題?
5) 描述一下hadoop中,有哪些地方使用了緩存機制,做用分別是什麼?
二. 計算題:
一、使用Hive或者自定義MR實現以下邏輯
[plain] view plain
product_no lac_id moment start_time user_id county_id staytime city_id
13429100031 22554 8 2013-03-11 08:55:19.151754088 571 571 282 571
13429100082 22540 8 2013-03-11 08:58:20.152622488 571 571 270 571
13429100082 22691 8 2013-03-11 08:56:37.149593624 571 571 103 571
13429100087 22705 8 2013-03-11 08:56:51.139539816 571 571 220 571
13429100087 22540 8 2013-03-11 08:55:45.150276800 571 571 66 571
13429100082 22540 8 2013-03-11 08:55:38.140225200 571 571 133 571
13429100140 26642 9 2013-03-11 09:02:19.151754088 571 571 18 571
13429100082 22691 8 2013-03-11 08:57:32.151754088 571 571 287 571
13429100189 22558 8 2013-03-11 08:56:24.139539816 571 571 48 571
13429100349 22503 8 2013-03-11 08:54:30.152622440 571 571 211 571
字段解釋:
product_no:用戶手機號;
lac_id:用戶所在基站;
start_time:用戶在此基站的開始時間;
staytime:用戶在此基站的逗留時間。
需求描述:
根據lac_id和start_time知道用戶當時的位置,根據staytime 知道用戶各個基站的逗留時
長。根據軌跡合併連續基站的staytime。最終獲得每個用戶按時間排序在每個基站駐留時長
指望輸出舉例:
[plain] view plain
13429100082 22540 8 2013-03-11 08:58:20.152622488 571 571 270 571
13429100082 22691 8 2013-03-11 08:56:37.149593624 571 571 390 571
13429100082 22540 8 2013-03-11 08:55:38.140225200 571 571 133 571
13429100087 22705 8 2013-03-11 08:56:51.139539816 571 571 220 571
13429100087 22540 8 2013-03-11 08:55:45.150276800 571 571 660 571
二、Linux 腳本能力考察
2.1 請隨意使用各類類型的腳本語言實現:批量將指定目錄下的全部文件中的
$HADOOP_HOME替換成/home/ocetl/app/hadoop
2.2 假設有10 臺主機,H1 到H10,在開啓SSH互信的狀況下,編寫一個或多個腳本實現
在全部的遠程主機上執行腳本的功能
例如:runRemoteCmd.sh "ls -l"
指望結果:
H1:
XXXXXXXX
XXXXXXXX
XXXXXXXX
H2:
XXXXXXXX
XXXXXXXX
XXXXXXXX
H3:
...
三、Java能力考察
3.1 寫代碼實現1G 大小的文本文件,行分隔符爲\x01\x02,統計一下該文件中的總行數,
要求注意邊界狀況的處理
3.2 請描述一下在開發中如何對上面的程序進行性能分析,對性能進行優化的過程。
一. 問答題:
1. 用mapreduce實現sql語句select count(x) from a group by b?
2. 簡述MapReduce大體流程,map -> shuffle -> reduce
3. HDFS如何定位replica
4. Hadoop參數調優: cluster level: JVM, map/reduce slots, job level: reducer, memory, use combiner? use compression?
5. hadoop運行的原理?
6. mapreduce的原理?
7. HDFS存儲的機制?
8. 如何確認Hadoop集羣的健康情況?
二. 思考題
現有1 億個整數均勻分佈,若是要獲得前1K 個最大的數,求最優的算法。(先不考慮內存的限制,也不考慮讀寫外存,時間複雜度最少的算法即爲最優算法)
我先說下個人想法:分塊,好比分1W塊,每塊1W個,而後分別找出每塊最大值,從這最大的1W個值中找最大1K個,那麼其餘的9K 個最大值所在的塊便可扔掉,從剩下的最大的1K 個值所在的塊中找前1K個便可。那麼原問題的規模就縮小到了1/10。
問題:
(1) 這種分塊方法的最優時間複雜度。
(2) 如何分塊達到最優。好比也可分10W 塊,每塊1000 個數。則問題規模可降到原來1/100。但事實上覆雜度並沒下降。
(3) 還有沒更好更優的方法解決這個問題。
一. 問答題
1.hive如何調優?
2.hive如何權限控制?
3.hbase寫數據的原理是什麼?
4.hive能像關係數據庫那樣,建多個庫嗎?
5.hbase宕機如何處理?
6.hive實現統計的查詢語句是什麼?
7.生產環境中爲何建議使用外部表?
8.hadoop mapreduce建立類DataWritable的做用是什麼?
9.爲何建立類DataWritable?
二. 思考題
1.假設公司要建一個數據中心,你會如何規劃?
2.用Hadoop分析海量日誌文件,每行日誌記錄了以下數據:
TableName(表名),Time(時間),User(用戶),TimeSpan(時間開銷)。
要求:
編寫MapReduce程序算出高峯時間段(如上午10 點)哪張表被訪問的最頻繁,以及這段時間訪問這張表最多的用戶,以及這個用戶的總時間開銷。
一. 問答題:
1. 簡單說說map端和reduce端溢寫的細節
2. hive的物理模型跟傳統數據庫有什麼不一樣
3. 描述一下hadoop機架感知
4. 對於mahout,如何進行推薦、分類、聚類的代碼二次開發分別實現那些接口
5. 直接將時間戳做爲行健,在寫入單個region 時候會發生熱點問題,爲何呢?
二. 計算題:
1. 比方:現在有10個文件夾, 每一個文件夾都有1000000個url. 現在讓你找出top1000000url。
方法一:
運用2個job,第一個job直接用filesystem讀取10個文件夾做爲map輸入,url作key,reduce計算url的sum,
下一個job map用url做key,運用sum做二次排序,reduce中取top10000000
方法二:
建hive表A,掛分區channel,每一個文件夾是一個分區.
select x.url,x.c from(select url,count(1) as c from A where channel ='' group by url) x order by x.c desc limit 1000000;
2.若是讓你設計,你以爲一個分佈式文件系統應該如何設計,考慮哪方面內容?
一.問答題
一、map方法是如何調用reduce方法的?
二、fsimage和edit的區別?
三、hadoop1和hadoop2的區別?
四、列舉幾個配置文件優化?
五、寫出你對zookeeper的理解
六、datanode首次加入cluster的時候,若是log報告不兼容文件版本,那須要namenode執行格式化操做,這樣處理的緣由是?
七、hbase 集羣安裝注意事項
二. 思考題
1. linux 基礎:
(1) find 用法
(2) 給出一個文本:
http://aaa.com
http://bbb.com
http://bbb.com
http://bbb.com
http://ccc.com
http://ccc.com
讓寫shell統計,最後輸出結果,要求結果還要排序
aaa 1
ccc 2
bbb 3
2. 畫出公司的hadoop項目架構
1.文件大小默認爲64M,改成128M有啥影響?
2.RPC的原理?
3.NameNode與SecondaryNameNode的區別與聯繫?
4.介紹MadpReduce整個過程,好比把WordCount的例子的細節將清楚(重點講解Shuffle)?
5.MapReduce出現單點負載多大,怎麼負載平衡?
6.MapReduce怎麼實現Top10?
7.hadoop底層存儲設計
8.zookeeper有什麼優勢,用在什麼場合
9.Hbase中的metastore用來作什麼的?
10.HBase在進行模型設計時重點在什麼地方?一張表中國定義多少個Column Family最合適?爲何?
11.如何提升HBase客戶端的讀寫性能?請舉例說明。
12.在hadoop開發過程當中使用過哪些算法?其應用場景是什麼?
13.MapReduce程序如何發佈?若是MapReduce中涉及到了第三方的jar 包,該如何處理?
14.在實際工做中使用過哪些集羣的運維工具,請分別闡述其做用。
1. 集羣多少臺, 數據量多大, 吞吐量是多大, 天天處理多少G的數據?
2. 咱們的日誌是否是除了apache的訪問日誌是否是還有其餘的日誌?
3. 假設咱們有其餘的日誌是否是能夠對這個日誌有其餘的業務分析?這些業務分析都有什麼?
4. 大家的服務器有多少臺?服務器的內存多大?
5. 大家的服務器怎麼分佈的?(這裏說地理位置分佈,最好也從機架方面也談談)
6. 你日常在公司都幹些什麼(一些建議)
7. 大家的集羣規模?
開發集羣: 10臺(8臺可用) 8核cpu
8. 大家的數據是用什麼導入到數據庫的?導入到什麼數據庫?
處理以前的導入:經過 hadoop 命令導入到 hdfs 文件系統
處理完成以後的導出:利用 hive 處理完成以後的數據,經過 sqoop 導出到 mysql 數據庫中,以供報表層使用。
9. 大家業務數據量多大?有多少行數據?
開發時使用的是部分數據,不是全量數據,有將近一億行( 八、 9 千萬,具體不詳,通常開發中也沒人會特別關心這個問題)
10. 大家處理數據是直接讀數據庫的數據仍是讀文本數據?
將日誌數據導入到 hdfs 以後進行處理
11. 大家寫 hive 的 hql 語句,大概有多少條?
不清楚,我本身寫的時候也沒有作過統計
12. 大家提交的 job 任務大概有多少個?這些 job 執行完大概用多少時間?
沒統計過,加上測試的,會有不少
13. 你在項目中主要的工做任務是?
利用 hive 分析數據
14. 你在項目中遇到了哪些難題,是怎麼解決的?
某些任務執行時間過長,且失敗率太高,檢查日誌後發現沒有執行完就失敗,緣由出在hadoop 的 job 的 timeout 太短(相對於集羣的能力來講),設置長一點便可
15. 你本身寫過 udf 函數麼?寫了哪些?
16. 你的項目提交到 job 的時候數據量有多大?
17. 數據備份, 大家是多少份, 若是數據超過存儲容量, 大家怎麼處理?
18. 怎麼提高多個 JOB 同時執行帶來的壓力, 如何優化, 說說思路?
19. 大家用 HBASE 存儲什麼數據?
20. 大家的 hive 處理數據能達到的指標是多少?
21. 大家的 hbase 大概在公司業務中(主要是網上商城)大概都幾個表,幾個表簇,都存什麼樣的數據?
1.hbase怎麼預分區?
2.hbase怎麼給web前臺提供接口來訪問?
3.htable API有沒有線程安全問題,在程序中是單例仍是多例?
4.hbase有沒有併發問題?
5.metaq消息隊列,zookeeper集羣,storm集羣,就能夠完成對商城推薦系統功能嗎?還有沒有其餘的中間件?
6.storm 怎麼完成對單詞的計數?
7.hdfs的client端,複製到第三個副本時宕機, hdfs怎麼恢復保證下次寫第三副本?
8.block塊信息是先寫dataNode仍是先寫nameNode?
9.Hadoop生態圈中各類框架的運用場景?
10.hive中的壓縮格式RCFile、TextFile、SequenceFile各有什麼區別?
11.說明 Hadoop 2.0 的基本構成。
12.相比於 HDFS1.0, HDFS 2.0最主要的改進在哪幾方面?
13.試使用"步驟 1,步驟 2,步驟 3…" 說明YARN中運行應用程序的基本流程。
14.MapReduce2.0中,MRAppMaster主要做用是什麼?MRAppMaster如何實現任務容錯的?
15.爲何會產生yarn, 它解決了什麼問題,有什麼優點?
一. 問答題
1.請說說hadoop1的HA如何實現?
2.列舉出hadoop中定義的最經常使用的InputFormats。那個是默認的?
3.TextInputFormat和KeyValueInputFormat類之間的不一樣之處在於哪裏?
4.hadoop中的InputSplit是什麼?
5.hadoop框架中文件拆分是如何被觸發的?
6.hadoop中的RecordReader的目的是什麼?
7.若是hadoop中沒有定義定製分區,那麼如何在輸出到reducer前執行數據分區?
8.什麼是jobtracker?jobtracker有哪些特別的函數?
9.hadoop中job和task之間是什麼關係?
10.假設hadoop一個job產生了100個task,其中一個task失敗了,hadoop會如何處理?
11.hadoop推測執行是如何實現的?
12.關係型數據庫有什麼弱點?
很難進行分佈式部署,I/O瓶頸顯著,依賴於強大的服務器,須要花更大的代價才能突破性能極限
很難處理非結構化數據
13.什麼狀況下使用hbase?
適合海量的,但同時也是簡單的操做(例如:key-value)
成熟的數據分析主題,查詢模式已經肯定而且不會輕易改變。
傳統的關係型數據庫已經沒法承受負荷,高速插入,大量讀取
二. 分析題
1.有一千萬條短信,有重複,以文本文件的形式保存,一行一條,有重複。請用5分鐘時間,找出重複出現最多的前10條。
分析:
常規方法是先排序,在遍歷一次,找出重複最多的前10條。可是排序的算法複雜度最低爲nlgn。能夠設計一個 hash_table, hash_map<string, int> ,依次讀取一千萬條短信,加載到hash_table表中,而且統計重複的次數,與此同時維護一張最多10條的短信表。這樣遍歷一次就能找出最多的前10條,算法複雜度爲 O(n)。