Hadoop大數據面試題( 全)
前言
有一句話叫做三人行必有我師,其實做為一個開發者,有一個學習的氛圍跟一個交流圈子特別重要這是一個我的大數據交流學習群531629188不管你是小白還是大牛歡迎入駐,正在求職的也可以加入,大家一起交流學習,話糙理不糙,互相學習,共同進步,一起加油吧。
1.0 簡要描述如何安裝配置apache的一個開源hadoop,只描述即可,無需列出具體步驟,列出具體步驟更好。
答:第一題:1使用root賬戶登錄
2 修改IP
3 修改host主機名
4 配置SSH免密碼登錄
5 關閉防火墻
6 安裝JDK
6 解壓hadoop安裝包
7 配置hadoop的核心文件 hadoop-env.sh,core-site.xml , mapred-site.xml , hdfs-site.xml
8 配置hadoop環境變量
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實現非遞歸二分查詢
-
public class BinarySearchClass
-
{
-
public static int binary_search(int[] array, int value)
-
{
-
int beginIndex = 0;// 低位下標
-
int endIndex = array.length - 1;// 高位下標
-
int midIndex = -1;
-
while (beginIndex <= endIndex) {
midIndex = beginIndex + (endIndex - beginIndex) / 2;//防止溢出
-
if (value == array[midIndex]) {
return midIndex;
-
} else if (value < array[midIndex]) {
endIndex = midIndex - 1;
-
} else {
beginIndex = midIndex + 1;
-
}
}
-
return -1;
//找到了,返回找到的數值的下標,沒找到,返回-1
-
}
//start 提示:自動閱卷起始唯一標識,請勿刪除或增加。
-
public static void main(String[] args)
{
-
System.out.println("Start...");
int[] myArray = new int[] { 1, 2, 3, 5, 6, 7, 8, 9 };
-
System.out.println("查找數字8的下標:");
System.out.println(binary_search(myArray, 8));
-
}
//end //提示:自動閱卷結束唯一標識,請勿刪除或增加。
- }
12.0 請簡述mapreduce中的combine和partition的作用
答:combiner是發生在map的最後一個階段,其原理也是一個小型的reducer,主要作用是減少輸出到reduce的數據量,緩解網絡傳輸瓶頸,提高reducer的執行效率。
partition的主要作用將map階段產生的所有kv對分配給不同的reducer task處理,可以將reduce階段的處理負載進行分攤
13.0 hive內部表和外部表的區別
Hive 向內部表導入數據時,會將數據移動到數據倉庫指向的路徑;若是外部表,數據的具體存放目錄由用戶建表時指定
在刪除表的時候,內部表的元數據和數據會被一起刪除,
而外部表只刪除元數據,不刪除數據。
這樣外部表相對來說更加安全些,數據組織也更加靈活,方便共享源數據。
- Hbase的rowKey怎麽創建比較好?列簇怎麽創建比較好?
答:
rowKey最好要創建有規則的rowKey,即最好是有序的。
經常需要批量讀取的數據應該讓他們的rowkey連續;
將經常需要作為條件查詢的關鍵詞組織到rowkey中;
列族的創建:
按照業務特點,把數據歸類,不同類別的放在不同列族
- 用mapreduce怎麽處理數據傾斜問題
本質:讓各分區的數據分布均勻
可以根據業務特點,設置合適的partition策略
如果事先根本不知道數據的分布規律,利用隨機抽樣器抽樣後生成partition策略再處理
- hadoop框架怎麽來優化
答:
可以從很多方面來進行:比如hdfs怎麽優化,mapreduce程序怎麽優化,yarn的job調度怎麽優化,hbase優化,hive優化。。。。。。。
- hbase內部機制是什麽
答:
Hbase是一個能適應聯機業務的數據庫系統
物理存儲:hbase的持久化數據是存放在hdfs上
存儲管理:一個表是劃分為很多region的,這些region分布式地存放在很多regionserver上
Region內部還可以劃分為store,store內部有memstore和storefile
版本管理:hbase中的數據更新本質上是不斷追加新的版本,通過compact操作來做版本間的文件合並
Region的split
集群管理:zookeeper + hmaster(職責) + hregionserver(職責)
- 我們在開發分布式計算job的時候,是否可以去掉reduce階段
答:可以,例如我們的集群就是為了存儲文件而設計的,不涉及到數據的計算,就可以將mapReduce都省掉。
比如,流量運營項目中的行為軌跡增強功能部分
怎麽樣才能實現去掉reduce階段
去掉之後就不排序了,不進行shuffle操作了
19 hadoop中常用的數據壓縮算法
答:
Lzo
Gzip
Default
Snapyy
如果要對數據進行壓縮,最好是將原始數據轉為SequenceFile 或者 Parquet File(spark)
- mapreduce的調度模式(題意模糊,可以理解為yarn的調度模式,也可以理解為mr的內部工作流程)
答: appmaster作為調度主管,管理maptask和reducetask
Appmaster負責啟動、監控maptask和reducetask
Maptask處理完成之後,appmaster會監控到,然後將其輸出結果通知給reducetask,然後reducetask從map端拉取文件,然後處理;
當reduce階段全部完成之後,appmaster還要向resourcemanager註銷自己
- hive底層與數據庫交互原理
答:
Hive的查詢功能是由hdfs + mapreduce結合起來實現的
Hive與mysql的關系:只是借用mysql來存儲hive中的表的元數據信息,稱為metastore
- hbase過濾器實現原則
答:可以說一下過濾器的父類(比較過濾器,專用過濾器)
過濾器有什麽用途:
增強hbase查詢數據的功能
減少服務端返回給客戶端的數據量
- reduce之後數據的輸出量有多大(結合具體場景,比如pi)
Sca階段的增強日誌(1.5T---2T)
過濾性質的mr程序,輸出比輸入少
解析性質的mr程序,輸出比輸入多(找共同朋友)
- 現場出問題測試mapreduce掌握情況和hive的ql語言掌握情況
25.datanode在什麽情況下不會備份數據
答:在客戶端上傳文件時指定文件副本數量為1
26.combine出現在哪個過程
答:shuffle過程中
具體來說,是在maptask輸出的數據從內存溢出到磁盤,可能會調多次
Combiner使用時候要特別謹慎,不能影響最後的邏輯結果
- hdfs的體系結構
答:
集群架構:
namenode datanode secondarynamenode
(active namenode ,standby namenode)journalnode zkfc
內部工作機制:
數據是分布式存儲的
對外提供一個統一的目錄結構
對外提供一個具體的響應者(namenode)
數據的block機制,副本機制
Namenode和datanode的工作職責和機制
讀寫數據流程
- flush的過程
答:flush是在內存的基礎上進行的,首先寫入文件的時候,會先將文件寫到內存中,當內存寫滿的時候,一次性的將文件全部都寫到硬盤中去保存,並清空緩存中的文件,
- 什麽是隊列
答:是一種調度策略,機制是先進先出
- 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.請描述一下開發過程中如何對上面的程序進行性能分析,對性能分析進行優化的過程。
- 現有 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主要是運行我們的從節點。
-
hadoop參數調優
- pig , latin , hive語法有什麽不同
答:
- 描述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.假設公司要建一個數據中心,你會如何處理?
先進行需求調查分析
設計功能劃分
架構設計
吞吐量的估算
采用的技術類型
軟硬件選型
成本效益的分析
項目管理
擴展性
安全性,穩定性
-
單項選擇題
- 下面哪個程序負責 HDFS 數據存儲。 答案 C
a)NameNode b)Jobtracker c)Datanoded)secondaryNameNode e)tasktracker
- HDfS 中的 block 默認保存幾份? 答案 A
a)3 份 b)2 份 c)1 份 d)不確定
- 下列哪個程序通常與 NameNode 在一個節點啟動?
a)SecondaryNameNode b)DataNodec)TaskTracker d)Jobtracker e)zkfc
- Hadoop 作者 答案D
a)Martin Fowler b)Kent Beck c)Doug cutting
- HDFS 默認 Block Size 答案 B
a)32MB b)64MB c)128MB
- 下列哪項通常是集群的最主要瓶頸 答案d
a)CPU b)網絡 c)磁盤 d)內存
- 關於 SecondaryNameNode 哪項是正確的? 答案C
a)它是NameNode的熱備
b)它對內存沒有要求
c)它的目的是幫助 NameNode 合並編輯日誌,減少 NameNode 啟動時間
d)SecondaryNameNode 應與 NameNode 部署到一個節點
多選題:
- 下列哪項可以作為集群的管理工具 答案 ABCD (此題出題有誤)
a)Puppet b)Pdsh c)Cloudera Manager d)Zookeeper
- 配置機架感知的下面哪項正確
答案 ABC
a)如果一個機架出問題,不會影響數據讀寫
b)寫入數據的時候會寫到不同機架的 DataNode 中
c)MapReduce 會根據機架獲取離自己比較近的網絡數據
- Client 端上傳文件的時候下列哪項正確 答案BC
a)數據經過 NameNode 傳遞給 DataNode
b)Client 端將文件切分為 Block,依次上傳
c)Client 只上傳數據到一臺 DataNode,然後由 NameNode 負責 Block 復制工作
- 下列哪個是 Hadoop 運行的模式 答案 ABC
a)單機版 b)偽分布式 c)分布式
- Cloudera 提供哪幾種安裝 CDH 的方法 答案 ABCD
a)Cloudera manager b)Tar ball c)Yum d)Rpm
判斷題:全部都是錯誤滴
-
Ganglia 不僅可以進行監控,也可以進行告警。( )
-
Block Size 是不可以修改的。( )
-
Nagios 不可以監控 Hadoop 集群,因為它不提供 Hadoop 支持。( )
-
如果 NameNode 意外終止, SecondaryNameNode 會接替它使集群繼續工作。( )
-
Cloudera CDH 是需要付費使用的。( )
-
Hadoop 是 Java 開發的,所以 MapReduce 只支持 Java 語言編寫。( )
-
Hadoop 支持數據的隨機讀寫。( )
- NameNode 負責管理 metadata, client 端每次讀寫請求,它都會從磁盤中讀取或則
會寫入 metadata 信息並反饋 client 端。( )
-
NameNode 本地磁盤保存了 Block 的位置信息。( )
-
DataNode 通過長連接與 NameNode 保持通信。( )
-
Hadoop 自身具有嚴格的權限管理和安全措施保障集群正常運行。( )
-
Slave節點要存儲數據,所以它的磁盤越大越好。( )
-
hadoop dfsadmin –report 命令用於檢測 HDFS 損壞塊。( )
-
Hadoop 默認調度器策略為 FIFO( )
-
集群內每個節點都應該配 RAID,這樣避免單磁盤損壞,影響整個節點運行。( )
-
因為 HDFS 有多個副本,所以 NameNode 是不存在單點問題的。( )
-
每個 map 槽(進程)就是一個線程。( )
-
Mapreduce 的 input split 就是一個 block。( )
-
NameNode的默認Web UI 端口是 50030,它通過 jetty 啟動的 Web 服務。( )
-
Hadoop 環境變量中的 HADOOP_HEAPSIZE 用於設置所有 Hadoop 守護線程的內存。它默認是200 GB。( )
- DataNode 首次加入 cluster 的時候,如果 log中報告不兼容文件版本,那需要
NameNode執行“Hadoop namenode -format”操作格式化磁盤。( )
- 談談 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任務。
-
說說值對象與引用對象的區別?
- 談談你對反射機制的理解及其用途?
答:java中的反射,首先我們寫好的類,經過編譯之後就編程了.class文件,我們可以獲取這個類的.class文件,獲取之後,再來操作這個類。這個就是java的反射機制。
- 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這個類。
- 文件大小默認為 64M,改為 128M 有啥影響?
答:更改文件的block塊大小,需要根據我們的實際生產中來更改block的大小,如果block定義的太小,大的文件都會被切分成太多的小文件,減慢用戶上傳效率,如果block定義的太大,那麽太多的小文件可能都會存到一個block塊中,雖然不浪費硬盤資源,可是還是會增加namenode的管理內存壓力。
- RPC 原理?
答:
1.調用客戶端句柄;執行傳送參數
2.調用本地系統內核發送網絡消息
-
消息傳送到遠程主機
-
服務器句柄得到消息並取得參數
-
執行遠程過程
-
執行的過程將結果返回服務器句柄
-
服務器句柄返回結果,調用遠程系統內核
-
消息傳回本地主機
-
客戶句柄由內核接收消息
-
客戶接收句柄返回的數據
- 對 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
- zookeeper 優點,用在什麽場合
答:極大方便分布式應用的開發;(輕量,成本低,性能好,穩定性和可靠性高)
75.把公鑰追加到授權文件的命令?該命令是否在 root 用戶下執行?
答:ssh-copy-id
哪個用戶需要做免密登陸就在哪個用戶身份下執行
- HadoopHA 集群中各個服務的啟動和關閉的順序?
答:
- 在 hadoop 開發過程中使用過哪些算法?其應用場景是什麽?
答:排序,分組,topk,join,group
- 在實際工作中使用過哪些集群的運維工具,請分別闡述期作用。
答:nmon ganglia nagios
- 一臺機器如何應對那麽多的請求訪問,高並發到底怎麽實現,一個請求怎麽產生的,
在服務端怎麽處理的,最後怎麽返回給用戶的,整個的環節操作系統是怎麽控制的?
- java 是傳值還是傳址?
答:引用傳遞。傳址
- 問:你們的服務器有多少臺?
100多臺
- 問:你們服務器的內存多大?
128G或者64G的
- hbase 怎麽預分區?
建表時可以通過shell命令預分區,也可以在代碼中建表做預分區
《具體命令詳見筆記匯總》
- hbase 怎麽給 web 前臺提供接口來訪問(HTABLE可以提供對 HBase的訪問,但是怎麽查詢同一條記錄的多個版本數據)?
答:使用HTable來提供對HBase的訪問,可以使用時間戳來記錄一條數據的多個版本。
- .htable API 有沒有線程安全問題,在程序中是單例還是多例?
多例:當多線程去訪問同一個表的時候會有。
- 你們的數據是用什麽導入到數據庫的?導入到什麽數據庫?
處理完成之後的導出:利用hive 處理完成之後的數據,通過sqoop 導出到 mysql 數據庫
中,以供報表層使用。
- 你們業務數據量多大?有多少行數據?(面試了三家,都問這個問題)
開發時使用的是部分數據,不是全量數據,有將近一億行(8、9 千萬,具體不詳,一般開
發中也沒人會特別關心這個問題)
- 你們處理數據是直接讀數據庫的數據還是讀文本數據?
將日誌數據導入到 hdfs 之後進行處理
- 你們寫 hive 的 hql 語句,大概有多少條?
不清楚,我自己寫的時候也沒有做過統計
- 你們提交的 job 任務大概有多少個?這些job 執行完大概用多少時間?(面試了三家,都問這個問題)
沒統計過,加上測試的,會有很多
Sca階段,一小時運行一個job,處理時間約12分鐘
Etl階段,有2千多個job,從淩晨12:00開始次第執行,到早上5點左右全部跑完
- hive 跟 hbase 的區別是?
答:Hive和Hbase是兩種基於Hadoop的不同技術--Hive是一種類SQL的引擎,並且運行MapReduce任務,Hbase是一種在Hadoop之上的NoSQL 的Key/vale數據庫。當然,這兩種工具是可以同時使用的。就像用Google來搜索,用FaceBook進行社交一樣,Hive可以用來進行統計查詢,HBase可以用來進行實時查詢,數據也可以從Hive寫到Hbase,設置再從Hbase寫回Hive。
- 你在項目中主要的工作任務是?
Leader
預處理系統、手機位置實時查詢系統,詳單系統,sca行為軌跡增強子系統,內容識別中的模板匹配抽取系統
設計、架構、技術選型、質量把控,進度節點把握。。。。。。
- 你在項目中遇到了哪些難題,是怎麽解決的?
Storm獲取實時位置信息動態端口的需求
- job 的運行流程(提交一個 job 的流程)?
102Hadoop 生態圈中各種框架的運用場景?
- hive 中的壓縮格式 RCFile、TextFile、SequenceFile
[M5] 各有什麽區別?
以上 3 種格式一樣大的文件哪個占用空間大小..等等
采用RCfile的格式讀取的數據量(373.94MB)遠遠小於sequenceFile的讀取量(2.59GB)
2、執行速度前者(68秒)比後者(194秒)快很多
從以上的運行進度看,snappy的執行進度遠遠高於bz的執行進度。
在hive中使用壓縮需要靈活的方式,如果是數據源的話,采用RCFile+bz或RCFile+gz的方式,這樣可以很大程度上節省磁盤空間;而在計算的過程中,為了不影響執行的速度,可以浪費一點磁盤空間,建議采用RCFile+snappy的方式,這樣可以整體提升hive的執行速度。
至於lzo的方式,也可以在計算過程中使用,只不過綜合考慮(速度和壓縮比)還是考慮snappy適宜。
104假如:Flume 收集到的數據很多個小文件,我需要寫 MR 處理時將這些文件合並
(是在 MR 中進行優化,不讓一個小文件一個 MapReduce)
他們公司主要做的是中國電信的流量計費為主,專門寫 MR。
-
解釋“hadoop”和“hadoop 生態系統”兩個概念
- MapReduce 2.0”與“YARN”是否等同,嘗試解釋說明
MapReduce 2.0 --àmapreduce + yarn
- MapReduce 2.0 中,MRAppMaster 主要作用是什麽,MRAppMaster 如何實現任務
容錯的?
-
為什麽會產生 yarn,它解決了什麽問題,有什麽優勢?
- 數據備份,你們是多少份,如果數據超過存儲容量,你們怎麽處理?
3份,多加幾個節點
- 怎麽提升多個 JOB 同時執行帶來的壓力,如何優化,說說思路?
增加運算能力
- 你們用 HBASE 存儲什麽數據?
流量詳單
- 你們的 hive 處理數據能達到的指標是多少?
118.hadoop中RecorderReader的作用是什麽???
1、 在hadoop中定義的主要公用InputFormat中,哪個是默認值? FileInputFormat
2、 兩個類TextInputFormat和KeyValueInputFormat的區別是什麽?
答:TextInputFormat主要是用來格式化輸入的文本文件的,KeyValueInputFormat則主要是用來指定輸入輸出的key,value類型的
3、 在一個運行的hadoop任務中,什麽是InputSplit?
InputSplit是InputFormat中的一個方法,主要是用來切割輸入文件的,將輸入文件切分成多個小文件,
然後每個小文件對應一個map任務
4、 Hadoop框架中文件拆分是怎麽調用的?
InputFormat --> TextInputFormat -->RecordReader --> LineRecordReader --> LineReader
5、 參考下列M/R系統的場景:hdfs塊大小為64MB,輸入類為FileInputFormat,有3個文件的大小分別為64KB, 65MB, 127MB
會產生多少個maptask 4個 65M這個文件只有一個切片《原因參見筆記匯總TextInputformat源碼分析部分》
8、 如果沒有自定義partitioner,那數據在被送達reducer前是如何被分區的?
hadoop有一個默認的分區類,HashPartioer類,通過對輸入的k2去hash值來確認map輸出的k2,v2送到哪一個reduce中去執行。
10、分別舉例什麽情況要使用 combiner,什麽情況不使用?
求平均數的時候就不需要用combiner,因為不會減少reduce執行數量。在其他的時候,可以依據情況,使用combiner,來減少map的輸出數量,減少拷貝到reduce的文件,從而減輕reduce的壓力,節省網絡開銷,提升執行效率
11、Hadoop中job和tasks之間的區別是什麽?
Job是我們對一個完整的mapreduce程序的抽象封裝
Task是job運行時,每一個處理階段的具體實例,如map task,reduce task,maptask和reduce task都會有多個並發運行的實例
12、hadoop中通過拆分任務到多個節點運行來實現並行計算,但某些節點運行較慢會拖慢整個任務的運行,hadoop采用全程機制應對這個情況?
Speculate 推測執行
14、有可能使hadoop任務輸出到多個目錄中嗎?如果可以,怎麽做?
自定義outputformat或者用multioutputs工具
15、如何為一個hadoop任務設置mappers的數量?
Split機制
16、如何為一個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
Hadoop大數據面試題( 全)