1、事實表主要分成幾種:
1、事務事實表:又稱作原子事實表,主要是用來描述業務過程,跟蹤控件或者時間上某點的度量事件,保存的是最原子的數據
2、周期事實表:以一個周期作為一個時間間隔,用來記錄事實,一個周期可以是每天、每周、每月、每年等。
3、累計快照事實表:用來描述過程開始和過程結束之間的關鍵步驟事件,覆蓋過程的整個生命周期,通常具有多個日期字段來記錄關鍵時間點,當過程隨著生命周期不斷的變化時,記錄也會隨著生命的周期變化而被修改。
2、數倉建模的規范
數倉分層,阿里主要分成了五層,分別是ods、dwd、dim、dws、ads層,每一層都有自己的一個單獨的作用
ods層的主要的作用就是將數據從數據源采集過來,對數據來說,基本上是不做任何的處理。
dwd層這層的主要的作用就是ods層的數據采集過來,在這層會對數據做一些處理,例如說在這層會對一些空的數據進行過濾,對于用戶的手機號、身份證號碼進行加密的操作等。
dim層主要存儲的是一些維度數據,就是一些不怎么變化的數據,例如說一些省份的名稱是不會發生改變的。
dws層的主要的作用就是對數據進行匯總,構建寬表,對維度表進行維度退化的操作
ads層的主要的作用就是計算一些指標,對外使用構建好的寬表,以便計算指標。
在構建寬表的時候需要注意的是禁止逆向調用,需要避免同層調用、還需要避免跨層調用
3、將數據從ods層采集到dwd層主要的操作有哪些
對數據進行清洗,過濾一些空數據,對敏感數據進行脫敏操作。又是也會做一些維度退化。
4、 寬表的設定
做寬表實際上就是做join,實際上就是做維度退化,把維度表中的數據退化到事實表中。
5、? 什么是維度退化
就是將維度表退化到事實表中,例如說一個訂單表,是一個事實表,還有一個就是商品的信息表,是維度表,將來進行展示的時候,需要展示的商品的所有的信息,就類似于join,將維度表關聯到事實表中。
6、什么是維度表
主要存放的就是一些不怎么變化的數據表,就比如說一些地域的省份的名稱就不會發生改變。
7、什么事實表
?有度量值的表,就是哪些需要需要參與計算的一些表,就比如說訂單表中會有金額、數量等信息。
8、hdfs中的組件的作用:
hdfs中的組件主要包括namenode、datanode、SecondaryNameNode分別的作用:
namenode:主要的作用就是存儲元數據,也是接收客戶端的一些讀寫數據的請求。
datanode:是hdfs中的真實存儲數據的地方,會與namenode保持保持心跳機制。
SecondaryNameNode:主要的作用就是用來合并日志文件,下次hadoop會根據這個合并的文件啟動。將hadoop中的edit logs文件合并到fismage文件中。
9、hadoop不適合存儲小文件,以及解決方法:
不適合存儲小文件的原因:
首先小文件的數量變多,那么namenode的壓力就會變大,因為元數據是存儲在namenode中,可能會導致namenode出現宕機。其次就是計算的資源消耗會比較大,小文件越多,map任務的數量就會越多,此時消耗的計算資源就會比較多。
解決方法:
1、使用har歸檔,hadoop archive(har),是一個高效的將小文件放入到hdfs塊中的文件存檔工具,它能夠將多個小文件打包成一個HAR文件
例如:
在本地準備兩個小文件:
cat >
user1.txt<<EOF1,tom,male,162,jerry,male,10EOFcat >
user2.txt<<EOF101,jack,male,19102,rose,female,18EOF>將本地的文件put到hdfs中
hdfs dfs -put user.* /foo/bar/對某個目錄/foo/bar下的所有小文件存檔成/outputdir/zoo.har:
hadoop archive -archiveName foo.har -p /foo/bar/outputdir查看文件:
hdfs dfs -ls har:///user/zoo/foo.har
但是需要注意的是,對小文件進行存檔的時候,原來的小文件是不會被刪除的,需要用戶進行手動刪除。?
2、使用Sequence file 由一個二進制key/value組成,如果key為小文件的名稱,那么value就是文件的內容,可以將大批的小文件合并成一個大文件。
3、CombineFileinputFormat(針對hive表中的小文件數合并處理)
是一種新的inputformat,用于將多個文件合并成一個單獨的split,在map和reduce處理之前進行合并小文件。
4、開啟JVM重用
有小文件的時候需要開啟JVM重用,會在任務執行前將所有需要的資源進行申請,當任務只想完成后在釋放資源。
<property> <name>mapreduce.job.jvm.numtasks</name> <value>10</value>
<description>
How many tasks to run per jvm,if set to -1 ,there is no limit
</description>
</property>
5、將本地的小文件進行合并,再將文件上傳到hdfs中。(appenToFile)
將本地的多個小文件上傳到hdfs中,可以通過hdfs的客戶端的appendToFile命令對小文件進行合并
在本地準備兩個文件:
cat
>user1.txt<<EOF1,tom,male,162,jerry,male,10EOFcat >user2.txt<<EOF101,jack,male,19102,rose,female,18EOF使用appendToFile合并小文件
hdfs dfs -appendToFile user1.txt user2.txt /test/upload/merged_user.txt# 查看
hdfs dfs -cat /test/upload/merged_user.txt
6、合并hdfs中的小文件,下載到本地(getmerge)
可以通過hdfs中的命令getmerge,將多個小文件進行合并,在下載到本地。
# 先上傳小文件到
hdfs dfs -put user1.txt user2.txt /test/upload
# 下載,同時合并:
hdfs dfs -getmerge /test/upload/user*.txt ./merged_user.txt
10、hive與mysql的區別:
11、hive的四個by的區別:
12、自定UDF的步驟:
?UDF函數解析公共字段,?UDTF函數解析事件字段 ,?定義UDF:繼承UDF,重寫evaluate?法
13、hbase的架構,每一個組件的作用:
hbase的架構主要包括zookeeper、regionserver、region、memstore、storefile、hmaster、hlog
zookeeper作用:
1、保證在任何的時候,集群中只含有一個hmaster(hbase也是一個主從架構的,支持高可用)
2、存儲所有的region的尋址入口,用戶需要訪問數據,就需要向zookeeper發送請求,獲取元數據的元數據表的地址信息,返回給客戶端,客戶端與對應的regionserver建立連接
3、實時監控regionserver的上線和下線,實時向hmaster進行報告。
hmaster作用:
1、為regionserver分配region
2、監控region server,發現失敗的region server,重新分配region
3、管理用戶對表的增刪改。
regionserver作用:
1、regionserver用來維護region,負責接受region的io
2、region server負責監控region,對于那個變大的region進行切分。
hlog作用:
就是hadoop中的有個Sequence File,Sequence File 的Key是 HLogKey對象,HLogKey中記錄了寫入數據的歸屬信息,除了table和 region名字外,同時還包括sequence number和timestamp,timestamp是” 寫入時間”,sequence number的起始值為0,或者是最近一次存入文件系 統sequence number。HLog SequeceFile的Value是HBase的KeyValue對象,即對應HFile中的 KeyValue
region作用:?
hbase會自動的將表水平劃分成多個region,每一個region中都存儲一串連續的數據,首先一張表一開始只含有一個region,但是隨著數據的不斷的插入,region就會不斷的增大,當達到一定的闕值的時候(默認是128M),region就會等分成兩個region,當表中的行不斷的增加,就會有越來越多的region,被regionserver多管理。
memstore作用:
1、一個region由多個store組成,一個store對應一個CF(列簇)
2、store包括位于內存中的memstore和位于磁盤的storefile寫操作先寫入 memstore,當memstore中的數據達到某個閾值,hregionserver會啟動 flashcache進程寫入storefile,每次寫入形成單獨的一個storefile
3、當storefile文件的數量增長到一定閾值后,系統會進行合并(minor、 major compaction),在合并過程中會進行版本合并和刪除工作 (majar),形成更大的storefile。
4、當一個region所有storefile的大小和超過一定閾值后,會把當前的region 分割為兩個,并由hmaster分配到相應的regionserver服務器,實現負載均衡。
5、客戶端檢索數據,先在memstore找,找不到再找storefile
6、HRegion是HBase中分布式存儲和負載均衡的最小單元。最小單元就表 示不同的HRegion可以分布在不同的HRegion server上。
7、HRegion由一個或者多個Store組成,每個store保存一個columns family。
8、每個Strore又由一個memStore和0至多個StoreFile組成。
14、spark中的一些轉化算子和行為算子
轉化算子 :map、gruopby、groupbykey、reducebukey
行為算子:foreach、foreachpartition、take、top、count
15、persist與cache的區別
persist(持久化):在大數據處理的框架中,persists是將rdd或者是dataframe持久化到內存中,或者是持久化到磁盤中,以便在后續的操作中重復中這些數據而不需要在沖重新計算,持久化是用來提高性能,在使用相同的數據的時候,比較明顯,可以選擇不同級別的持久化,例如:MEMORY_ONLY
、DISK_ONLY
、MEMORY_AND_DISK
cache(緩存):在類似的spark這樣的分布式計算框架中,cache的主要的作用是將數據緩存到內存中,以便以后可以快速的訪問。
兩者的區別:
1、持久化的方式不同:persists既可以將數據緩存到內存中,也可以將數據緩存到磁盤中。
2、使用的方式不同:persists是一種比較通用的持久化的方式,可以選擇不同的緩存級別,然而對于cache來說,它是persists的一種的特殊情況,將數據持久化到內存中。
16、dataframe、dataset、rdd的區別
1、RDD
RDD是spark中最早引入的抽象數據類型,代表的是一個彈性分布式數據集。
RDD是面向對象的,可以包含任何類型的java、scala、python對象
2、dataframe
是基于RDD的高級抽象,代表的是一張表格化的數據結構,類似于關系型數據庫中的表。
dataframe具有優化的執行計劃,可以提高新性能。
dataframe通常用于結構化數據的處理,支持sql操作,列式操作,dataframe API等。
3、dataset
結合了rdd面向對象的風格和dsataframe的查詢優化的特點
dataset是類型安全的,允許使用強類型的API,可以在編譯的時候捕獲編譯的錯誤。
17、flink中的插槽
主要是用來資源隔離,因為在flink中,每一個task都是在taskmanager中運行,solt就是最小的資源單位,每一個solt中接受一個task,防止在多個task在運行的時候搶占資源。
18、flink中的組件以及每一個的作用
client、jobmanager、taskmanager
client:
構建和配置flink作業,設置作業的參數并將任務通過flink run提交到jobmanager上去執行。
jobmanager:
主要的作用是負責接收客戶端的作業提交的請求,負責整體任務的資源調度,協調任務之間的數據交換,同時也負責整體的狀態維護。
taskmanager:
主要是負責接受jobmanager分配的任務,并執行這些任務,并負責任務之間的數據傳輸并將計算的結果返回。
19、窗口
滑動窗口、滾動窗口、會話窗口、統計窗口
會話窗口:在定義的時候于滑動窗口、滾動窗口的區別是在定義窗口的時候是基于事件之間的間隔,而不是固定的時間段或者是固定數量的事件。
20、事實表設置的主要的流程:
1、選擇業務 2、聲明粒度 3、確定維度 4、確定事實 5、冗余維度