1. 下列哪項通常是集群的最主要瓶頸(C)
A. CPU
B. 網絡
C. 磁盤IO
D. 內存
2. 下列哪項可以作為集群的管理工具?(C)
A.Puppet
B.Pdsh
C.ClouderaManager
D.Zookeeper
3. 下列哪個是Hadoop 運行的模式?(ABC)
A. 單機版
B. 偽分布式
C. 完全分布式
4. 列舉幾個hadoop 生態圈的組件並做簡要描述
Zookeeper:是一個開源的分布式應用程序協調服務,基於zookeeper 可以實現同步服務, 配置維
護,命名服務。
Flume:一個高可用的,高可靠的,分布式的海量日志采集、聚合和傳輸的系統。
Hbase:是一個分布式的、面向列的開源數據庫, 利用Hadoop HDFS 作為其存儲系統。
Hive:基於Hadoop 的一個數據倉庫工具,可以將結構化的數據檔映射為一張數據庫表, 並提供
簡單的sql 查詢功能,可以將sql 語句轉換為MapReduce 任務進行運行。
6. 解釋“hadoop”和“hadoop 生態系統”兩個概念。
Hadoop 是指Hadoop 框架本身;hadoop 生態系統,不僅包含hadoop,還包括保證hadoop框架正常高效運行其他框架,比如zookeeper、Flume、Hbase、Hive、Sqoop 等輔助框架
7. 簡要描述如何安裝配置apache 的一個開源Hadoop,只描述即可,無需列出具體步驟,列出具體步驟更好。
1) 使用root 賬戶登錄
2) 修改IP
3) 修改host 主機名
4) 配置SSH 免密碼登錄
5) 關閉防火牆
6) 安裝JDK
7) 解壓hadoop 安裝包
8) 配置hadoop 的核心文件hadoop-env.sh,core-site.xml , mapred-site.xml ,
hdfs-site.xml
9) 配置hadoop 環境變量
10) 格式化hadoop namenode-format
11)啟動節點start-all.sh
8. Hadoop 中需要哪些配置文件,其作用是什么?
1) core-site.xml:
fs.defaultFS:hdfs://cluster1(域名),這里的值指的是默認的HDFS 路徑。
hadoop.tmp.dir:/export/data/hadoop_tmp,這里的路徑默認是NameNode、DataNode、
secondaryNamenode 等存放數據的公共目錄。用戶也可以自己單獨指定這三類節點的目錄。
ha.zookeeper.quorum:hadoop101:2181,hadoop102:2181,hadoop103:2181,這里是
ZooKeeper 集群的地址和端口。注意,數量一定是奇數,且不少於三個節點。
2)hadoop-env.sh:
只需設置jdk 的安裝路徑,如:export JAVA_HOME=/usr/local/jdk。
3)hdfs-site.xml:
dfs.replication:他決定着系統里面的文件塊的數據備份個數,默認為3 個。
dfs.data.dir:datanode 節點存儲在文件系統的目錄。
dfs.name.dir:是namenode 節點存儲hadoop 文件系統信息的本地系統路徑。
4)mapred-site.xml:
mapreduce.framework.name: yarn 指定mr 運行在yarn 上。
9. 請列出正常工作的Hadoop 集群中Hadoop 都分別需要啟動哪些進程,它們的作用分別是什么?
NameNode 它是hadoop 中的主服務器,管理文件系統名稱空間和對集群中存儲的文件的訪問,
保存有metadate。
SecondaryNameNode 它不是namenode 的冗余守護進程,而是提供周期檢查點和清理任務。幫
助NN 合並editslog,減少NN 啟動時間。
DataNode 它負責管理連接到節點的存儲(一個集群中可以有多個節點)。每個存儲數據的節點運
行一個datanode 守護進程。
ResourceManager(JobTracker)JobTracker 負責調度DataNode 上的工作。每個DataNode 有一
個TaskTracker,它們執行實際工作。
NodeManager(TaskTracker)執行任務
DFSZKFailoverController 高可用時它負責監控NN 的狀態,並及時的把狀態信息寫入ZK 。它
通過一個獨立線程周期性的調用NN 上的一個特定接口來獲取NN 的健康狀態。FC 也有選擇誰作
為Active NN 的權利,因為最多只有兩個節點,目前選擇策略還比較簡單(先到先得,輪換)。
JournalNode 高可用情況下存放namenode 的editlog 文件.
10. 簡述Hadoop 的幾個默認端口及其含義
dfs.namenode.http-address:50070
SecondaryNameNode 輔助名稱節點端口號:50090
dfs.datanode.address:50010
fs.defaultFS:8020 或者9000
yarn.resourcemanager.webapp.address:8088
11. 簡述hadoop實現Join的幾種方法
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階段進行實際的連接操作。
map side join
之所以存在reduce side join,是因為在map階段不能獲取所有需要的join字段,即:同一個key對應的字段可能位於不同map中。Reduce side join是非常低效的,因為shuffle階段要進行大量的數據傳輸。
Map side join是針對以下場景進行的優化:兩個待連接表中,有一個表非常大,而另一個表非常小,以至於小表可以直接存放到內存中。這樣,我們可以將小表復制多份,讓每個map task內存中存在一份(比如存放到hash table中),然后只掃描大表:對於大表中的每一條記錄key/value,在hash table中查找是否有相同的key的記錄,如果有,則連接后輸出即可。
為了支持文件的復制,Hadoop提供了一個類DistributedCache,使用該類的方法如下:
(1)用戶使用靜態方法DistributedCache.addCacheFile()指定要復制的文件,它的參數是文件的URI(如果是HDFS上的文件,可以這樣:hdfs://namenode:9000/home/XXX/file,其中9000是自己配置的NameNode端口號)。JobTracker在作業啟動之前會獲取這個URI列表,並將相應的文件拷貝到各個TaskTracker的本地磁盤上。
(2)用戶使用DistributedCache.getLocalCacheFiles()方法獲取文件目錄,並使用標准的文件讀寫API讀取相應的文件。
SemiJoin
SemiJoin,也叫半連接,是從分布式數據庫中借鑒過來的方法。它的產生動機是:對於reduce side join,跨機器的數據傳輸量非常大,這成了join操作的一個瓶頸,如果能夠在map端過濾掉不會參加join操作的數據,則可以大大節省網絡IO。
實現方法很簡單:選取一個小表,假設是File1,將其參與join的key抽取出來,保存到文件File3中,File3文件一般很小,可以放到內存中。在map階段,使用DistributedCache將File3復制到各個TaskTracker上,然后將File2中不在File3中的key對應的記錄過濾掉,剩下的reduce階段的工作與reduce side join相同。
