Jindo sql命令是JindoFS內建的工具,方便您分析JindoFS訪問日誌、中繼資料和OSS訪問日誌。本文為您介紹如何使用Jindo sql命令,分析JindoFS訪問日誌、中繼資料和OSS訪問日誌的資料。
前提條件
- 本地安裝了Java JDK 8。
- 已建立叢集,詳情請參見建立叢集。
背景資訊
您可以使用Jindo sql命令分析以下資料:
使用限制
EMR-3.36.0及後續版本或EMR-5.2.0及後續版本的叢集,支援使用Jindo sql命令。
使用Jindo sql命令
- 通過SSH方式登入叢集,詳情請參見登入叢集。
- 執行以下命令,啟動jindo sql。
jindo sqljindo sql支援以下常用參數。參數 描述 -f 指定啟動並執行SQL檔案。 -i 啟動Jindo sql後自動運行初始化SQL指令碼。 -d 參數設定為索引值對的形式。例如, -d A=B。
Jindo sql內建表結構
- audit_log_source(分區表)audit_log_source表用作JindoFS訪問日誌原始表。
參數 描述 datetime 時間格式yyyy-MM-dd HH:mm:ss。 allowed 本次操作是否被允許,取值如下: - true:允許本次操作。
- false:不允許本次操作。
ugi 操作使用者(包含認證方式資訊)。 ip Client IP地址。 ns Block模式namespace的名稱。 cmd 操作命令。 src 源路徑。 dst 目標路徑,可以為空白。 perm 操作檔案的Permission資訊。 date(分區列) 日誌日期,格式為YYYY-mm-DD。 - audit_logaudit_log允許使用分區列進行分區過濾,用作JindoFS訪問日誌表。
參數 描述 datetime 時間格式yyyy-MM-dd HH:mm:ss。 allowed 本次操作是否被允許,取值如下: - true:允許本次操作。
- false:不允許本次操作。
ugi 操作使用者(包含認證方式資訊)。 ip Client IP地址。 ns Block模式namespace的名稱。 cmd 操作命令。 src 源路徑。 dst 目標路徑,可以為空白。 perm 操作檔案的Permission資訊。 date(分區列) 日誌日期,格式為YYYY-mm-DD。 - fs_image(分區表)fs_image用作轉存image資訊
參數 描述 atime INode最近訪問時間。 attr 檔案相關屬性。 etag OSS的ETag值。 id INode的ID。 mtime INode的修改時間。 name INode的名稱。 owner owner名稱。 ownerGroup owner組名稱。 parentId 父節點的ID。 permission 操作檔案的Permission資訊。 size INode的大小。 state INode的狀態。 type INode的類型。 storagePolicy 儲存策略。 namespace(分區列) namespace名稱。 datetime(分區列) 轉存時間。 - oss_access_log_source如果開啟分區表模式,則為分區表。oss_access_log_source表用作OSS訪問日誌原始表。
參數 描述 line 原始日誌。 bucket(分區列) Bucket名稱。 partition_date(分區列) 日誌日期格式為YYYY-mm-DD。 - oss_access_log如果開啟分區表模式,允許使用分區列進行分區過濾。oss_access_log表用作OSS訪問日誌。
參數 描述 Remote_IP 要求者的IP地址。 Reserved 保留欄位,固定值為-。 Reserved1 保留欄位,固定值為-。 Time OSS收到請求的時間。 Request_URI 包含query string的請求URL。OSS會忽略以x-開頭的query string參數,但這個參數會被記錄在訪問日誌中。所以您可以使用x-開頭query string參數標記一個請求,然後使用這個標記快速尋找該請求對應的日誌。 HTTP_Status OSS返回的HTTP狀態代碼。 SentBytes 請求產生的下行流量。單位:Byte。 RequestTime 完成本次請求耗費的時間。單位:ms。 Referer 請求的HTTP Referer。 User_Agent HTTP的User-Agent頭。 HostName 請求訪問的目標網域名稱。 Request_ID 請求的Request ID。 LoggingFlag 是否已開啟日誌轉存。 Requester 要求者的使用者ID。取值-表示匿名訪問。 Operation 請求類型。 Bucket 請求的目標Bucket名稱。 Key 請求的目標Object名稱。 ObjectSize 目標Object大小。單位:Byte。 Server_Cost_Time OSS處理本次請求所花的時間。單位:毫秒。 ErrorCode OSS返回的錯誤碼。取值-表示未返回錯誤碼。 RequestLength 請求的長度。單位:Byte。 UserID Bucket擁有者ID。 Delta_DataSize Bucket大小的變化量。取值-表示此次請求不涉及Object的寫入操作。 SyncRequest 請求是否為CDN回源請求。取值如下: - cdn:請求是CDN回源請求。
- -:請求不是CDN回源請求。
StorageClass 目標Object的儲存類型。取值如下: - Standard:標準儲存。
- IA:低頻訪問儲存。
- Archive:Archive Storage。
- Cold Archive:冷Archive Storage。
- -:未擷取Object儲存類型。
TargetStorageClass 是否通過生命週期規則或CopyObject轉換了Object的儲存類型。取值如下: - Standard:轉換為標準儲存。
- IA:轉換為低頻訪問儲存。
- Archive:轉換為Archive Storage。
- Cold Archive:轉換為冷Archive Storage
- -:請求不涉及Object儲存類型轉換操作。
TransmissionAccelerationAccessPoint 通過傳輸加速網域名稱訪問目標Bucket時使用的傳輸加速存取點。取值-表示未使用傳輸加速網域名稱或傳輸加速存取點與目標Bucket所在地區相同。 例如,要求者通過華東1(杭州)的存取點訪問目標Bucket時,值為cn-hangzhou。
AccessKeyID 訪問的AccessKey ID。 bucket(分區列) Bucket名稱。 partition_date(分區列) 日誌日期格式為YYYY-mm-DD。
使用Jindo sql分析JindoFS訪問日誌
JindoFS為儲存在OSS上的JindoFS訪問記錄檔提供SQL的分析功能,通過SQL分析相關表,提供Top-N活躍操作命令分析和Top-N活躍IP分析。您可以通過
jindo sql命令,使用該功能。說明 已開啟AuditLog功能,詳情請參見AuditLog使用說明。
Jindo SQL相關命令樣本如下:
- 執行如下命令,顯示錶。
show tables;說明 表結構資訊,請參見Jindo sql內建表結構。返回資訊如下圖所示。
- 執行如下命令,顯示分區。
show partitions audit_log_source;返回資訊類似如下圖所示。
- 執行如下命令,查詢資料。
select * from audit_log_source limit 10;返回資訊類似如下圖所示。
select * from audit_log limit 10;返回資訊類似如下。
- 執行如下命令,統計2020-10-20日不同命令的使用頻次。

