大數據面試筆試題

1、HBase適合用的場景?

答:成熟的數據分析主題,查詢模式已經確立,並且不會輕易改變。傳統給的關係型數據庫已經無法承受負荷,高速插入,大量讀取。適合海量的,但同時也使簡單的查詢條件(例如:key-value)。

注:半結構化或非結構化數據:對於數據結構字段不夠確定或雜亂無章很難按一個概念去進行抽取的數據適合用HBase。當業務發展需要增加存儲比如一個用戶的email、phone、address信息時,RDBMS需求停機維護,而Hbase支持動態增加。記錄非常稀疏:RDBMS的行有多少列是固定的,爲null的列浪費了存儲空間。而如上文提到的,HBase爲null的Column不會被存儲,這樣既節省了空間又提高了讀性能。

2、HBase的查詢方式?

答:HBase的查詢實現只提供兩種方式:1、按照指定RowKey獲取唯一一條記錄,get方法(org.apache.hadoop.hbase.client.Get).2、按照指定的條件獲取一批記錄,scan方法(org.apache.hbase.client.Scan).

3、數據寫入HBase的幾種方式?

答:put、putlist、bulkload

注:HBase上Regionserver的內存會分爲兩個部分,一部分作爲Memstore,主要用來寫;另外一部分作爲BlockCache,主要用於讀。寫請求會先寫入Memstore,Regionserver會給每個region提供一個Memstore,當Memstore滿64MB以後,會啓動flush刷新到磁盤,當Memstore的總大小超過限制(heapsize*hbase.regionserver.global.memstore.upperLimit*0.9)時,會強行啓動flush金正,從最大的Memstore開始flush直到低於限制。讀請求先到Memstore中查數據,查不到就到BlockCache中查,再查不到就回到磁盤上讀,並且把讀的結果放入到BlockCache。由於BlockCache採取的LRU策略,因此BlockCache達到上限(heapsize*hfile.block.cache.size*0.85)後,會啓動淘汰機制,淘汰掉最老的一批數據。一個Regionserver上有一個BlockCache和N個Memstore,它們的大小之和不能大於等於heapsize*0.8,否則HBase不能啓動,默認BlockCache爲0.2.而Memstore爲0.4.對於注重都響應時間的系統,可以將BlockCache設大一些,比如設置BlockCache=0.4,Memstore=0.39,以加大緩存的命中率。

4、hive sql作業中Mapreduce任務輸入數據量較少,但是map任務輸出又比較多,如何解決?

答:調小mapreduce.input.fileinputformat.split.maxsize參數以增加map任務數。

5、hive的分區和分桶在hdfs層面時什麼?

答:文件夾和文件。

6、SparkContext的概念

答:Spark集羣的執行單位是Application。任何提交的任務都會產生一個Application。一個Application只會關聯上一個Spark上下文,也就是SparkContext。構建SparkContext時可以傳入Spark相關配置,也就是SparkConf。它可以用來指定Application的名稱,任務需要的CPU核數/內存大小,調優需要的配置等等.val conf = new SparkConf(); conf.setAppName("WorkCount");val sc = new SparkContext(conf),這三行語句創建了一個Spark上下文,並且運行時這個Application的名字就叫做WordCount。

7、Transformation的概念

答:顧名思義,Transformation就是把一個RDD轉換成另一個RDD。當然,光是拷貝長生一個新的RDD出來時沒有太大意義的,這裏的轉換實際上是RDD中元素的映射和轉換。有一點必須要注意的是RDD是隻讀的,一旦執行轉換,一定會生成一個新的RDD。 val words =lines.flatMap(_.split("\\s+")) flatMap是RDD衆多轉換中的一種,它的功能是把源RDD中元素映射成目的RDD中的0個或者多個元素。上面語句把以文本行爲元素的RDD轉換成了以單個單詞爲元素的RDD。

8、action的概念

