大數(shù)據(jù)開發(fā)面試題目

Hadoop

  1. 介紹 MapReduce 的運行過程 ,shuffle 過程

    如果在現(xiàn)場,我可以手繪 MapReduce 從 InputFormat 到 OutputFormat 的流程,一邊畫圖一邊說。如果講到環(huán)形緩沖區(qū)那里,是不是有很多調(diào)優(yōu)的方式. combiner 也可以考慮講一下。

  2. Hadoop 集群的搭建過程

    至少自己集群的配置. 框架的技術(shù)選型是不是都要清楚的明明白白。

  3. Hadoop 優(yōu)化

  • HDFS 小文件的影響 . 輸入輸入時的小文件的處理
  • Map 階段 和 Reudce 階段的調(diào)優(yōu)
  • 數(shù)據(jù)壓縮(LZO \Snappy) 和 存儲優(yōu)化(Orcfile) 關(guān)于壓縮怎么配的,幾種存儲格式有什么區(qū)別是不是都要搞清楚
  1. Hadoop集群HA實現(xiàn)

  2. Hadoop 調(diào)度器

    FIFO . Capacity Scheduler(容量調(diào)度器)和 Fair Sceduler(公平調(diào)度器)三種需要區(qū)分清楚,還有在實際開發(fā)環(huán)境中,一般不用FIFO哦。

  3. Hadoop 解決數(shù)據(jù)傾斜方法

  • 提前在 map 進(jìn)行 combine,減少傳輸?shù)臄?shù)據(jù)量
  • 導(dǎo)致數(shù)據(jù)傾斜的 key 加鹽. 提升 Reducer 并行度 ...
  1. Hadoop讀文件和寫文件流程

  2. Yarn 的 Job 提交流程

    步驟很多,理理清楚然后再由條理的進(jìn)行回答。

Hive

  1. Hive 和關(guān)系型數(shù)據(jù)庫比較

    數(shù)據(jù)存儲位置. 數(shù)據(jù)更新. 執(zhí)行延遲. 數(shù)據(jù)規(guī)模等方面來比較。

  2. Hive 元數(shù)據(jù)管理

    hive表中的數(shù)據(jù)是HDFS上的文件,可是hive怎么知道這些文件的內(nèi)容都對應(yīng)哪個字段,對應(yīng)哪個分區(qū)呢?就是hive的元數(shù)據(jù)管理著這一切。通常在hive-site.xml中的元數(shù)據(jù)庫配置成MySQL,替換Derby。

  3. 有沒有遇到數(shù)據(jù)傾斜的問題(場景. 解決方式)

    常規(guī)的數(shù)據(jù)解決方式,結(jié)合業(yè)務(wù),隨便講個三四種不過分吧。

  4. Hive 兩種類型的權(quán)限控制方式

  5. Hive UDF,UDTF,UDAF,窗口函數(shù)(row_number, rank,cube,rollup,lag,lead)

  6. Hive 的調(diào)優(yōu)

  • 壓縮存儲優(yōu)化
  • 表設(shè)計優(yōu)化
  • SQL參數(shù)優(yōu)化
  • SQL語句優(yōu)化 分四個方向,大概十幾種優(yōu)化的方式,自己都得做些了解吧
  1. Hive 分區(qū)和分桶的區(qū)別,內(nèi)部表和外部表的區(qū)別,怎么進(jìn)行動態(tài)分區(qū)

  2. Hive 幾種存儲方式的區(qū)別?

ORC:行分塊,列式存儲,壓縮快,存取快,壓縮率最高,RCfile升級版。然后再和其他三種存儲方式比較一下。

Flume

  1. Flume 組成,Put 事務(wù),Take 事務(wù)

    Source. Channel. Sink ,想想Flume的架構(gòu)。Taildir Source. Memory Channel什么的,各自適合用在什么場景下,有什么區(qū)別。

  2. Flume 自定義攔截器

    可以在講項目時講,算是一個小亮點,可以自定義ETL 攔截器和區(qū)分類型攔截器等等

  3. Flume Channel 選擇器

    Replicating Channel Selector (default)和Multiplexing Channel Selector 這兩種Selector的區(qū)別是:Replicating 會 將source過來的events發(fā)往所有channel,而 Multiplexing可以選擇該發(fā)往哪些Channel。

  4. Flume 調(diào)優(yōu)

    要知道flume-ng agent包括source. channel. sink三個部分,這三部分都運行在JVM上,而JVM運行在linux操作系統(tǒng)之上。因此,對于flume的性能調(diào)優(yōu),就是對這三部分及影響因素調(diào)優(yōu)。

