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:归档存储。
- 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-20select * 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使用说明。
- 通过SSH方式登录集群,详情请参见登录集群。
- 执行以下命令,启动Jindo sql。
jindo sql - 查询Jindo SQL可以分析的表格。
- 使用
show tables命令,可以查看支持查询分析的表格。Jindo Sql内置了审计和元数据信息的分析功能,对应audit_log和fs_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)
- 使用
- 查询分析元数据信息。
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)说明 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需要执行加载外部表。
该文章对您有帮助吗?