Jindo sql命令介绍

更新时间:
复制为 MD 格式

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 OSSETag值。
    id INodeID。
    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 HTTPUser-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内置表结构
    返回信息如下所示。
    jindo-sql> show tables;
    database        tableName          isTemporary
    default         audit_log          false
    default         audit_log_source   false
    default         fs_image           false
  • 执行如下命令,显示分区。
    show partitions audit_log_source;
    返回信息类似如下所示。
    jindo-sql> show partitions audit_log_source;
    partition
    date=2020-10-20
    Time taken: 0.031 seconds, Fetched 1 row(s)
  • 执行如下命令,查询数据。
    • select * from audit_log_source limit 10;
      返回信息类似如下所示。
      jindo-sql> select * from audit_log_source limit 10;
      datetime        allowed ugi    ip      ns      cmd        src        dst      perm       date
      2020-10-20 10:50:11.924 allowed=true    ugi=root (auth:SIMPLE)  ip=192.xxx    ns=kugou        cmd=getFileStatusRequest    src=jfs:xxx         dst=null perm=hadoop:hadoop:rwxrwxr-x    2020-10-20
      2020-10-20 10:50:11.950 allowed=true    ugi=root (auth:SIMPLE)  ip=192.xxx    ns=kugou        cmd=listFileletRequest  src=jfs://kugou/xxx        dst=null    perm=null       2020-10-20
      2020-10-20 11:26:06.445 allowed=true    ugi=root (auth:SIMPLE)  ip=192.xxx    ns=kugou        cmd=getFileStatusRequest    src=jfs:xxx         dst=null perm=hadoop:hadoop:rwxrwxr-x    2020-10-20
      2020-10-20 11:26:06.469 allowed=true    ugi=root (auth:SIMPLE)  ip=192.xxx    ns=kugou        cmd=listFileletRequest  src=jfs://kugou/xxx        dst=null    perm=null       2020-10-20
      2020-10-20 11:26:11.295 allowed=true    ugi=root (auth:SIMPLE)  ip=192.xxx    ns=kugou        cmd=getFileStatusRequest    src=jfs:xxx         dst=null        perm=root:root:rwxr-x--x        2020-10-20
      2020-10-20 11:26:11.320 allowed=true    ugi=root (auth:SIMPLE)  ip=192.xxx    ns=kugou        cmd=listFileletRequest  src=jfs://kugou/xxx        dst=null    perm=null       2020-10-20
      2020-10-20 11:26:14.368 allowed=true    ugi=root (auth:SIMPLE)  ip=192.xxx    ns=kugou        cmd=getFileStatusRequest    src=jfs:xxx         dst=null        perm=root:root:rwxr-x--x        2020-10-20
    • select * from audit_log limit 10;
      返回信息类似如下。
      jindo-sql> select * from audit_log limit 10;
      datetime                        allowed ugi                    ip          ns    cmd                      src          dst  perm                       date
      2020-10-20 10:50:11.924 true    root (auth:SIMPLE) 192.xxx xxx kugou getFileStatusRequest jfs://kxxx ll   hadoop:hadoop:rwxrwxr-x 2020-10-20
      2020-10-20 10:50:11.950 true    root (auth:SIMPLE) 192.xxx xxx kugou listFileletRequest  jfs://kxxx ll   null                    2020-10-20
      2020-10-20 11:26:06.445 true    root (auth:SIMPLE) 192.xxx xxx kugou getFileStatusRequest jfs://kxxx ll   hadoop:hadoop:rwxrwxr-x 2020-10-20
      2020-10-20 11:26:06.469 true    root (auth:SIMPLE) 192.xxx xxx kugou listFileletRequest  jfs://kxxx ll   null                    2020-10-20
      2020-10-20 11:26:11.295 true    root (auth:SIMPLE) 192.xxx xxx kugou getFileStatusRequest jfs://kxxx null root:root:rwxr-x--x     2020-10-20
      2020-10-20 11:26:11.320 true    root (auth:SIMPLE) 192.xxx xxx kugou listFileletRequest  jfs://kxxx null null                    2020-10-20
      2020-10-20 11:26:14.368 true    root (auth:SIMPLE) 192.xxx xxx kugou getFileStatusRequest jfs://kxxx null root:root:rwxr-x--x     2020-10-20
      2020-10-20 11:26:14.393 true    root (auth:SIMPLE) 192.xxx xxx kugou listFileletRequest  jfs://kxxx null null                    2020-10-20
      2020-10-20 11:26:16.230 true    root (auth:SIMPLE) 192.xxx xxx kugou getFileStatusRequest jfs://kxxx null root:root:rwxr-x--x     2020-10-20
      2020-10-20 11:26:16.255 true    root (auth:SIMPLE) 192.xxx xxx kugou listFileletRequest  jfs://kxxx null null                    2020-10-20
      Time taken: 1.918 seconds, Fetched 10 row(s)
  • 执行如下命令,统计2020-10-20日不同命令的使用频次。
    jindo-sql> select cmd ,count(*) from audit_log where date="2020-10-20" group by cmd order by cmd;
    cmd	count(1)
    getFileStatusRequest	387
    listFileletRequest	387
    Time taken: 5.767 seconds, Fetched 2 row(s)

