1.0 簡要描述如何安裝配置apache的一個開源hadoop,只描述便可,無需列出具體步驟,列出具體步驟更好。java
答:第一題:1使用root帳戶登陸node
2 修改IPpython
3 修改host主機名mysql
4 配置SSH免密碼登陸ios
5 關閉防火牆c++
6 安裝JDKweb
6 解壓hadoop安裝包面試
7 配置hadoop的核心文件 hadoop-env.sh,core-site.xml , mapred-site.xml , hdfs-site.xml算法
8 配置hadoop環境變量sql
9 格式化 hadoop namenode-format
10 啓動節點start-all.sh
2.0 請列出正常的hadoop集羣中hadoop都分別須要啓動 哪些進程,他們的做用分別都是什麼,請儘可能列的詳細一些。
答:namenode:負責管理hdfs中文件塊的元數據,響應客戶端請求,管理datanode上文件block的均衡,維持副本數量
Secondname:主要負責作checkpoint操做;也能夠作冷備,對必定範圍內數據作快照性備份。
Datanode:存儲數據塊,負責客戶端對數據塊的io請求
Jobtracker :管理任務,並將任務分配給 tasktracker。
Tasktracker: 執行JobTracker分配的任務。
Resourcemanager
Nodemanager
Journalnode
Zookeeper
Zkfc
3.0請寫出如下的shell命令
(1)殺死一個job
(2)刪除hdfs上的 /tmp/aaa目錄
(3)加入一個新的存儲節點和刪除一個節點須要執行的命令
答:(1)hadoop job –list 獲得job的id,而後執 行 hadoop job -kill jobId就能夠殺死一個指定jobId的job工做了。
(2)hadoopfs -rmr /tmp/aaa
(3) 增長一個新的節點在新的幾點上執行
Hadoop daemon.sh start datanode
Hadooop daemon.sh start tasktracker/nodemanager
下線時,要在conf目錄下的excludes文件中列出要下線的datanode機器主機名
而後在主節點中執行 hadoop dfsadmin -refreshnodes à下線一個datanode
刪除一個節點的時候,只須要在主節點執行
hadoop mradmin -refreshnodes ---à下線一個tasktracker/nodemanager
4.0 請列出你所知道的hadoop調度器,並簡要說明其工做方法
答:Fifo schedular :默認,先進先出的原則
Capacity schedular :計算能力調度器,選擇佔用最小、優先級高的先執行,依此類推。
Fair schedular:公平調度,全部的 job 具備相同的資源。
5.0 請列出你在工做中使用過的開發mapreduce的語言
答:java,hive,(python,c++)hadoop streaming
6.0 當前日誌採樣格式爲
a , b , c , d
b , b , f , e
a , a , c , f
請你用最熟悉的語言編寫mapreduce,計算第四列每一個元素出現的個數
答:
public classWordCount1 {
public static final String INPUT_PATH ="hdfs://hadoop0:9000/in";
public static final String OUT_PATH ="hdfs://hadoop0:9000/out";
public static void main(String[] args)throws Exception {
Configuration conf = newConfiguration();
FileSystem fileSystem =FileSystem.get(conf);
if(fileSystem.exists(newPath(OUT_PATH))){}
fileSystem.delete(newPath(OUT_PATH),true);
Job job = newJob(conf,WordCount1.class.getSimpleName());
//1.0讀取文件,解析成key,value對
FileInputFormat.setInputPaths(job,newPath(INPUT_PATH));
//2.0寫上本身的邏輯,對輸入的能夠,value進行處理,轉換成新的key,value對進行輸出
job.setMapperClass(MyMapper.class);
job.setMapOutputKeyClass(Text.class);
job.setMapOutputValueClass(LongWritable.class);
//3.0對輸出後的數據進行分區
//4.0對分區後的數據進行排序,分組,相同key的value放到一個集合中
//5.0對分組後的數據進行規約
//6.0對經過網絡將map輸出的數據拷貝到reduce節點
//7.0 寫上本身的reduce函數邏輯,對map輸出的數據進行處理
job.setReducerClass(MyReducer.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(LongWritable.class);
FileOutputFormat.setOutputPath(job,new Path(OUT_PATH));
job.waitForCompletion(true);
}
static class MyMapper extendsMapper<LongWritable, Text, Text, LongWritable>{
@Override
protected void map(LongWritablek1, Text v1,
org.apache.hadoop.mapreduce.Mapper.Contextcontext)
throws IOException,InterruptedException {
String[] split =v1.toString().split("\t");
for(String words :split){
context.write(split[3],1);
}
}
}
static class MyReducer extends Reducer<Text,LongWritable, Text, LongWritable>{
protected void reduce(Text k2,Iterable<LongWritable> v2,
org.apache.hadoop.mapreduce.Reducer.Contextcontext)
throws IOException,InterruptedException {
Long count = 0L;
for(LongWritable time :v2){
count += time.get();
}
context.write(v2, newLongWritable(count));
}
}
}
7.0 你認爲用java , streaming , pipe方式開發map/reduce , 各有哪些優勢
就用過 java 和 hiveQL。
Java 寫 mapreduce 能夠實現複雜的邏輯,若是需求簡單,則顯得繁瑣。
HiveQL 基本都是針對 hive 中的表數據進行編寫,但對複雜的邏輯(雜)很難進行實現。寫起來簡單。
8.0 hive有哪些方式保存元數據,各有哪些優勢
三種:自帶內嵌數據庫derby,挺小,不經常使用,只能用於單節點
mysql經常使用
上網上找了下專業名稱:single user mode..multiuser mode...remote user mode
9.0 請簡述hadoop怎樣實現二級排序(就是對key和value雙排序)
第一種方法是,Reducer將給定key的全部值都緩存起來,而後對它們再作一個Reducer內排序。可是,因爲Reducer須要保存給定key的全部值,可能會致使出現內存耗盡的錯誤。
第二種方法是,將值的一部分或整個值加入原始key,生成一個組合key。這兩種方法各有優點,第一種方法編寫簡單,但併發度小,數據量大的狀況下速度慢(有內存耗盡的危險),
第二種方法則是將排序的任務交給MapReduce框架shuffle,更符合Hadoop/Reduce的設計思想。這篇文章裏選擇的是第二種。咱們將編寫一個Partitioner,確保擁有相同key(原始key,不包括添加的部分)的全部數據被髮往同一個Reducer,還將編寫一個Comparator,以便數據到達Reducer後即按原始key分組。
10.簡述hadoop實現jion的幾種方法
Map side join----大小表join的場景,能夠藉助distributed cache
Reduce side join
11.0 請用java實現非遞歸二分查詢
1. public class BinarySearchClass
2. {
3.
4. public static int binary_search(int[] array, int value)
5. {
6. int beginIndex = 0;// 低位下標
7. int endIndex = array.length - 1;// 高位下標
8. int midIndex = -1;
9. while (beginIndex <= endIndex) {
10. midIndex = beginIndex + (endIndex - beginIndex) / 2;//防止溢出
11. if (value == array[midIndex]) {
12. return midIndex;
13. } else if (value < array[midIndex]) {
14. endIndex = midIndex - 1;
15. } else {
16. beginIndex = midIndex + 1;
17. }
18. }
19. return -1;
20. //找到了,返回找到的數值的下標,沒找到,返回-1
21. }
22.
23.
24. //start 提示:自動閱卷起始惟一標識,請勿刪除或增長。
25. public static void main(String[] args)
26. {
27. System.out.println("Start...");
28. int[] myArray = new int[] { 1, 2, 3, 5, 6, 7, 8, 9 };
29. System.out.println("查找數字8的下標:");
30. System.out.println(binary_search(myArray, 8));
31. }
32. //end //提示:自動閱卷結束惟一標識,請勿刪除或增長。
33. }
12.0 請簡述mapreduce中的combine和partition的做用
答:combiner是發生在map的最後一個階段,其原理也是一個小型的reducer,主要做用是減小輸出到reduce的數據量,緩解網絡傳輸瓶頸,提升reducer的執行效率。
partition的主要做用將map階段產生的全部kv對分配給不一樣的reducer task處理,能夠將reduce階段的處理負載進行分攤
13.0 hive內部表和外部表的區別
Hive 向內部表導入數據時,會將數據移動到數據倉庫指向的路徑;如果外部表,數據的具體存放目錄由用戶建表時指定
在刪除表的時候,內部表的元數據和數據會被一塊兒刪除,
而外部表只刪除元數據,不刪除數據。
這樣外部表相對來講更加安全些,數據組織也更加靈活,方便共享源數據。
14. Hbase的rowKey怎麼建立比較好?列簇怎麼建立比較好?
答:
rowKey最好要建立有規則的rowKey,即最好是有序的。
常常須要批量讀取的數據應該讓他們的rowkey連續;
將常常須要做爲條件查詢的關鍵詞組織到rowkey中;
列族的建立:
按照業務特色,把數據歸類,不一樣類別的放在不一樣列族
15. 用mapreduce怎麼處理數據傾斜問題
本質:讓各分區的數據分佈均勻
能夠根據業務特色,設置合適的partition策略
若是事先根本不知道數據的分佈規律,利用隨機抽樣器抽樣後生成partition策略再處理
16. hadoop框架怎麼來優化
答:
能夠從不少方面來進行:好比hdfs怎麼優化,mapreduce程序怎麼優化,yarn的job調度怎麼優化,hbase優化,hive優化。。。。。。。
17. hbase內部機制是什麼
答:
Hbase是一個能適應聯機業務的數據庫系統
物理存儲:hbase的持久化數據是存放在hdfs上
存儲管理:一個表是劃分爲不少region的,這些region分佈式地存放在不少regionserver上
Region內部還能夠劃分爲store,store內部有memstore和storefile
版本管理:hbase中的數據更新本質上是不斷追加新的版本,經過compact操做來作版本間的文件合併
Region的split
集羣管理:zookeeper + hmaster(職責) + hregionserver(職責)
18. 咱們在開發分佈式計算job的時候,是否能夠去掉reduce階段
答:能夠,例如咱們的集羣就是爲了存儲文件而設計的,不涉及到數據的計算,就能夠將mapReduce都省掉。
好比,流量運營項目中的行爲軌跡加強功能部分
怎麼樣才能實現去掉reduce階段
去掉以後就不排序了,不進行shuffle操做了
19 hadoop中經常使用的數據壓縮算法
答:
Lzo
Gzip
Default
Snapyy
若是要對數據進行壓縮,最好是將原始數據轉爲SequenceFile 或者 Parquet File(spark)
20. mapreduce的調度模式(題意模糊,能夠理解爲yarn的調度模式,也能夠理解爲mr的內部工做流程)
答: appmaster做爲調度主管,管理maptask和reducetask
Appmaster負責啓動、監控maptask和reducetask
Maptask處理完成以後,appmaster會監控到,而後將其輸出結果通知給reducetask,而後reducetask從map端拉取文件,而後處理;
當reduce階段所有完成以後,appmaster還要向resourcemanager註銷本身
21. hive底層與數據庫交互原理
答:
Hive的查詢功能是由hdfs + mapreduce結合起來實現的
Hive與mysql的關係:只是借用mysql來存儲hive中的表的元數據信息,稱爲metastore
22. hbase過濾器實現原則
答:能夠說一下過濾器的父類(比較過濾器,專用過濾器)
過濾器有什麼用途:
加強hbase查詢數據的功能
減小服務端返回給客戶端的數據量
23. reduce以後數據的輸出量有多大(結合具體場景,好比pi)
Sca階段的加強日誌(1.5T---2T)
過濾性質的mr程序,輸出比輸入少
解析性質的mr程序,輸出比輸入多(找共同朋友)
24. 現場出問題測試mapreduce掌握狀況和hive的ql語言掌握狀況
25.datanode在什麼狀況下不會備份數據
答:在客戶端上傳文件時指定文件副本數量爲1
26.combine出如今哪一個過程
答:shuffle過程當中
具體來講,是在maptask輸出的數據從內存溢出到磁盤,可能會調屢次
Combiner使用時候要特別謹慎,不能影響最後的邏輯結果
27. hdfs的體系結構
答:
集羣架構:
namenode datanode secondarynamenode
(active namenode ,standby namenode)journalnode zkfc
內部工做機制:
數據是分佈式存儲的
對外提供一個統一的目錄結構
對外提供一個具體的響應者(namenode)
數據的block機制,副本機制
Namenode和datanode的工做職責和機制
讀寫數據流程
28. flush的過程
答:flush是在內存的基礎上進行的,首先寫入文件的時候,會先將文件寫到內存中,當內存寫滿的時候,一次性的將文件所有都寫到硬盤中去保存,並清空緩存中的文件,
29. 什麼是隊列
答:是一種調度策略,機制是先進先出
30. List與set的區別
答:List和Set都是接口。他們各自有本身的實現類,有無順序的實現類,也有有順序的實現類。
最大的不一樣就是List是能夠重複的。而Set是不能重複的。
List適合常常追加數據,插入,刪除數據。但隨即取數效率比較低。
Set適合常常地隨即儲存,插入,刪除。可是在遍歷時效率比較低。
31.數據的三範式
答:
第一範式()無重複的列
第二範式(2NF)屬性徹底依賴於主鍵 [消除部分子函數依賴]
第三範式(3NF)屬性不依賴於其它非主屬性 [消除傳遞依賴]
32.三個datanode中當有一個datanode出現錯誤時會怎樣?
答:
Namenode會經過心跳機制感知到datanode下線
會將這個datanode上的block塊在集羣中從新複製一份,恢復文件的副本數量
會引起運維團隊快速響應,派出同事對下線datanode進行檢測和修復,而後從新上線
33.sqoop在導入數據到mysql中,如何不重複導入數據,若是存在數據問題,sqoop如何處理?
答:FAILED java.util.NoSuchElementException
此錯誤的緣由爲sqoop解析文件的字段與MySql數據庫的表的字段對應不上形成的。所以須要在執行的時候給sqoop增長參數,告訴sqoop文件的分隔符,使它可以正確的解析文件字段。
hive默認的字段分隔符爲'\001'
34.描述一下hadoop中,有哪些地方使用到了緩存機制,做用分別是什麼?
答:
Shuffle中
Hbase----客戶端/regionserver
35.MapReduce優化經驗
答:(1.)設置合理的map和reduce的個數。合理設置blocksize
(2.)避免出現數據傾斜
(3.combine函數
(4.對數據進行壓縮
(5.小文件處理優化:事先合併成大文件,combineTextInputformat,在hdfs上用mapreduce將小文件合併成SequenceFile大文件(key:文件名,value:文件內容)
(6.參數優化
36.請列舉出曾經修改過的/etc/下面的文件,並說明修改要解決什麼問題?
答:/etc/profile這個文件,主要是用來配置環境變量。讓hadoop命令能夠在任意目錄下面執行。
/ect/sudoers
/etc/hosts
/etc/sysconfig/network
/etc/inittab
37.請描述一下開發過程當中如何對上面的程序進行性能分析,對性能分析進行優化的過程。
38. 現有 1 億個整數均勻分佈,若是要獲得前 1K 個最大的數,求最優的算法。
參見《海量數據算法面試大全》
39.mapreduce的大體流程
答:主要分爲八個步驟
1/對文件進行切片規劃
2/啓動相應數量的maptask進程
3/調用FileInputFormat中的RecordReader,讀一行數據並封裝爲k1v1
4/調用自定義的map函數,並將k1v1傳給map
5/收集map的輸出,進行分區和排序
6/reduce task任務啓動,並從map端拉取數據
7/reduce task調用自定義的reduce函數進行處理
8/調用outputformat的recordwriter將結果數據輸出
41.用mapreduce實現sql語 select count (x) from a group by b;
44.搭建hadoop集羣 , master和slaves都運行哪些服務
答:master主要是運行咱們的主節點,slaves主要是運行咱們的從節點。
45. hadoop參數調優
46. pig , latin , hive語法有什麼不一樣
答:
46. 描述Hbase,ZooKeeper搭建過程
48.hadoop運行原理
答:hadoop的主要核心是由兩部分組成,HDFS和mapreduce,首先HDFS的原理就是分佈式的文件存儲系統,將一個大的文件,分割成多個小的文件,進行存儲在多臺服務器上。
Mapreduce的原理就是使用JobTracker和TaskTracker來進行做業的執行。Map就是將任務展開,reduce是彙總處理後的結果。
49.mapreduce的原理
答:mapreduce的原理就是將一個MapReduce框架由一個單獨的master JobTracker和每一個集羣節點一個slave TaskTracker共同組成。master負責調度構成一個做業的全部任務,這些的slave上,master監控它們的執行,從新執行已經失敗的任務。而slave僅負責執行由maste指派的任務。
50.HDFS存儲機制
答:HDFS主要是一個分佈式的文件存儲系統,由namenode來接收用戶的操做請求,而後根據文件大小,以及定義的block塊的大小,將大的文件切分紅多個block塊來進行保存
51.舉一個例子說明mapreduce是怎麼運行的。
Wordcount
52.如何確認hadoop集羣的健康情況
答:有完善的集羣監控體系(ganglia,nagios)
Hdfs dfsadmin –report
Hdfs haadmin –getServiceState nn1
53.mapreduce做業,不讓reduce輸出,用什麼代替reduce的功能。
54.hive如何調優
答:hive最終都會轉化爲mapreduce的job來運行,要想hive調優,實際上就是mapreduce調優,能夠有下面幾個方面的調優。解決收據傾斜問題,減小job數量,設置合理的map和reduce個數,對小文件進行合併,優化時把握總體,單個task最優不如總體最優。按照必定規則分區。
55.hive如何控制權限
咱們公司沒作,不須要
56.HBase寫數據的原理是什麼?
答:
57.hive能像關係型數據庫那樣建多個庫嗎?
答:固然能了。
58.HBase宕機如何處理
答:宕機分爲HMaster宕機和HRegisoner宕機,若是是HRegisoner宕機,HMaster會將其所管理的region從新分佈到其餘活動的RegionServer上,因爲數據和日誌都持久在HDFS中,該操做不會致使數據丟失。因此數據的一致性和安全性是有保障的。
若是是HMaster宕機,HMaster沒有單點問題,HBase中能夠啓動多個HMaster,經過Zookeeper的Master Election機制保證總有一個Master運行。即ZooKeeper會保證總會有一個HMaster在對外提供服務。
59.假設公司要建一個數據中心,你會如何處理?
先進行需求調查分析
設計功能劃分
架構設計
吞吐量的估算
採用的技術類型
軟硬件選型
成本效益的分析
項目管理
擴展性
安全性,穩定性
60. 單項選擇題
1. 下面哪一個程序負責 HDFS 數據存儲。 答案 C
a)NameNode b)Jobtracker c)Datanoded)secondaryNameNode e)tasktracker
2. HDfS 中的 block 默認保存幾份? 答案 A
a)3 份 b)2 份 c)1 份 d)不肯定
3. 下列哪一個程序一般與 NameNode 在一個節點啓動?
a)SecondaryNameNode b)DataNodec)TaskTracker d)Jobtracker e)zkfc
4. Hadoop 做者 答案D
a)Martin Fowler b)Kent Beck c)Doug cutting
5. HDFS 默認 Block Size 答案 B [M1]
a)32MB b)64MB c)128MB
a)CPU b)網絡 c)磁盤 d)內存
7. 關於 SecondaryNameNode 哪項是正確的? 答案C
a)它是NameNode的熱備
b)它對內存沒有要求
c)它的目的是幫助 NameNode 合併編輯日誌,減小 NameNode 啓動時間
d)SecondaryNameNode 應與 NameNode 部署到一個節點
多選題:
8. 下列哪項能夠做爲集羣的管理工具 答案 ABCD (此題出題有誤)
a)Puppet b)Pdsh c)Cloudera Manager d)Zookeeper
a)若是一個機架出問題,不會影響數據讀寫
b)寫入數據的時候會寫到不一樣機架的 DataNode 中
c)MapReduce 會根據機架獲取離本身比較近的網絡數據
10. Client 端上傳文件的時候下列哪項正確 答案BC
a)數據通過 NameNode 傳遞給 DataNode
b)Client 端將文件切分爲 Block,依次上傳
c)Client 只上傳數據到一臺 DataNode,而後由 NameNode 負責 Block 複製工做
11. 下列哪一個是 Hadoop 運行的模式 答案 ABC
a)單機版 b)僞分佈式 c)分佈式
12. Cloudera 提供哪幾種安裝 CDH 的方法 答案 ABCD
a)Cloudera manager b)Tar ball c)Yum d)Rpm
判斷題:所有都是錯誤滴
13. Ganglia 不只能夠進行監控,也能夠進行告警。( )
14. Block Size 是不能夠修改的。( )
15. Nagios 不能夠監控 Hadoop 集羣,由於它不提供 Hadoop 支持。( )
16. 若是 NameNode 意外終止, SecondaryNameNode 會接替它使集羣繼續工做。( )
17. Cloudera CDH 是須要付費使用的。( )
18. Hadoop 是 Java 開發的,因此 MapReduce 只支持 Java 語言編寫。( )
19. Hadoop 支持數據的隨機讀寫。( )
20. NameNode 負責管理 metadata, client 端每次讀寫請求,它都會從磁盤中讀取或則
會寫入 metadata 信息並反饋 client 端。( )
21. NameNode 本地磁盤保存了 Block 的位置信息。( )
22. DataNode 經過長鏈接與 NameNode 保持通訊。( )
23. Hadoop 自身具備嚴格的權限管理和安全措施保障集羣正常運行。( )
24. Slave節點要存儲數據,因此它的磁盤越大越好。( )
25. hadoop dfsadmin –report 命令用於檢測 HDFS 損壞塊。( )
26. Hadoop 默認調度器策略爲 FIFO( )
27. 集羣內每一個節點都應該配 RAID,這樣避免單磁盤損壞,影響整個節點運行。( )
28. 由於 HDFS 有多個副本,因此 NameNode 是不存在單點問題的。( )
29. 每一個 map 槽(進程)就是一個線程。( )
30. Mapreduce 的 input split 就是一個 block。( )
31. NameNode的默認Web UI 端口是 50030,它經過 jetty 啓動的 Web 服務。( )
32. Hadoop 環境變量中的 HADOOP_HEAPSIZE 用於設置全部 Hadoop 守護線程的內存。它默認是200 GB。( )
33. DataNode 首次加入 cluster 的時候,若是 log中報告不兼容文件版本,那須要
NameNode執行「Hadoop namenode -format」操做格式化磁盤。( )
63. 談談 hadoop1 和 hadoop2 的區別
答:
hadoop1的主要結構是由HDFS和mapreduce組成的,HDFS主要是用來存儲數據,mapreduce主要是用來計算的,那麼HDFS的數據是由namenode來存儲元數據信息,datanode來存儲數據的。Jobtracker接收用戶的操做請求以後去分配資源執行task任務。
在hadoop2中,首先避免了namenode單點故障的問題,使用兩個namenode來組成namenode feduration的機構,兩個namenode使用相同的命名空間,一個是standby狀態,一個是active狀態。用戶訪問的時候,訪問standby狀態,而且,使用journalnode來存儲數據的原信息,一個namenode負責讀取journalnode中的數據,一個namenode負責寫入journalnode中的數據,這個平臺組成了hadoop的HA就是high availableAbility高可靠。
而後在hadoop2中沒有了jobtracker的概念了,統一的使用yarn平臺來管理和調度資源,yarn平臺是由resourceManager和NodeManager來共同組成的,ResourceManager來接收用戶的操做請求以後,去NodeManager上面啓動一個主線程負責資源分配的工做,而後分配好了資源以後告知ResourceManager,而後ResourceManager去對應的機器上面執行task任務。
64. 說說值對象與引用對象的區別?
65. 談談你對反射機制的理解及其用途?
答:java中的反射,首先咱們寫好的類,通過編譯以後就編程了.class文件,咱們能夠獲取這個類的.class文件,獲取以後,再來操做這個類。這個就是java的反射機制。
66. ArrayList、Vector、LinkedList 的區別及其優缺點?HashMap、HashTable 的區別及其優缺點?
答:ArrayList 和Vector是採用數組方式存儲數據, ,Vector因爲使用了synchronized方法(線程安全)因此性能上比ArrayList要差,LinkedList使用雙向鏈表實現存儲,按序號索引數據須要進行向前或向後遍歷,可是插入數據時只須要記錄本項的先後項便可,因此插入數度較快!
HashMap和HashTable:Hashtable的方法是同步的,而HashMap的方法不是,Hashtable是基於陳舊的Dictionary類的,HashMap是Java 1.2引進的Map接口的一個實現。HashMap是一個線程不一樣步的,那麼就意味着執行效率高,HashTable是一個線程同步的就意味着執行效率低,可是HashMap也能夠將線程進行同步,這就意味着,咱們之後再使用中,儘可能使用HashMap這個類。
67. 文件大小默認爲 64M,改成 128M 有啥影響?
答:更改文件的block塊大小,須要根據咱們的實際生產中來更改block的大小,若是block定義的過小,大的文件都會被切分紅太多的小文件,減慢用戶上傳效率,若是block定義的太大,那麼太多的小文件可能都會存到一個block塊中,雖然不浪費硬盤資源,但是仍是會增長namenode的管理內存壓力。
69. RPC 原理?
答:
1.調用客戶端句柄;執行傳送參數
2.調用本地系統內核發送網絡消息
3. 消息傳送到遠程主機
4. 服務器句柄獲得消息並取得參數
5. 執行遠程過程
6. 執行的過程將結果返回服務器句柄
7. 服務器句柄返回結果,調用遠程系統內核
8. 消息傳回本地主機
9. 客戶句柄由內核接收消息
10. 客戶接收句柄返回的數據
70. 對 Hadoop 有沒有調優經驗,沒有什麼使用心得?(調優從參數調優講起)
dfs.block.size
Mapredure:
io.sort.mb
io.sort.spill.percent
mapred.local.dir
mapred.map.tasks &mapred.tasktracker.map.tasks.maximum
mapred.reduce.tasks &mapred.tasktracker.reduce.tasks.maximum
mapred.reduce.max.attempts
mapred.reduce.parallel.copies
mapreduce.reduce.shuffle.maxfetchfailures
mapred.child.java.opts
mapred.reduce.tasks.speculative.execution
mapred.compress.map.output &mapred.map.output.compression.codec
mapred.reduce.slowstart.completed.maps
72以你的實際經驗,說下怎樣預防全表掃描
答:
1.應儘可能避免在where 子句中對字段進行null 值判斷,不然將致使引擎放棄使用索引而進行全表掃描
2.應儘可能避免在 where 子句中使用!=或<>操做符,不然將引擎放棄使用索引而進行全表掃
3.描應儘可能避免在 where 子句中使用or 來鏈接條件,不然將致使引擎放棄使用索引而進行
全表掃描
4.in 和 not in,用具體的字段列表代替,不要返回用不到的任何字段。in 也要慎用,不然會致使全表掃描
5.避免使用模糊查詢
6.任何地方都不要使用select* from t
73. zookeeper 優勢,用在什麼場合
答:極大方便分佈式應用的開發;(輕量,成本低,性能好,穩定性和可靠性高)
75.把公鑰追加到受權文件的命令?該命令是否在 root 用戶下執行?
答:ssh-copy-id
哪一個用戶須要作免密登錄就在哪一個用戶身份下執行
76. HadoopHA 集羣中各個服務的啓動和關閉的順序?
答:
77. 在 hadoop 開發過程當中使用過哪些算法?其應用場景是什麼?
答:排序,分組,topk,join,group
78. 在實際工做中使用過哪些集羣的運維工具,請分別闡述期做用。
答:nmon ganglia nagios
79. 一臺機器如何應對那麼多的請求訪問,高併發到底怎麼實現,一個請求怎麼產生的,
在服務端怎麼處理的,最後怎麼返回給用戶的,整個的環節操做系統是怎麼控制的?
80. java 是傳值仍是傳址?
答:引用傳遞。傳址
81. 問:大家的服務器有多少臺?
100多臺
82. 問:大家服務器的內存多大?
128G或者64G的
83. hbase 怎麼預分區?
建表時能夠經過shell命令預分區,也能夠在代碼中建表作預分區
《具體命令詳見筆記彙總》
84. hbase 怎麼給 web 前臺提供接口來訪問(HTABLE能夠提供對 HBase的訪問,可是怎麼查詢同一條記錄的多個版本數據)?
答:使用HTable來提供對HBase的訪問,可使用時間戳來記錄一條數據的多個版本。
85. .htable API 有沒有線程安全問題,在程序中是單例仍是多例?[M4]
多例:當多線程去訪問同一個表的時候會有。
86. 大家的數據是用什麼導入到數據庫的?導入到什麼數據庫?
處理完成以後的導出:利用hive 處理完成以後的數據,經過sqoop 導出到 mysql 數據庫
中,以供報表層使用。
87. 大家業務數據量多大?有多少行數據?(面試了三家,都問這個問題)
開發時使用的是部分數據,不是全量數據,有將近一億行(八、9 千萬,具體不詳,通常開
發中也沒人會特別關心這個問題)
88. 大家處理數據是直接讀數據庫的數據仍是讀文本數據?
將日誌數據導入到 hdfs 以後進行處理
89. 大家寫 hive 的 hql 語句,大概有多少條?
不清楚,我本身寫的時候也沒有作過統計
90. 大家提交的 job 任務大概有多少個?這些job 執行完大概用多少時間?(面試了三家,都問這個問題)
沒統計過,加上測試的,會有不少
Sca階段,一小時運行一個job,處理時間約12分鐘
Etl階段,有2千多個job,從凌晨12:00開始次第執行,到早上5點左右所有跑完
91. hive 跟 hbase 的區別是?
答:Hive和Hbase是兩種基於Hadoop的不一樣技術--Hive是一種類SQL的引擎,而且運行MapReduce任務,Hbase是一種在Hadoop之上的NoSQL 的Key/vale數據庫。固然,這兩種工具是能夠同時使用的。就像用Google來搜索,用FaceBook進行社交同樣,Hive能夠用來進行統計查詢,HBase能夠用來進行實時查詢,數據也能夠從Hive寫到Hbase,設置再從Hbase寫回Hive。
92. 你在項目中主要的工做任務是?
Leader
預處理系統、手機位置實時查詢系統,詳單系統,sca行爲軌跡加強子系統,內容識別中的模板匹配抽取系統
設計、架構、技術選型、質量把控,進度節點把握。。。。。。
93. 你在項目中遇到了哪些難題,是怎麼解決的?
Storm獲取實時位置信息動態端口的需求
101. job 的運行流程(提交一個 job 的流程)?
102Hadoop 生態圈中各類框架的運用場景?
103. hive 中的壓縮格式 RCFile、TextFile、SequenceFile [M5] 各有什麼區別?
以上 3 種格式同樣大的文件哪一個佔用空間大小..等等
採用RCfile的格式讀取的數據量(373.94MB)遠遠小於sequenceFile的讀取量(2.59GB)
二、執行速度前者(68秒)比後者(194秒)快不少
從以上的運行進度看,snappy的執行進度遠遠高於bz的執行進度。
在hive中使用壓縮須要靈活的方式,若是是數據源的話,採用RCFile+bz或RCFile+gz的方式,這樣能夠很大程度上節省磁盤空間;而在計算的過程當中,爲了避免影響執行的速度,能夠浪費一點磁盤空間,建議採用RCFile+snappy的方式,這樣能夠總體提高hive的執行速度。
至於lzo的方式,也能夠在計算過程當中使用,只不過綜合考慮(速度和壓縮比)仍是考慮snappy適宜。
104假如:Flume 收集到的數據不少個小文件,我須要寫 MR 處理時將這些文件合併
(是在 MR 中進行優化,不讓一個小文件一個 MapReduce)
他們公司主要作的是中國電信的流量計費爲主,專門寫 MR。
105. 解釋「hadoop」和「hadoop 生態系統」兩個概念
109. MapReduce 2.0」與「YARN」是否等同,嘗試解釋說明
MapReduce 2.0 --àmapreduce + yarn
110. MapReduce 2.0 中,MRAppMaster 主要做用是什麼,MRAppMaster 如何實現任務
容錯的?
111. 爲何會產生 yarn,它解決了什麼問題,有什麼優點?
114. 數據備份,大家是多少份,若是數據超過存儲容量,大家怎麼處理?
3份,多加幾個節點
115. 怎麼提高多個 JOB 同時執行帶來的壓力,如何優化,說說思路?
增長運算能力
116. 大家用 HBASE 存儲什麼數據?
流量詳單
117. 大家的 hive 處理數據能達到的指標是多少?
118.hadoop中RecorderReader的做用是什麼???
一、 在hadoop中定義的主要公用InputFormat中,哪一個是默認值? FileInputFormat
二、 兩個類TextInputFormat和KeyValueInputFormat的區別是什麼?
答:TextInputFormat主要是用來格式化輸入的文本文件的,KeyValueInputFormat則主要是用來指定輸入輸出的key,value類型的
三、 在一個運行的hadoop任務中,什麼是InputSplit?
InputSplit是InputFormat中的一個方法,主要是用來切割輸入文件的,將輸入文件切分紅多個小文件,
而後每一個小文件對應一個map任務
四、 Hadoop框架中文件拆分是怎麼調用的?
InputFormat --> TextInputFormat -->RecordReader --> LineRecordReader --> LineReader
五、 參考下列M/R系統的場景:hdfs塊大小爲64MB,輸入類爲FileInputFormat,有3個文件的大小分別爲64KB, 65MB, 127MB
會產生多少個maptask 4個 65M這個文件只有一個切片《緣由參見筆記彙總TextInputformat源碼分析部分》
八、 若是沒有自定義partitioner,那數據在被送達reducer前是如何被分區的?
hadoop有一個默認的分區類,HashPartioer類,經過對輸入的k2去hash值來確認map輸出的k2,v2送到哪個reduce中去執行。
十、分別舉例什麼狀況要使用 combiner,什麼狀況不使用?
求平均數的時候就不須要用combiner,由於不會減小reduce執行數量。在其餘的時候,能夠依據狀況,使用combiner,來減小map的輸出數量,減小拷貝到reduce的文件,從而減輕reduce的壓力,節省網絡開銷,提高執行效率
十一、Hadoop中job和tasks之間的區別是什麼?
Job是咱們對一個完整的mapreduce程序的抽象封裝
Task是job運行時,每個處理階段的具體實例,如map task,reduce task,maptask和reduce task都會有多個併發運行的實例
十二、hadoop中經過拆分任務到多個節點運行來實現並行計算,但某些節點運行較慢會拖慢整個任務的運行,hadoop採用全程機制應對這個狀況?
Speculate 推測執行
1四、有可能使hadoop任務輸出到多個目錄中嗎?若是能夠,怎麼作?
自定義outputformat或者用multioutputs工具
1五、如何爲一個hadoop任務設置mappers的數量?
Split機制
1六、如何爲一個hadoop任務設置要建立reduder的數量?
能夠經過代碼設置
具體設置多少個,應該根據硬件配置和業務處理的類型來決定
下面是HBASE我很是不懂的地方:
1.hbase怎麼預分區?
2.hbase怎麼給web前臺提供接口來訪問(HTABLE能夠提供對HTABLE的訪問,可是怎麼查詢同一條記錄的多個版本數據)?
3.htable API有沒有線程安全問題,在程序中是單例仍是多例?
4.咱們的hbase大概在公司業務中(主要是網上商城)大概4個表,幾個表簇,大概都存什麼樣的數據?
下面的Storm的問題:
1.metaq消息隊列 zookeeper集羣 storm集羣(包括zeromq,jzmq,和storm自己)就能夠完成對商城推薦系統功能嗎?還有沒有其餘的中間件?
mahout
2.storm怎麼完成對單詞的計數?
下文引用自神之子《hadoop面試可能遇到的問題》
Q1. Name the most common InputFormats defined in Hadoop? Which one is default ?
Following 2 are most common InputFormats defined in Hadoop
- TextInputFormat
- KeyValueInputFormat
- SequenceFileInputFormat
Q2. What is the difference betweenTextInputFormatand KeyValueInputFormat class
TextInputFormat:It reads lines of text files and provides the offset of the line as key to theMapper and actual line as Value to the mapper
KeyValueInputFormat:Reads text file and parses lines into key, val pairs. Everything up to thefirst tab character is sent as key to the Mapper and the remainder of the lineis sent as value to the mapper.
Q3. What is InputSplit in Hadoop
When a hadoop job is run, it splits input files into chunksand assign each split to a mapper to process. This is called Input Split
Q4. How is the splitting of file invokedin Hadoop Framework
It is invoked by the Hadoop framework by runninggetInputSplit()method of the Input format class (like FileInputFormat) definedby the user
Q5. Consider case scenario: In M/R system,
- HDFS block size is 64MB
- Input format isFileInputFormat
- We have 3 files ofsize 64K, 65Mb and 127Mb
then how many input splits will be madeby Hadoop framework?
Hadoop will make 5splits as follows
- 1 split for 64K files
- 2 splits for 65Mb files
- 2 splits for 127Mb file
Q6. What is the purpose of RecordReaderin Hadoop
The InputSplithas defined a slice of work,but does not describe how to access it. The RecordReaderclass actually loadsthe data from its source and converts it into (key, value) pairs suitable forreading by the Mapper. The RecordReader instance is defined by theInputFormat
Q7. After the Map phase finishes,the hadoop framework does"Partitioning, Shuffle and sort". Explain what happens in this phase?
- Partitioning
Partitioning is the process of determiningwhich reducer instance will receive which intermediate keys and values. Eachmapper must determine for all of its output (key, value) pairs which reducerwill receive them. It is necessary that for any key, regardless of which mapperinstance generated it, the destination partition is the same
- Shuffle
After the first map tasks have completed,the nodes may still be performing several more map tasks each. But they alsobegin exchanging the intermediate outputs from the map tasks to where they arerequired by the reducers. This process of moving map outputs to the reducers isknown as shuffling.
- Sort
Each reduce task is responsible forreducing the values associated with several intermediate keys. The set of intermediatekeys on a single node is automatically sorted by Hadoop before they are presented tothe Reducer
Q9. If no custom partitioner is defined inthe hadoop then how is datapartitioned before its sent to the reducer
The default partitioner computes a hashvalue for the key and assigns the partition based on this result
Q10. What is a Combiner
The Combiner is a "mini-reduce"process which operates only on data generated by a mapper. The Combiner willreceive as input all data emitted by the Mapper instances on a given node. Theoutput from the Combiner is then sent to the Reducers, instead of the outputfrom the Mappers.
Q11. Give an example scenario where a cobiner can be usedand where it cannot be used
There can be several examples following are the mostcommon ones
- Scenario where you can use combiner
Getting list of distinct words in a file
- Scenario where you cannot use a combiner
Calculating mean of a list of numbers
Q12. What is job tracker
Job Tracker is the service within Hadoop that runs Map Reduce jobs onthe cluster
Q13. What are some typical functions ofJob Tracker
The following are some typical tasks ofJob Tracker
- Accepts jobs from clients
- It talks to the NameNode todetermine the location of the data
- It locates TaskTracker nodes withavailable slots at or near the data
- It submits the work to the chosenTask Tracker nodes and monitors progress of each task by receiving heartbeatsignals from Task tracker
Q14. What is task tracker
Task Tracker is a node in the cluster thataccepts tasks like Map, Reduce and Shuffle operations - from a JobTracker
Q15. Whats the relationship between Jobsand Tasks in Hadoop
One job is broken down into one or manytasks in Hadoop.
Q16. Suppose Hadoop spawned 100 tasks for a job and one of the taskfailed. What willhadoop do ?
It will restart the task again on someother task tracker and only if the task fails more than 4 (default setting andcan be changed) times will it kill the job
Q17. Hadoop achievesparallelism by dividing the tasks across many nodes, it is possible for a fewslow nodes to rate-limit the rest of the program and slow down the program.What mechanism Hadoop providesto combat this
Speculative Execution
Q18. How does speculative execution worksin Hadoop
Job tracker makes different task trackersprocess same input. When tasks complete, they announce this fact to the JobTracker. Whichever copy of a task finishes first becomes the definitive copy.If other copies were executing speculatively, Hadoop tells the Task Trackers to abandon the tasksand discard their outputs. The Reducers then receive their inputs fromwhichever Mapper completed successfully, first.
Q19. Using command line in Linux, how willyou
- see all jobs running in the hadoop cluster
- kill a job
- hadoop job-list
- hadoop job-kill jobid
Q20. What is Hadoop Streaming
Streaming is a generic API that allowsprograms written in virtually any language to be used asHadoop Mapper and Reducerimplementations
Q21. What is the characteristic of streamingAPI that makes it flexible run map reduce jobs in languages like perl, ruby,awk etc.
Hadoop Streamingallows to use arbitrary programs for the Mapper and Reducer phases of a MapReduce job by having both Mappers and Reducers receive their input on stdin andemit output (key, value) pairs on stdout.
Q22. Whats is Distributed Cache in Hadoop
Distributed Cache is a facility provided by the Map/Reduce framework to cachefiles (text, archives, jars and so on) needed by applications during executionof the job. The framework will copy the necessary files to the slave nodebefore any tasks for the job are executed on that node.
Q23. What is the benifit of Distributedcache, why can we just have the file in HDFS and have the application read it
This is because distributed cache is much faster. It copies the file to alltrackers at the start of the job. Now if the task tracker runs 10 or 100mappers or reducer, it will use the same copy of distributed cache. On theother hand, if you put code in file to read it from HDFS in the MR job thenevery mapper will try to access it from HDFS hence if a task tracker run 100map jobs then it will try to read this file 100 times from HDFS. Also HDFS isnot very efficient when used like this.
Q.24 What mechanism does Hadoop frameworkprovides to synchronize changes made in Distribution Cache during runtime ofthe application
This is a trick questions.There is no such mechanism. Distributed Cache by design is read only during thetime of Job execution
Q25. Have you ever used Counters in Hadoop.Give us an example scenario
Anybody who claims to have worked on a Hadoop projectis expected to use counters
Q26. Is it possible to provide multiple input to Hadoop? If yes then how can you give multipledirectories as input to the Hadoop job
Yes, The input format class provides methods to add multiple directories asinput to a Hadoop job
Q27. Is it possible to have Hadoop joboutput in multiple directories. If yes then how
Yes, by using Multiple Outputs class
Q28. What will a hadoop jobdo if you try to run it with an output directory that is already present? Willit
- overwrite it
- warn you and continue
- throw an exception and exit
The hadoop job willthrow an exception and exit.
Q29. How can you set an arbitary number of mappers to be created for ajob in Hadoop
This is a trick question. You cannot set it
Q30. How can you set an arbitary number of reducers to be created for ajob in Hadoop You can either do it progamatically by using method setNumReduceTasksin theJobConfclass or set it up as a configuration setting