Kafka

  1. Kafka 的架構(gòu)

  2. 關(guān)于 Kafka 為什么這么快

    順序?qū)懭? Memory Mapped Files. 零拷貝(Zero Copy). 批量發(fā)送和數(shù)據(jù)壓縮。

  3. Kafka 和其他消息隊列的區(qū)別

  4. Kafka 如何保證消息隊列不丟失?

    ACK 機(jī)制 . 設(shè)置分區(qū). 關(guān)閉 unclean leader 選舉等等。

  5. Kafka 消息數(shù)據(jù)積壓,Kafka 消費能力不足怎么處理

    如果是 Kafka 消費能力不足,則可以考慮增加 Topic 的分區(qū)數(shù),并且同時提升消費 組的消費者數(shù)量,消費者數(shù)=分區(qū)數(shù)。(兩者缺一不可) 如果是下游的數(shù)據(jù)處理不及時:提高每批次拉取的數(shù)量。批次拉取數(shù)據(jù)過少(拉取 數(shù)據(jù)/處理時間<生產(chǎn)速度),使處理的數(shù)據(jù)小于生產(chǎn)的數(shù)據(jù),也會造成數(shù)據(jù)積壓。

  6. Kafka producer consumer怎么實現(xiàn)at most once和exactly once(冪等計算和事務(wù))

  7. Kafka 高可用怎么實現(xiàn)的?

    副本數(shù)據(jù)同步策略. ISR. OSR. Leader 選舉機(jī)制(它的和Zookeeper的半數(shù)選舉機(jī)制可不同哦)。

  8. Kafka 數(shù)據(jù)重復(fù)

    冪等性+ack-1+事務(wù) Kafka 數(shù)據(jù)重復(fù),可以再下一級:SparkStreaming. redis 或者 hive 中 dwd 層去重,去重的手段:分組. 按照 id 開窗只取第一個值。

HBase

  1. RowKey 怎么設(shè)計的?

    三個設(shè)計原則,id+時間戳反轉(zhuǎn) 什么的,結(jié)合你的業(yè)務(wù)場景講講。

  2. 描述 HBase 中 scan 和 get 的功能以及實現(xiàn)的異同?

  3. 在HBase 中,是允許設(shè)置多個列簇的,但是為什么在實際生產(chǎn)中會設(shè)置很少的列簇呢?

  4. 列簇的數(shù)量對flush的影響 2. 列簇的數(shù)量對split的影響 3. 列簇的數(shù)量對compaction的影響 4. 列簇的數(shù)量對HDFS的影響 5. 列簇的數(shù)量對RegionServer內(nèi)存的影響 。根據(jù)實際生產(chǎn)需求,能夠用一個列簇解決的就盡量用一個列簇,當(dāng)兩個列簇的數(shù)量相差懸殊時,可以將其兩個列簇的數(shù)據(jù)拆分為兩個表的單個列簇。

  5. HBase 的存儲格式

    HBase中的每張表都通過行鍵按照一定的范圍被分割成多個子表(HRegion),默認(rèn)一個HRegion超過256M就要被分割成兩個,由HRegionServer管理,管理哪些HRegion由HMaster分配。

  6. HBase 的讀寫流程

  7. HBase 的優(yōu)化

  • 預(yù)分區(qū)
  • rowkey 優(yōu)化
  • 減少 Column Family 數(shù)量
  1. 關(guān)于HBase 數(shù)據(jù)熱點的問題