使用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_logfs_image。
      代码示例如下所示。
      [root@emr-header-1 ~]# jindo sql
      Spark master: yarn, Application Id: application_1603081647416_0050
      jindo-sql> show tables;
      database    tableName          isTemporary
      default     audit_log          false
      default     audit_log_source   false
      default     fs_image           false
      Time taken: 0.33 seconds, Fetched 3 row(s)
    • 使用show partitions fs_image命令,可以查看表的fs_image分区信息。每一个分区对应于一次上传jindo jfs -dumpMetadata生成的数据。
      代码示例如下所示。
      jindo-sql> show partitions fs_image;
      partition
      namespace=kxxx/datetime=2020_10_20_10_47_14
      namespace=kxxx/datetime=2020_10_20_10_50_36
      namespace=kxxx/datetime=2020_10_20_10_52_06
      Time taken: 0.045 seconds, Fetched 3 row(s)
  4. 查询分析元数据信息。
    Jindo SQL使用Spark-SQL语法。您可以使用SQL进行分析和查询fs_image表。
    代码示例如下所示。
    [root@emr-worker-2 hadoop]# jindo sql
    Spark master: yarn, Application Id: app
    jindo-sql> show tables;
    database    tableName          isTemporary
    default     audit_log          false
    default     audit_log_source   false
    default     fs_image           false
    Time taken: 0.345 seconds, Fetched 3 row(s)
    jindo-sql> select * from fs_image limit 10;
    atime  ctime  etag  id  mtime  name  owner  ownerGroup  parentId  permission  size  state  storagePolicy  type  name
    0      5855433 489  0  7311076005051899448  1603084070081  /tpcds/orc/5000/web_returns/wr_returned_date_sk=2450819  root  kugou  2020_10_20_10_50_36  Directory  root  334790833296
    0      5855433 489  0  16534448041906675495  1603084071350  /tpcds/orc/5000/web_returns/wr_returned_date_sk=2450820  root  kugou  2020_10_20_10_50_36  Directory  root  334790833296
    0      5855433 489  0  7311076005051899470  1603084070185  /tpcds/orc/5000/web_returns/wr_returned_date_sk=2450821  root  kugou  2020_10_20_10_50_36  Directory  root  334790833296
    0      5855433 489  0  11922762023479287249  1603084069581  /tpcds/orc/5000/web_returns/wr_returned_date_sk=2450822  root  kugou  2020_10_20_10_50_36  Directory  root  334790833296
    0      5855433 489  0  1076984051887244l036  1603084073592  /tpcds/orc/5000/web_returns/wr_returned_date_sk=2450823  root  kugou  2020_10_20_10_50_36  Directory  root  334790833296
    0      5855433 489  0  2693830986624511354  1603084068996  /tpcds/orc/5000/web_returns/wr_returned_date_sk=2450824  root  kugou  2020_10_20_10_50_36  Directory  root  334790833296
    0      5855433 489  0  1192276202347928307  1603084064875  /tpcds/orc/5000/web_returns/wr_returned_date_sk=2450825  root  kugou  2020_10_20_10_50_36  Directory  root  334790833296
    0      5855433 489  0  1546464820l7665002  1603084072440  /tpcds/orc/5000/web_returns/wr_returned_date_sk=2450826  root  kugou  2020_10_20_10_50_36  Directory  root  334790833296
    0      5855433 489  0  1653444804190667540  1603084071170  /tpcds/orc/5000/web_returns/wr_returned_date_sk=2450827  root  kugou  2020_10_20_10_50_36  Directory  root  334790833296
    0      5855433 489  0  7311076005051899544  1603084070572  /tpcds/orc/5000/web_returns/wr_returned_date_sk=2450828  root  kugou  2020_10_20_10_50_36  Directory  root  334790833296
    Time taken: 6.764 seconds, Fetched 10 row(s)
    例如:根据某次转存的元数据信息统计该namespace下的目录个数。
    jindo-sql>  select count(*) from fs_image where type = "Directory" and namespace="kugou" and datetime="2020_10_20_10_47_14";
    count(1)
    11837
    Time taken: 6.852 seconds, Fetched 1 row(s)
    说明 namespacedatetimeJindo 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_pathOSS访问日志存储路径,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需要执行加载外部表。