全部產品
Search
文件中心

E-MapReduce:檔案中繼資料離線分析

更新時間:Jul 01, 2024

EMR-3.30.0及後續版本的Block模式,支援dump整個namespace的中繼資料資訊至OSS中,並通過Jindo Sql工具直接分析元數資訊。

背景資訊

在HDFS檔案系統中,整個分布式檔案的中繼資料存放區在名為fsimage的快照檔案中。檔案中包含了整個檔案系統的命名空間、檔案、Block和檔案系統配額等中繼資料資訊。HDFS支援通過命令列下載整個fsimage檔案(xml形式)到本地,以便離線分析中繼資料資訊,而JindoFS無需下載中繼資料資訊至本地。

上傳檔案系統中繼資料至OSS

使用Jindo命令列工具上傳命名空間的中繼資料至OSS,命令格式如下。
jindo jfs -dumpMetadata <nsName>

<nsName>為Block模式對應的namespace名稱。

例如,上傳並離線分析test-block的中繼資料。
jindo jfs -dumpMetadata test-block
test-block
當提示如下資訊時,表示上傳成功並以JSON格式的檔案存放在OSS中。
Sucessfully upload namespace metadata to OSS.

中繼資料上傳路徑

中繼資料資訊上傳的路徑為JindoFS中配置的sysinfo的子目錄下的metadataDump子目錄。

例如,配置的namespace.sysinfo.oss.urioss://abc/,則上傳的檔案會在oss://abc/metadataDump子目錄中。
參數說明
namespace.sysinfo.oss.uri儲存Bucket和路徑。
namespace.sysinfo.oss.endpoint 對應Endpoint資訊,支援跨Region。
namespace.sysinfo.oss.access.key阿里雲的AccessKey ID。
namespace.sysinfo.oss.access.secret阿里雲的AccessKey Secret。
批次資訊:因為Distributed File System的中繼資料會跟隨使用者的使用發生變化,所以我們每次對中繼資料進行分析是基於命令執行當時的中繼資料資訊的快照進行的。每次運行Jindo命令進行上傳會在目錄下,根據上傳時間產生對應批次號作為本次上傳檔案的根目錄,以保證每次上傳的資料不會被覆蓋,您可以根據需要刪除歷史資料。namespace
  • ①表示OSS系統資訊配置路徑。
  • ②表示namespce。
  • ③表示批次號。

中繼資料Schema

上傳至OSS的檔案系統元資訊以JSON檔案格式存放。其Schema資訊如下。
{
  "type":"string",          /*INode類型,FILE檔案DIRECTORY目錄*/
  "id": "string",            /*INode id*/
  "parentId" :"string",         /*父節點id*/
  "name":"string",         /*INode名稱*/
  "size": "int",         /*INode大小, bigint*/
  "permission":"int",         /*permission以int格式存放*/
  "owner":"string",          /*owner名稱*/
  "ownerGroup":"string",     /*owner組名稱*/
  "mtime":"int",              /*inode修改時間,bigint*/
  "atime":"int",              /*inode最近訪問時間,bigint*/
  "attributes":"string",       /*檔案相關屬性*/
  "state":"string",            /*INode狀態*/
  "storagePolicy":"string",    /*儲存策略*/
  "etag":"string"           /*etag*/
}

使用Jindo Sql分析中繼資料

  1. 執行如下命令,啟動Jindo Sql。
    start_sql
  2. 查詢Jindo Sql可以分析的表格。
    • 使用show tables可以查看支援查詢分析的表格。目前Jindo Sql內建了審計和中繼資料資訊的分析功能,對應audit_logfs_image
    • 使用show partitions fs_image可以查看錶的fs_image分區資訊。每一個分區對應於一次上傳jindo jfs -dumpMetadata產生的資料。
      樣本如下。show_partitions
  3. 查詢分析中繼資料資訊。
    Jindo Sql使用Spark-SQL文法。您可以使用SQL進行分析和查詢fs_image表。
    樣本如下。check fs_image

    namespace和datetime為Jindo Sql增加的兩列,分別對應於namespace名稱和上傳中繼資料的時間戳記。

    例如:根據某次dump的中繼資料資訊統計該namespace下的目錄個數。Number of queries

使用Hive分析中繼資料

  1. 在Hive中建立Table Schema。

    在Hive中建立對應的元資訊以供查詢,您可以參考下面的格式在Hive中建立檔案系統元資訊對應表的Schema。

    CREATE EXTERNAL TABLE `table_name` 
    (`type` string,
     `id` string,
     `parentId` string,
     `name` string,
     `size` bigint, 
     `permission` int,
     `owner` string,
     `ownerGroup` string,
     `mtime` bigint, 
     `atime` bigint,
     `attr` string,
     `state` string,
     `storagePolicy` string,
     `etag` string) 
     ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe' 
     STORED AS TEXTFILE 
     LOCATION '檔案上傳的OSS路徑';
  2. 使用Hive進行離線分析。
    建立完Hive表後,您可以使用Hive SQL分析中繼資料。
    select * from table_name limit 200;
    樣本如下。Offline analysis