轉載自:hadoop面試題
1.簡要描述如何安裝配置一個apache開源版hadoop,描述即可,列出步驟更好
1) 安裝JDK並配置環境變數(/etc/profile)
2) 關閉防火牆
3) 配置hosts檔案,方便hadoop通過主機名稱訪問(/etc/hosts)
4) 設定ssh免密碼登入
5) 解壓縮hadoop安裝包,並配置環境變數
6) 修改設定檔($HADOOP_HOME/conf)
hadoop-env.sh core-site.xml hdfs-site.xml mapred-site.xml Slaves
7) 格式化hdfs檔案系統 (hadoop namenode -format)
8) 啟動hadoop ($HADOOP_HOME/bin/start-all.sh) 9) 使用 jps 查看進程
2. 請列出正常工作的hadoop叢集中hadoop都需要啟動哪些進程,他們的作用分別是什麼。
1) NameNode: HDFS的守護進程,負責記錄檔案是如何分割成資料區塊,以及這些資料區塊分別被儲存到那些資料節點上,它的主要功能是對記憶體及IO進行集中管理
2) Secondary NameNode:輔助背景程式,與NameNode進行通訊,以便定期儲存HDFS中繼資料的快照。
3) DataNode:負責把HDFS資料區塊讀寫到本地的檔案系統。
4) JobTracker:負責分配task,並監控所有啟動並執行task。
5) TaskTracker:負責執行具體的task,並與JobTracker進行互動。
3. 啟動hadoop報如下錯誤,該如何解決。
error org.apache.hadoop.hdfs.server.namenode.NameNode
org.apache.hadoop.hdfs.server.common.inconsistentFSStateExceptio
n Directory /tmp/hadoop-root/dfs/name is in an inconsistent
state storage direction does not exist or is not accessible?
4. 請寫出以下執行命令
1)殺死一個job?
2)刪除hdfs上的/tmp/aaa目錄
3加入一個新的儲存節點和刪除一個計算節點需要重新整理叢集狀態命令。
5.請列出你所知道的hadoop調度器,並簡要說明其工作方法。
比較流行的三種調度器有:預設調度器FIFO,計算能力調度器CapacityScheduler,公平調度器Fair Scheduler
1) 預設調度器FIFO
hadoop中預設的調度器,採用先進先出的原則
2) 計算能力調度器CapacityScheduler
選擇佔用資源小,優先順序高的先執行
3) 公平調度器FairScheduler
同一隊列中的作業公平共用隊列中所有資源
6. 請列出在你以前工作中所使用過的開發mapreduce的語言。
7. 當前日誌採樣格式為
a,b,c,d
b,b,f,e
a,a,c,f 複製代碼
請用你最熟悉的語言編寫一個mapreduce,並計算第四列每個元素出現的個數
8.你認為用Java,Streaming,pipe方式開發mapreduce,各有哪些優缺點。
9.hive有哪些方式儲存中繼資料,各有哪些特點。
1) 記憶體資料庫derby,較小,不常用
2) 本地mysql,較常用
3) 遠程mysql,不常用
10.請簡述hadoop怎麼樣實現二級排序。
在Hadoop中,預設情況下是按照key進行排序,如果要按照value進行排序怎麼辦。
有兩種方法進行二次排序,分別為:buffer and in memory sort和 value-to-key conversion。
buffer and in memory sort
主要思想是:在reduce()函數中,將某個key對應的所有value儲存下來,然後進行排序。 這種方法最大的缺點是:可能會造成out of memory。
value-to-key conversion
主要思想是:將key和部分value拼接成一個組合key(實現WritableComparable介面或者調setSortComparatorClass函數),這樣reduce擷取的結果便是先按key排序,後按value排序的結果,需要注意的是,使用者需要自己實現Paritioner,以便只按照key進行資料劃分。Hadoop顯式的支援二次排序,在Configuration類中有個setGroupingComparatorClass()方法,可用於設定排序group的key值
http://dongxicheng.org/mapreduce/hadoop-join-two-tables/
11.簡述hadoop實現join的幾種方法。
1) reduce side join
reduce side join是一種最簡單的join方式,其主要思想如下:
在map階段,map函數同時讀取兩個檔案File1和File2,為了區分兩種來源的key/value資料對,對每條資料打一個標籤(tag),比如:tag=0表示來自檔案File1,tag=2表示來自檔案File2。即:map階段的主要任務是對不同檔案中的資料打標籤。
在reduce階段,reduce函數擷取key相同的來自File1和File2檔案的value list, 然後對於同一個key,對File1和File2中的資料進行join(笛卡爾乘積)。即:reduce階段進行實際的串連操作。