答:“Action”可以簡單的理解成想要獲取結果時,而調用的API。val word Count= words.countByValue(),countByValue就是一個"Action",它的功能是統計RDD中每個元素出現的次數,得到一個元素及其出現次數的Map。返回結果時RDD的API是Transformation操作,返回結果不爲RDD的API就是Action

9、shuffle的概念

答:Spark中的shuffle是把一組無規則的數據機娘轉換成一組具有一定規則的數據。Spark計算模型是在分佈式的環境下計算的,這就不可能在單進程空間中容納所有的計算數據來進行計算,這樣數據就按照Key進行分區,分配成一塊一塊的小分區,打算分佈在集羣的哥哥進程的內存空間中,並不是所有計算算子都滿足按照一種方式分區進行計算。當需要對數據進行排序存儲時,就有了重新按照一定的規則對數據重新分許的必要,shuffle就是包裹在各種需要重分區的算子之下的一個對數據進行重新組合的過程。

10、廣播變量

答:Spark的另一種共享變量是廣播變量。通常情況下,當一個RDD的很多操作都需要使用driver中定義的變量時,每次操作,diver都要把變量發送給worker節點一次,如果這個變量中的數據很大的話,會產生很高的傳輸負載,導致執行效率降低。使用廣播變量,可以是程序高效地將一個很大的只讀數據發送給多個worker節點,而且對每個worker節點只需要傳輸一次,每次操作時,executor可以直接獲取本地保存的數據副本,不需要多次傳輸。

11、spark中transform算子和action算子區別

答:Transformation是得到一個新的RDD,方式有很多,比如從數據源生成一個新的RDD(如:textFile),從RDD生成一個新的RDD(如:map)。Action是得到一個計算的結果,結果可能時傳到driver端(如:collect),也可能時存到HDFS上(如:saveAsTextFile)。Transformation算子時一種懶操作,也就是說,這類算子不會馬上去執行,他們只是記錄數據集的一些轉換關係。只有當遇到Action操作時,纔會觸發數據計算。

12、RDD的概念

答:Spark中最主要的概念就是彈性分佈式數據集(Resilient distributed dataset,RDD),,它是元素的集合,劃分到集羣的各個節點上,可以被並行操作。RDD的創建可以從HDFS上的一個文件開始,或者通過轉換Master中已存在的Scala集合而來。RDD提供的API分爲兩類:Transformation和Action。

13、協處理器的原理

答:協處理器允許用戶在region服務器上運行自己的代碼,更準確的說法是允許用戶執行region級的操作,並且可以使用與RDBMS中觸發器類似的功能。在客戶端,用戶不用關心操作具體在哪裏執行,HBase的分佈式框架會幫助用戶把這些工作變得透明。有點類似MapReduce。

使用協處理器的好處顯而易見,可以將運算放到server端,減少通信開銷的同時還能有效地提高性能。

協處理的兩種類型:系統協處理器:可以全局導入region server上的所有數據表;表協處理器:用戶可以指定一張表使用協處理器。

協處理器框架爲了更好支持其行爲的靈活性,提供了兩個不同方面的插件。

觀察者(observer),類似於關係數據庫的觸發器(主動觸發),在一些特定時間發生的時候被執行。這些時間包括一些用戶產生的事件,也包括服務器內部產生的事件。

終端(endpoint),動態的終端有點像存儲過程。除了事件處理之外還需要將用戶自定義操作添加到服務器端。用戶代碼可以被部署到管理數據的服務器端。endpoint通過添加一些遠程調用來擴展RPC協議。

14、HBase什麼情況下關閉sync可能導致數據丟失。

答:(1)、一條數據沒有在寫完成HLog和內存之後,內存中的數據固化成HFile之前,如果Hlog所在的HDFS文件,該文件(或部分數據塊)3副本數的所有節點宕機了,剛好這些數據塊還在OS的緩存中,就有可能丟數據。(2)、一條數據固化成HFile,該HFile文件(或部分數據塊)在HSFS中3副本數據所有節點宕機了,並且這些數據塊還在OS中,就有可能丟數據。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章