背景

本文重點介紹基於OSS並使用MaxCompute構建PB資料倉儲的方法。

  • Object Storage Service

    Object Storage Service提供標準、低頻、Archive Storage類型,能夠覆蓋從熱到冷的不同儲存場景。同時,OSS能夠與Hadoop開源社區及EMR、批次運算、MaxCompute、機器學習服務PAI、DatalakeAnalytics、Function Compute等阿里雲計算產品進行深度結合。

    用戶可以打造基於OSS的資料分析應用,如MapReduce、HIVE/Pig/Spark等批處理(如日誌離線計算)、互動式查詢分析(Imapla、Presto、DataLakeAnalytics)、深度學習訓練(阿里雲PAI)、基因渲染計算交付(批次運算)、大數據應用(MaxCompute)及串流(Function Compute)等。

  • MaxCompute

    MaxCompute是一項大數據計算服務,能夠提供快速且完全託管的資料倉儲解決方案,並可以與OSS結合,高效並經濟地分析處理海量數據。MaxCompute的處理性能達到了全球領先水平,被Forrester評為全球雲端資料倉儲領導者。

  • OSS外部表格查詢功能

    MaxCompute重磅推出了一項重要特性:OSS外表查詢功能。該功能可以幫助您直接對OSS中的海量檔案進行查詢,而不必將數據載入到MaxCompute表中,既節約了數據搬遷的時間和人力,也節省了多地儲存的成本。

    使用MaxCompute+OSS的方案,您可以獲得以下優勢:

    • MaxCompute是一個無伺服器的分散式運算架構,無需用戶對伺服器基礎設施進行額外的維護和管理,能夠根據OSS用戶的需求方便及時地提供臨時查詢服務,幫助企業大幅節省成本。
    • OSS為海量的對象儲存服務。用戶將數據統一儲存在OSS,可以做到計算和儲存分離,多種計算應用和業務都可以訪問使用OSS的數據,數據只需要儲存一份。
    • 支援處理OSS上開源格式的結構化檔案,包括:Avro、CSV、ORC、Parquet、RCFile、RegexSerDe、SequenceFile和TextFile,同時支援gzip壓縮格式。

典型應用場景

互連網金融應用每天都需要將大量的金融數據分頁檔存放在OSS上,並需要進行超大文字檔的結構化分析。通過MaxCompute的OSS外部表格查詢功能,用戶可以直接用外部表格的方式將OSS上的大檔案載入到MaxCompute進行分析,從而大幅提升整個鏈路的效率。

操作步驟