使用Jindo sql分析中繼資料
JindoFS為JindoFS上的中繼資料檔案提供SQL的分析功能,通過SQL分析相關表。您可以通過
jindo sql命令,使用該功能。說明 已開啟AuditLog功能,詳情請參見AuditLog使用說明。
- 通過SSH方式登入叢集,詳情請參見登入叢集。
- 執行以下命令,啟動Jindo sql。
jindo sql - 查詢Jindo SQL可以分析的表格。
- 使用
show tables命令,可以查看支援查詢分析的表格。Jindo Sql內建了審計和中繼資料資訊的分析功能,對應audit_log和fs_image。程式碼範例如下圖所示。
- 使用
show partitions fs_image命令,可以查看錶的fs_image分區資訊。每一個分區對應於一次上傳jindo jfs -dumpMetadata產生的資料。程式碼範例如下圖所示。
- 使用
- 查詢分析中繼資料資訊。Jindo SQL使用Spark-SQL文法。您可以使用SQL進行分析和查詢fs_image表。程式碼範例如下圖所示。
例如:根據某次轉存的中繼資料資訊統計該namespace下的目錄個數。
說明 namespace和datetime為Jindo Sql增加的兩列,分別對應於namespace名稱和上傳中繼資料的時間戳記。
使用Jindo sql分析OSS訪問日誌
重要 分析OSS訪問日誌需要指定OSS訪問日誌目錄和指定是否為分區表,指定分區表會自動按照Bucket或date進行日誌歸檔,能夠支援使用過濾語句指定查詢某個分區,極大的提升了查詢效率,但是開啟分區表之後必須每次使用分區表模式,否則檔案會被歸檔到目錄導致部分資料無法查詢。
jindo sql命令,使用該功能。說明 已開啟日誌轉存,詳情請參見日誌轉存。
- 通過SSH方式登入叢集,詳情請參見登入叢集。
- 執行以下命令,啟動Jindo sql。
jindo sql - 執行以下命令,指定日誌儲存路徑和表類型。
jindo sql -d access_log_path=oss://test-sh/oss-accesslog -d partition.table.enabled=true代碼中的
access_log_path為OSS訪問日誌儲存路徑,partition.table.enabled指定是否為分區表,true表示為分區表。
常見問題
- Q:如何修改初始資源Jindo sql的啟動參數?A:因為
Jindo sql基於Spark的程式,所以初始資源可能較小,您可以通過環境變數JINDO_SPARK_OPTS來修改初始資源Jindo sql的啟動參數,修改樣本如下。export JINDO_SPARK_OPTS="--conf spark.driver.memory=4G --conf spark.executor.instances=20 --conf spark.executor.cores=5 --conf spark.executor.memory=20G" - Q:如何使用Hive分析表?
A:為了避免汙染Hive中繼資料,預設Hive看不到Default下的幾個表,如果想使用Hive分析這些表,可以通過語句
show create table {table_name}查看錶語句或者使用SQL建立新表,Hive需要執行載入外部表格。