1.簡要的描述一下如何安裝一個apache開原版的hadoop,無需列出完整步驟。java
1.建立hadoop用戶.node
2.setup修改IP.mysql
3.安裝javaJdk,而且修改etc/profile文件,配置java的環境變量.算法
4.修改host的文件域名sql
5.安裝SSH免密碼通訊。數據庫
6.解壓hadoop包.apache
7配置conf文件下的hadoop-env.sh.core-site.sh.mapre-site.sh.hdfs-site.shapi
8配置hadoop環境變量數組
9.hadoop格式化hadoopnamenode-format緩存
10.啓動hadoopstart-all
2.請列出正常工做的hadoop集羣中hadoop都分別須要啓動那些進程,他們分別是什麼,做用是什麼?
hadoop1.X
namenode:管理集羣,並記錄datanode文件的信息.
Secnodnamenode:能夠作冷備,對必定範圍的數據作快照備份。
Datenode:存儲數據
:管理任務,並將任務分配給tasktracker。
Tasktracker:任務執行方.
Hadoop2.x
NameNode:
ResourceManager:資源調度器,它按照必定的約束條件(好比隊列容量限制等)將集羣中的資源分配給各個應用程序
DataNode:
NodeManager:是YARN中每一個節點上的代理,它管理Hadoop集羣中單個計算節點,包括與ResourceManger保持通訊,監督Container的生命週期管理,監控每一個Container的資源使用(內存、CPU等)狀況,追蹤節點健康情況,管理日誌和不一樣應用程序用到的附屬服務
SecondaryNameNode
3.請寫出一下執行的命令
(1)殺死一個job
(2)刪除hdfs上/tmp/aaa目錄
(3)加入一個新的存儲節點和刪除一個計算節點須要刷新到集羣的狀態命令
答案:(1)haoopjob-list拿到job-idhadoopjob-killjob-id
(2)hadoopfs-rmr/tmp/aaa
(3)加新節點時:hadoop-deamon.shstartdatenode
Hadoop-deamon.shstarttasktracker
刪除節點時:hadoopmradmin-refreshnodes
Hadoopdfsadmin-refreshnodes
4.請列出你所知道的hadoop調度器,簡要說明其工做方法
答案:Fifoschedular:默認,先進先出原則。
Capacityschedular:計算能力調度器,選擇佔用最小、優先高級的先執行,以此類推。
Fairschedular: 公平調度,全部job具備相同的資源。
5.Hive有那些方式保存元數據的,各有說明特色。
答案:三種:內存數據庫derby挺小不經常使用
本地mysql經常使用
遠程端mysql。不經常使用
6.簡述hadoop怎麼去實現二級排序的?
答案:經常使用方法是value放進key中,實現一個key組合,而後自定義key排序(爲key實現一個WritetableCompabla)
7.簡述mapreduce中combiner,partition的做用.
答案:combiner:實現的功能跟reduce差很少,接受map的值,通過計算後給reduce,他的key,value類型跟redice徹底同樣,當reduce業務複雜時能夠用,不過他貌似是操做本機的數據
Partition:將輸出的結果分別保存在不一樣的文件中。。
8.Hive內部表與外部表的區別?
答案:一、在導入數據到外部表,數據並無移動到本身的數據倉庫目錄下,也就是說外部表中的數據並非由它本身來管理的!而表則不同;
二、在刪除表的時候,Hive將會把屬於表的元數據和數據所有刪掉;而刪除外部表的時候,Hive僅僅刪除外部表的元數據,數據是不會刪除的!
9.Hbase的rowkey怎麼建立比較好,列簇怎麼建立比較好?
答案1.rowkey,咱們知道rowkey是行的主鍵,並且hbase只能用個rowkey,或者一個rowkey範圍即scan來查找數據。因此rowkey的設計是相當重要的,關係到你應用層的查詢效率。咱們知道,rowkey是以字典順序排序的。而存儲的字節碼,字典排序,咱們知道,若是是字母,那就是字母的順序,好比,有兩個rowkey,rowkey1:aaa222,rowkey2:bbb111,那麼rowkey1是排在rowkey2前面的,由於按字典,a排在b前面,若是rowkey2的第一位也是a,那麼就根據第二位來比較,若是還相同,則比較第三爲,後面一樣。這個理解了,咱們在根據rowkey範圍查詢的時候,咱們通常是知道startRowkey,若是咱們經過scan只傳startRowKey:d開頭的,那麼查詢的是全部比d大的都查了,而咱們只須要d開頭的數據,那就要經過endRowKey來限制。咱們能夠經過設定endRowKey爲:d開頭,後面的根據你的rowkey組合來設定,通常是加比startKey大一位。好比說rowkey設計爲:用戶ID-日期,那麼查某個用戶某天的數據,startKEY爲3231-20121212,endKey爲:3231+201213,那麼你查到的就是用戶爲3231在20121212這一天的數據。
2.columnkey
columnkey是第二維,數據按rowkey字典排序後,若是rowkey相同,則是根據columnkey來排序的,也是按字典排序。
咱們在設計table的時候要學會利用這一點。好比咱們的收件箱。咱們有時候須要按主題排序,那咱們就能夠把主題這設置爲咱們的columnkey,即設計爲columnFamily+主題.,這樣的設計。
3.timestamp
timestamp時間戳,是第三維,這是個按降序排序的,即最新的數據排在最前面。這個就沒有什麼說的了。網上其餘的博客也提到比較多。
10.用mapreduce怎麼處理數據傾斜的問題?
1.增長reduce的jvm內存
2.增長reduce個數
3.customerpartition
4.其餘優化的討論.
5.reducesortmerge排序算法的討論
6.正在實現中的hiveskewedjoin.
7.pipeline
8.distinct
9.index尤爲是bitmapindex
11.Hbase的內部機制是什麼?
在HMaster、RegionServer內部,建立了RpcServer實例,並與Client三者之間實現了Rpc調用,HBase0.95內部引入了Google-Protobuf做爲中間數據組織方式,並在Protobuf提供的Rpc接口之上,實現了基於服務的Rpc實現,本文詳細闡述了HBase-Rpc實現細節。
HBase的RPCProtocol
在HMaster、RegionServer內部,實現了rpc多個protocol來完成管理和應用邏輯,具體以下protocol以下:
HMaster支持的Rpc協議:
MasterMonitorProtocol,Client與Master之間的通訊,Master是RpcServer端,主要實現HBase集羣監控的目的。
MasterAdminProtocol,Client與Master之間的通訊,Master是RpcServer端,主要實現HBase表格的管理。例如TableSchema的更改,Table-Region的遷移、合併、下線(Offline)、上線(Online)以及負載平衡,以及Table的刪除、快照等相關功能。
RegionServerStatusProtoco,RegionServer與Master之間的通訊,Master是RpcServer端,負責提供RegionServer向HMaster狀態彙報的服務。
RegionServer支持的Rpc協議:
ClientProtocol,Client與RegionServer之間的通訊,RegionServer是RpcServer端,主要實現用戶的讀寫請求。例如get、multiGet、mutate、scan、bulkLoadHFile、執行Coprocessor等。
AdminProtocols,Client與RegionServer之間的通訊,RegionServer是RpcServer端,主要實現Region、服務、文件的管理。例如storefile信息、Region的操做、WAL操做、Server的開關等。
12.HDFS的數據壓縮算法?
Hadoop中經常使用的壓縮算法有bzip二、gzip、lzo、snappy,其中lzo、snappy須要操做系統安裝native庫才能夠支持
13.Mapreduce的調度模式?
MapReduce的做業調度並無很高的實時性的要求,本着最大吞吐的原則去設計的,因此MapReduce默認採用的調度策略是FIFO(基於優先級隊列實現的FIFO,不是純粹的FIFO,這樣每次h),這種策略顯然不是可搶佔式的調度,因此帶來的問題就是高優先級的任務會被先前已經在運行而且還要運行好久的低優先級的做業給堵塞住。
別的選擇:FairScheduler和CapacityScheduler
14.Hbase過濾器的實現原則?
客戶端建立包含過濾器Filter的Scan。
Scan經過RPC被髮送給RegionServer,在服務器端執行過濾操做。
Scan的做用域是region,因此一個RegionServer有多個region的話,Scan將被髮送到每一個region
你必須知道的是,HBase裏的一行數據對應一或者多個KeyValue。再來看看流程。
booleanfiterRowKey(byte[]buffer,intoffset,intlength):檢查rowkey。返回true表明被過濾掉,false進入下個方法。
ReturnCodefiterKeyValue(KeyValuev):檢查rowkey下特定的某一個KeyValue。它有五種返回值,常見的ReturnCode.INCLUDE表明結果中包含這個KeyValue,Skip表明不包含,繼續下處理一個KeyValue。
voidfilterRow(List<KeyValue>ignored):ignored是2裏面被過濾掉的KeyValue集合。
booleanfilterRow():返回true表明過濾掉當前行。
voidreset():迭代每個新的RowKey(步驟1)前調用此方法。
booleanfilterAllRemaining():返回true時表明終止整個掃描操做。如用戶找到了須要的全部數據,就在這裏能夠返回true。
15.Combine發生在那個過程當中?以及做用是什麼?
map->combine->partition->shuffle->reduce
減小Mapper任務輸出數據量,減小網絡傳輸時間,減小總體Job運行時間。
Combiner僅做用於單個Mapper任務,每一個Map任務可能會產生大量的輸出,Combiner的做用就是在Map端對輸出先作一次合併,以減小傳輸到Reducer的數據量。
Combiner最基本是實現本地Key的遞歸,Combiner具備相似本地的Reduce功能。若是不用Combiner,那麼全部的結果都是Reduce完成,效率會相對低下,使用Combiner先完成的Map會在本地聚合,提高速度
16.Hadoop的緩存機制?
分佈式緩存一個最重要的應用就是在進行join操做的時候,若是一個表很大,另外一個表很小很小,咱們就能夠將這個小表進行廣播處理,即每一個計算節點上都存一份,而後進行map端的鏈接操做,通過個人實驗驗證,這種狀況下處理效率大大高於通常的reduce端join,廣播處理就運用到了分佈式緩存的技術。
DistributedCache將拷貝緩存的文件到Slave節點在任何Job在節點上執行以前,文件在每一個Job中只會被拷貝一次,緩存的歸檔文件會被在Slave節點中解壓縮。將本地文件複製到HDFS中去,接着J哦不Client會經過addCacheFile()和addCacheArchive()方法告訴DistributedCache在HDFS中的位置。當文件存放到文地時,JobClient一樣得到DistributedCache來建立符號連接,其形式爲文件的URI加fragment標識。當用戶須要得到緩存中全部有效文件的列表時,JobConf的方法getLocalCacheFiles()和getLocalArchives()都返回一個指向本地文件路徑對象數組。
17.對zookeeper的瞭解?
基本上ZooKeeper提供了一個簡化並支持特定功能的分佈式文件系統接口,加上數據同步,變動通知,客戶端Cache等輔助機制。基於這樣的接口,用戶能夠本身在此之上構建邏輯,來實現各類分佈式系統系統工做所需的各類功能,如配置管理,名稱服務,Master選舉,同步,鎖等,相似於google的Chubby
18.Shell如何判斷文件是否存在?
#!/bin/sh
echo"請輸入你要判斷的文件的完整路徑:"
readfilepath
if[-f$filepath];
then
echo"文件存在!"
echo"文件在$filepath"
else
echo"文件不存在或者您輸入的路徑有誤"
fi
19.Mapreduce中排序發生在哪幾個階段,這些排序是否能夠避免?爲何?
一個mapreduce做業有map階段和reduce階段二部分組成,這兩個階段會對數據排序,從這個意義來講。Mapreduce框架本質就是一個DistributedSort。在map階段,mapTask會在本地磁盤輸出一個按照key排序的文件,在reduce階段,每一個reduceTask會對收到的數據進行排序,這樣數據便按照key分紅了若干組,以後以組爲單位交給reduce處理。若是不適用combiner,仍是能夠排序的,只是爲了減輕reduce端排序的負載。
20.hive中Orderby,Sortby,Dristributeby,ClusterBy的做用和用法
orderby
orderby會對輸入作全局排序,所以只有一個reducer(多個reducer沒法保證全局有序)
只有一個reducer,會致使當輸入規模較大時,須要較長的計算時間。
sortby
sortby不是全局排序,其在數據進入reducer前完成排序.
所以,若是用sortby進行排序,而且設置mapred.reduce.tasks>1,則sortby只保證每一個reducer的輸出有序,不保證全局有序
distributeby
按照指定的字段對數據進行劃分到不一樣的輸出reduce /文件中。
ClusterBy
clusterby除了具備distributeby的功能外還兼具sortby的功能。