Spark

  1. Spark 有幾種部署方式?請分別簡要論述

    Spark 的運行模式有 Local(也稱單節(jié)點模式),Standalone(集群模式),Spark on Yarn(運行在Yarn上)有 yarn-client 和 yarn-cluster 兩種模式,主要區(qū)別在于:Driver 程序的運行節(jié)點。

  2. Spark on yarn cluster 作業(yè)提交的流程

  3. Spark 提交作業(yè)參數(shù)

  4. 如何理解 Spark 中的血統(tǒng)概念(RDD)

  5. Spark 調(diào)優(yōu)

    coalesce 和 repartition / BroadCast join 廣播 join / 控制 Spark reduce 緩存 調(diào)優(yōu) shuffle / 使用高性能算子 等等。

  6. Spark 劃分任務(wù)

    RDD任務(wù)切分中間分為:Application. Job. Stage和Task ,再詳細(xì)講述各自的聯(lián)系。

  7. Spark 寬窄依賴 ,reducebykey 和 groupbykey 的性能誰高?

    map. flatmap. union. filter ----> 窄依賴 groupByKey,reduceByKey,sortByKey,join 各種Bykey都是shuffle階段 -----> 寬依賴 reducebyKey會先在本地機(jī)器上進(jìn)行局部聚合,然后在移動數(shù)據(jù),進(jìn)行全局聚合 ---> 性能更好

  8. 分別簡述 Spark 中的緩存機(jī)制(cache 和 persist)與checkpoint 機(jī)制,并指出兩者的區(qū)別與聯(lián)系

    都是做 RDD 持久化的 cache:內(nèi)存,不會截斷血緣關(guān)系,使用計算過程中的數(shù)據(jù)緩存。checkpoint:磁盤,截斷血緣關(guān)系,在 ck 之前必須沒有任何任務(wù)提交才會生效,ck 過 程會額外提交一次任務(wù)。

  9. Spark 的緩存級別

    memory_only. disk_only. memory_Anddisk_only 像cache() 默認(rèn) memory_only 什么的。

  10. 某個 task 莫名其妙內(nèi)存溢出的情況

    這種情況下去定位出問題的代碼就比較容易了。我建議直接看 yarn-client 模式下本地log 的異常棧,或者是通過 YARN 查看 yarn-cluster 模式下的 log 中的異常棧。一般來說,通過異常棧信息就可以定位到你的代碼中哪一行發(fā)生了內(nèi)存溢出。然后在那行代碼附近找找,一般也會有 shuffle 類算子,此時很可能就是這個算子導(dǎo)致了數(shù)據(jù)傾斜。但是大家要注意的是,不能單純靠偶然的內(nèi)存溢出就判定發(fā)生了數(shù)據(jù)傾斜。因為自己編 寫的代碼的 bug,以及偶然出現(xiàn)的數(shù)據(jù)異常,也可能會導(dǎo)致內(nèi)存溢出。因此還是要按照上面所講的方法,通過 Spark Web UI 查看報錯的那個 stage 的各個 task 的運行時間以及分配的數(shù)據(jù)量,才能確定是否是由于數(shù)據(jù)傾斜才導(dǎo)致了這次內(nèi)存溢出。

  11. Spark 數(shù)據(jù)傾斜

    使用 Hive ETL 預(yù)處理數(shù)據(jù) . 過濾少數(shù)導(dǎo)致傾斜的 key . 提高 shuffle 操作的并行度 . 兩階段聚合(局部聚合+全局聚合) . 將 reduce join 轉(zhuǎn)為 map join . 使用隨機(jī)前綴和擴(kuò)容 RDD 進(jìn)行 join 等等,方法很多,大家可以再深入的了解。

  12. Spark 內(nèi)存溢出

    1 加內(nèi)存, 簡單粗暴
    2 將rdd的數(shù)據(jù)寫入磁盤不要保存在內(nèi)存之中
    3 如果是collect操作導(dǎo)致的內(nèi)存溢出, 可以增大 Driver的 memory 參數(shù)

  13. 簡述 Spark 中共享變量(廣播變量和累加器)的基本原理與用途

    累加器(accumulator)是 Spark 中提供的一種分布式的變量機(jī)制,其原理類似于 mapreduce,即分布式的改變,然后聚合這些改變。累加器的一個常見用途是在調(diào)試時對作業(yè)執(zhí)行過程中的事件進(jìn)行計數(shù)。而廣播變量用來高效分發(fā)較大的對象。

  14. 簡述 SparkSQL 中 RDD. DataFrame. DataSet 三者的區(qū)別與聯(lián)系?

  15. Spark Streaming 控制每秒消費數(shù)據(jù)的速度

    通過 spark.streaming.kafka.maxRatePerPartition 參數(shù)來設(shè)置 Spark Streaming 從 kafka 分區(qū)每秒拉取的條數(shù)。

  16. Spark Streaming 背壓機(jī)制

    把 spark.streaming.backpressure.enabled 參數(shù)設(shè)置為 ture,開啟背壓機(jī)制后 Spark Streaming 會根據(jù)延遲動態(tài)去 kafka 消費數(shù)據(jù),上限由 spark.streaming.kafka.maxRatePerPartition 參數(shù)控制,所以兩個參數(shù)一般會一起使用。

  17. SparkStreaming 有哪幾種方式消費 Kafka 中的數(shù)據(jù),它們之間的區(qū)別是什么?

    基于 Receiver 的方式 基于 Direct 的方式 -----> 簡化并行讀取 高性能

數(shù)倉

  1. 數(shù)據(jù)倉庫的模型設(shè)計

    結(jié)合業(yè)務(wù),對數(shù)倉設(shè)計的過程做個概述,例如我的就是常見的四層的一個模型,ODS. ODW... 層 ,這其中我對業(yè)務(wù)數(shù)據(jù)做了哪些操作,都得了然于心吧。

  2. 數(shù)倉質(zhì)量怎么監(jiān)控

    數(shù)據(jù)質(zhì)量管理系統(tǒng),主鍵唯一. 非空. 數(shù)據(jù)波動。

  3. 業(yè)務(wù)建模. 數(shù)據(jù)分析方法

  4. 有沒有遇到數(shù)據(jù)傾斜的問題(場景. 解決方式)

  5. 數(shù)倉規(guī)范設(shè)計哪些方面(字段. 維度,存儲壓縮. 數(shù)據(jù)保留機(jī)制)

  6. 數(shù)倉有用到增量表. 還是全量表?拉鏈表做過嗎?

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容