Jindo sql命令是JindoFS自带的工具,方便您分析JindoFS访问日志、元数据和OSS访问日志。本文为您介绍如何使用Jindo sql命令,分析JindoFS访问日志、元数据和OSS访问日志的数据。

前提条件

  • 本地安装了Java JDK 8。
  • 已创建集群,详情请参见创建集群

背景信息

使用限制

EMR-3.36.0及后续版本或EMR-5.2.0及后续版本的集群,支持使用Jindo sql命令。

使用Jindo sql命令

  1. 通过SSH方式登录集群,详情请参见登录集群
  2. 执行以下命令,启动jindo sql。
    jindo sql
    jindo 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_log
    audit_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:归档存储。
    • Cold Archive:冷归档存储。
    • -:未获取Object存储类型。
    TargetStorageClass 是否通过生命周期规则或CopyObject转换了Object的存储类型。取值如下:
    • Standard:转换为标准存储。
    • IA:转换为低频访问存储。
    • Archive:转换为归档存储。
    • Cold Archive:转换为冷归档存储
    • -:请求不涉及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_table
  • 执行如下命令,显示分区。
    show partitions audit_log_source;
    返回信息类似如下图所示。 show_audit_log_source
  • 执行如下命令,查询数据。
    • select * from audit_log_source limit 10;
      返回信息类似如下图所示。 audit_log_source
    • select * from audit_log limit 10;
      返回信息类似如下。 audit_log
  • 执行如下命令,统计2020-10-20日不同命令的使用频次。rate

使用Jindo sql分析元数据

JindoFS为JindoFS上的元数据文件提供SQL的分析功能,通过SQL分析相关表。您可以通过 jindo sql命令,使用该功能。
说明 已开启AuditLog功能,详情请参见 AuditLog使用说明
  1. 通过SSH方式登录集群,详情请参见登录集群
  2. 执行以下命令,启动Jindo sql。
    jindo sql
  3. 查询Jindo SQL可以分析的表格。
    • 使用show tables命令,可以查看支持查询分析的表格。Jindo Sql内置了审计和元数据信息的分析功能,对应audit_log和fs_image。
      代码示例如下图所示。 show-tables
    • 使用show partitions fs_image命令,可以查看表的fs_image分区信息。每一个分区对应于一次上传jindo jfs -dumpMetadata生成的数据。
      代码示例如下图所示。 show-partition
  4. 查询分析元数据信息。
    Jindo SQL使用Spark-SQL语法。您可以使用SQL进行分析和查询fs_image表。
    代码示例如下图所示。 fs_image
    例如:根据某次转存的元数据信息统计该namespace下的目录个数。 dump
    说明 namespace和datetime为Jindo Sql增加的两列,分别对应于namespace名称和上传元数据的时间戳。

使用Jindo sql分析OSS访问日志

注意 分析OSS访问日志需要指定OSS访问日志目录和指定是否为分区表,指定分区表会自动按照Bucket或date进行日志归档,能够支持使用过滤语句指定查询某个分区,极大的提升了查询效率,但是开启分区表之后必须每次使用分区表模式,否则文件会被归档到目录导致部分数据无法查询。
JindoFS为存储在OSS上的OSS访问日志文件提供SQL的分析功能,通过SQL分析相关表。您可以通过 jindo sql命令,使用该功能。
说明 已开启日志转存,详情请参见 日志转存
  1. 通过SSH方式登录集群,详情请参见登录集群
  2. 执行以下命令,启动Jindo sql。
    jindo sql
  3. 执行以下命令,指定日志存储路径和表类型。
    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需要执行加载外部表。