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命令
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 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使用说明。
使用Jindo sql分析OSS访问日志
注意 分析OSS访问日志需要指定OSS访问日志目录和指定是否为分区表,指定分区表会自动按照Bucket或date进行日志归档,能够支持使用过滤语句指定查询某个分区,极大的提升了查询效率,但是开启分区表之后必须每次使用分区表模式,否则文件会被归档到目录导致部分数据无法查询。
jindo sql
命令,使用该功能。
说明 已开启日志转存,详情请参见日志转存。
常见问题
- 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需要执行加载外部表。