1、把數據倉庫從傳統關系數據庫轉到hadoop有什么優勢?
- 原關系存儲方式昂貴
- 空間有限
- hadoop支持結構化(例如 RDBMS),非結構化(例如 images,PDF,docs )和半結構化(例如 logs,XMLs)的數據可以以可擴展和容錯的方式存儲在較便宜的商品機器中。
- 可以通過批處理作業和近實時(即,NRT,200 毫秒至 2 秒)流(例如 Flume 和 Kafka)來攝取數據。
- 數據可以使用諸如 Spark 和 Impala 之類的工具以低延遲(即低於 100 毫秒)的能力查詢。
- 可以存儲以兆兆字節到千兆字節為單位的較大數據量。
2、大數據解決方案的關鍵步驟是什么?
提取數據,存儲數據(即數據建模)和處理數據(即數據加工,數據轉換和查詢數據)。
3、下面哪個程序負責 HDFS 數據存儲。
a)NameNode b)Jobtracker c)Datanode d)SecondaryNameNode e)Tasktracker
答案C datanode
4、 下列哪個程序通常與 NameNode 在一個節點啟動?
a)SecondaryNameNode b)DataNode c)TaskTracker d)Jobtracker
答案D
分析:
hadoop的集群是基於master/slave模式,namenode和jobtracker屬於master,datanode和tasktracker屬於slave,master只有一個,而slave有多個
SecondaryNameNode內存需求和NameNode在一個數量級上,所以通常secondary NameNode(運行在單獨的物理機器上)和NameNode運行在不同的機器上。
JobTracker和TaskTracker
JobTracker 對應於 NameNode
TaskTracker 對應於 DataNode
DataNode 和NameNode 是針對數據存放來而言的
JobTracker和TaskTracker是對於MapReduce執行而言的
5、關於 SecondaryNameNode 哪項是正確的?
a)它是 NameNode 的熱備 b)它對內存沒有要求
c)它的目的是幫助 NameNode 合並編輯日志,減少 NameNode 啟動時間
d)SecondaryNameNode 應與 NameNode 部署到一個節點
6、NameNode和DataNode作用是什么?
NameNode管理文件系統的元數據,DataNode存儲實際的數據。客戶端Client通過同NameNode和DataNodes的交互訪問文件系統。客戶端聯系NameNode以獲取文件的元數據,而真正的文件I/O操作是直接和DataNode進行交互的。
NameNode負責管理文件系統的命名空間、集群配置信息和存儲塊的復制等。NameNode會將文件系統的Meta-data存儲在內存中,這些信息主要包括了文件信息、每一個文件對應的文件塊的信息和每一個文件塊在DataNode的信息等
DataNode是文件存儲的基本單元,它將Block存儲在本地文件系統中,保存了Block的Meta-data,同時周期性地將所有存在的Block信息發送給NameNode。
注意:client直接和datanode交互哦
http://www.aboutyun.com/thread-5845-1-1.html
7、講一下Client讀取DFS文件的順序流
1) Client向NameNode發起文件讀取的請求。
2) NameNode返回文件存儲的DataNode的信息。
3) Client讀取文件信息。
8、講一下Client寫入DFS文件的順序流
1) Client向NameNode發起文件寫入的請求。
2) NameNode根據文件大小和文件塊配置情況,返回給Client它所管理部分DataNode的信息。
3) Client將文件划分為多個Block,根據DataNode的地址信息,按順序寫入到每一個DataNode塊中。
9、hadoop主要的端口都有啥
- 默認端口 設置位置
- 9000 namenode
- 8020 namenode
- 8021 JT RPC
- 50030 mapred.job.tracker.http.address JobTracker administrative web GUI
- 50070 dfs.http.address NameNode administrative web GUI
- 50010 dfs.datanode.address DataNode control port
- 50020 dfs.datanode.ipc.address DataNode IPC port, used for block transfer
- 50060 mapred.task.tracker.http.address Per TaskTracker web interface
- 50075 dfs.datanode.http.address Per DataNode web interface
- 50090 dfs.secondary.http.address Per secondary NameNode web interface
10、DFS文件系統中如何查看文件的命令是?
hadoop fs -cat /user/output/outfile
11、把文件系統中的文件存入DFS文件系統的命令是?
hadoop fs -put /home/file.txt /user/input
12、把DFS文件系統的文件目錄寫到本地文件系統目錄的命令是?
hadoop fs -get /user/localfile/ /home/hadoop_dir/
13、Hadoop 的核心配置文件是什么?
Hadoop 的核心配置通過兩個 xml 文件來完成:1,hadoop-default.xml;2,hadoop-site.xml。
14、hadoop的三種調度器分別是什么?
1) 默認調度器FIFO
hadoop中默認的調度器,采用先進先出的原則
2) 計算能力調度器CapacityScheduler
選擇占用資源小,優先級高的先執行
3) 公平調度器FairScheduler
同一隊列中的作業公平共享隊列中所有資源
15、簡單介紹一下hive
hive存的是和hdfs的映射關系,hive是邏輯上的數據倉庫,實際操作的都是hdfs上的文件,HQL就是用sql語法來寫的mr程序。
可以看做是一次寫入多次讀取的操作,可以看成是ETL工具。
16、Sqoop是什么?
hadoop生態圈上的數據傳輸工具。
可以將關系型數據庫的數據導入非結構化的hdfs、hive或者bbase中,也可以將hdfs中的數據導出到關系型數據庫或者文本文件中。
使用的是mr程序來執行任務,使用jdbc和關系型數據庫進行交互。
import原理:通過指定的分隔符進行數據切分,將分片傳入各個map中,在map任務中在每行數據進行寫入處理沒有reduce。
export原理:根據要操作的表名生成一個java類,並讀取其元數據信息和分隔符對非結構化的數據進行匹配,多個map作業同時執行寫入關系型數據庫
17、聊聊MapReduce
離線計算框架,過程分為split map shuffle reduce四個過程
架構節點有:Jobtracker TaskTracker
Split將文件分割,傳輸到mapper,mapper接收KV形式的數據,經過處理,再傳到shuffle過程。
Shuffle先進行HashPartition或者自定義的partition,會有數據傾斜和reduce的負載均衡問題;再進行排序,默認按字典排序;為減少mapper輸出數據,再根據key進行合並,相同key的數據value會被合並;最后分組形成(key,value{})形式的數據,輸出到下一階段,Reduce輸入的數據就變成了,key+迭代器形式的數據,再進行處理。
18、聊聊Hadoop性能調優?
調優可以通過系統配置、程序編寫和作業調度算法來進行。
hdfs的block.size可以調到128/256(網絡很好的情況下,默認為64)
調優的大頭:
mapred.map.tasks、mapred.reduce.tasks設置mr任務數(默認都是1)
mapred.tasktracker.map.tasks.maximum每台機器上的最大map任務數
mapred.tasktracker.reduce.tasks.maximum每台機器上的最大reduce任務數
mapred.reduce.slowstart.completed.maps配置reduce任務在map任務完成到百分之幾的時候開始進入
這個幾個參數要看實際節點的情況進行配置,reduce任務是在33%的時候完成copy,要在這之前完成map任務,(map可以提前完成)
mapred.compress.map.output,mapred.output.compress配置壓縮項,消耗cpu提升網絡和磁盤io
合理利用combiner
注意重用writable對象
19、hive中如何添加分區?
可以通過改變表格將分區添加到表格中。讓我們假設我們有一個名為 員工 的表,其中包含Id,Name,Salary,Designation等字段。
以下查詢用於將分區添加到employee表。
hive> ALTER TABLE employee
> ADD PARTITION (year=’2013’)
> location '/2012/part2012';
20、如何向hive中插入數據
在hive中,一般使用LOAD DATA插入數據,數據來源一般為兩種,一種是從本地文件系統,第二種是從hadoop文件系統。
LOCAL是標識符指定本地路徑,它是可選的;
OVERWRITE 是可選的,覆蓋表中的數據;
PARTITION 也是可選的。
測試:
將下列數據插入到employee表中,數據格式為每個字段中間使用tab分割,每行使用回車,存儲到一個txt文件中,
1201 Gopal 45000 Technical manager 1202 Manisha 45000 Proof reader 1203 lisong 50000 what is you 1204 xiaohau 88888 abcdefg 1205 xiaoming 99999 hehehehe
執行導入語句:
LOAD DATA LOCAL INPATH '/home/hadoop/HivePy/employee.txt' OVERWRITE INTO TABLE userdb.employee;