下面我們通過兩個簡單的樣本,介紹如何通過MaxCompute外表功能實現對OSS數據的分析和處理。

  • 場景一:物聯網採集資料分析
    1. 步驟1:準備工作
      1. 開通OSS和MaxCompute服務。

        您可以通過官網分別開通OSS、MaxCompute服務,並建立OSS bucket、MaxCompute Project。

      2. 採集數據到OSS。

        您可以使用任何資料集來執行測試,以驗證我們在這篇文章中概述的最佳實踐。本樣本在OSS上準備了一批 CSV 數據,endpoint為oss-cn-beijing-internal.aliyuncs.com,bucket為oss-odps-test,資料檔案的存放路徑為 /demo/vehicle.csv

      3. 授權MaxCompute訪問OSS。

        MaxCompute需要直接存取OSS的數據,因此需要將OSS的數據相關許可權賦給MaxCompute的訪問帳號。您可以在直接登入阿里雲帳號後,點擊完成授權

    2. 步驟2:通過MaxCompute建立外部表格
      建立外部表格,語句如下:
      CREATE EXTERNAL TABLE IF NOT EXISTS ambulance_data_csv_external
      (
          vehicleId int,
          recordId int,
          patientId int,
          calls int,
          locationLatitute double,
          locationLongtitue double,
          recordTime string,
          direction string
          )
          STORED BY 'com.aliyun.odps.CsvStorageHandler'
          LOCATION 'oss://oss-cn-beijing-internal.aliyuncs.com/oss-odps-test/Demo/';
    3. 步驟3:通過MaxCompute查詢外部表格

      成功建立外部表格後,便可如普通表一樣使用該外部表格。

      假設 /demo/vehicle.csv 的數據如下:

      1,1,51,1,46.81006,-92.08174,9/14/2014 0:00,S
      1,2,13,1,46.81006,-92.08174,9/14/2014 0:00,NE
      1,3,48,1,46.81006,-92.08174,9/14/2014 0:00,NE
      1,4,30,1,46.81006,-92.08174,9/14/2014 0:00,W
      1,5,47,1,46.81006,-92.08174,9/14/2014 0:00,S
      1,6,9,1,46.81006,-92.08174,9/14/2014 0:00,S
      1,7,53,1,46.81006,-92.08174,9/14/2014 0:00,N
      1,8,63,1,46.81006,-92.08174,9/14/2014 0:00,SW
      1,9,4,1,46.81006,-92.08174,9/14/2014 0:00,NE
      1,10,31,1,46.81006,-92.08174,9/14/2014 0:00,N

      執行如下 SQL 語句:

      select recordId, patientId, direction from ambulance_data_csv_external where patientId > 25;

      輸出結果如下:

      +------------+------------+-----------+
      | recordId   | patientId  | direction |
      +------------+------------+-----------+
      | 1          | 51         | S         |
      | 3          | 48         | NE        |
      | 4          | 30         | W         |
      | 5          | 47         | S         |
      | 7          | 53         | N         |
      | 8          | 63         | SW        |
      | 10         | 31         | N         |
      +------------+------------+-----------+
  • 場景二:阿里雲產品消費賬單分析
    1. 步驟1:準備工作
      1. 開通OSS和MaxCompute服務。

        您可以通過官網分別開通OSS和MaxCompute服務,並建立OSS bucket、MaxCompute Project。

      2. 授權MaxCompute訪問OSS。

        MaxCompute需要直接存取OSS的數據,因此需要將OSS的數據相關許可權賦給MaxCompute的訪問帳號。您可以在直接登入阿里雲帳號後,點擊完成授權

    2. 步驟2:通過費用中心同步賬單數據到OSS
      1. 服務開通後,每天會將增量的實例消費詳細資料組建檔案,並同步儲存到指定的bucket中,如下圖所示:
    3. 步驟3:通過MaxCompute註冊賬單處理類
      1. 點擊以下連結下載自訂代碼:odps-udf-example-0.30.0-SNAPSHOT-jar-with-dependencies.jar
      2. 運行以下命令,將自訂代碼編譯打包,並上傳到 MaxCompute。
        add jar odps-udf-example-0.30.0-SNAPSHOT-jar-with-dependencies.jar
    4. 步驟4:通過MaxCompute建立外部表格

      以建立5月4日的賬單消費表為例,外部表格如下:

      CREATE EXTERNAL TABLE IF NOT EXISTS oms_oss_0504
      (
      月份 string,
      資源擁有者 string,
      消費時間 string,
      消費類型 string,
      賬單編號 string,
      商品 string,
      計費方式 string,
      服務開始時間 string,
      服務結束時間 string,
      服務時長 string,
      財務核算單元 string,
      資源id string,
      資源暱稱 string,
      TAG string,
      地域 string,
      可用區 string,
      公網ip string,
      內網ip string,
      資源配置 string,
      原價 string,
      優惠金額 string,
      應付金額 string,
      計費項1 string,
      使用量1 string,
      資源套件扣除1 string,
      原價1 string ,
      應付金額1 string,
      計費項2 string,
      使用量2 string,
      資源套件扣除2 string,
      原價2 string,
      應付金額2 string,
      計費項3 string,
      使用量3 string,
      資源套件扣除3 string,
      原價3 string,
      應付金額3 string,
      計費項4 string,
      使用量4 string,
      資源套件扣除4 string,
      原價4 string,
      應付金額4 string,
      計費項5 string,
      使用量5 string,
      資源套件扣除5 string,
      原價5 string,
      應付金額5 string,
      計費項6 string,
      使用量6 string,
      資源套件扣除6 string,
      原價6 string,
      應付金額6 string,
      計費項7 string,
      使用量7 string,
      資源套件扣除7 string,
      原價7 string,
      應付金額7 string,
      計費項8 string,
      使用量8 string,
      資源套件扣除8 string,
      原價8 string,
      應付金額8 string,
      計費項9 string,
      使用量9 string,
      資源套件扣除9 string,
      原價9 string,
      應付金額9 string
      )
      STORED BY 'com.aliyun.odps.udf.example.text.TextStorageHandler' --STORED BY 指定自訂 StorageHandler 的類名。
      with SERDEPROPERTIES (
      'odps.text.option.complex.text.enabled'='true', 
      'odps.text.option.strict.mode'='false'
      --遇到列數不一致的情況不會拋異常,如果實際列數少於schema列數,將所有列按順序匹配,剩下的不足的列補NULL。
      )
      LOCATION 'oss://oss-cn-beijing-internal.aliyuncs.com/oms-yl/2018-05-04/'
      USING 'text_oss.jar'; --同時需要指定賬單中的文本處理類定義所在的 jar 包。
    5. 步驟5:通過MaxCompute查詢外部表格

      以查詢ECS快照消費賬單明細為例,命令如下:

      select  月份,原價,優惠金額,應付金額,計費項1,使用量 from oms_oss where  商品=快照(SNAPSHOT);

總結

上述樣本說明了如何通過MaxCompute對OSS上的海量數據進行分析,將您的大資料分析工作效率提升至分鐘級,幫助您更高效、更低成本的挖掘海量數據價值。