Build Cube流程主要分爲四個階段:
- 根據用戶的cube信息計算出多個cuboid文件
- 根據cuboid文件生成htable
- 更新cube信息
- 回收臨時文件
把構建Cube的來源表總行數寫到指定的HDFS文件中
2.流程二:生成中間臨時數據
這一步的操作是根據Cube設計中的定義生成原始數據,這裏會新創建一個Hive外部表,然後再根據Cube中定義的星型模型,查詢出維度(對於Derived類型的維度使用的是外鍵)和度量值並插入到新建的表中,標的數據文件(存儲在HDFS)作爲下一個子任務的輸入,它首先根據維度中的列和度量中作爲參數的列得到需要出現在該表中的列,然後執行三步hive操作。
(1)如果臨時表存在就刪除
(2)創建外部表
(3)插入數據
3.流程三:創建事實表的Distinct Columns文件
根據流程二中生成的hive臨時表作爲輸入,計算出表中的每一個出現在事實表中的維度和度量的distinct值,並寫入到以列命名的文件中。如果某一個維度列的distinct值比較大,
那麼可能導致mapreduce任務執行過程中OOM
4.流程四:構建維度詞典
根據流程三生成的distinct colum文件和維度表計算出所有維度的字典。字典是爲了節約存儲而設計,事實表的每個維度組合都轉換成唯一整數而減少內存佔用。維度表的的每一行每一列都會得到一個編碼id.然後存儲id組成的新維表,id和值得映射關係。
5.流程五:保存Cuboid的統計信息
6.流程六:創建HTable
創建Htable時候需要考慮
- 列族的設置
- 每個列族的壓縮方式
- 部署coprocessor
- HTable中每一個region的大小
7.流程七:計算生成Base Cuboid數據文件
計算BaseCuboid。
8.流程八:計算N層的Cuboid文件
每一層一個mapreduce程序,計算每一程的coboid。
9.流程九:基於內存構建Cube
如果選擇In-mem cubing的方式這一步會代替前兩步生成cube。
10.流程十:將Cuboid轉換成HFile
11.流程十一:將HFile導入到Hbase表中
12.流程十二:更新Cube信息
13流程十三:清理中間表