阿里云 E-MapReduce(简称EMR)是运行在阿里云平台上的一种大数据处理的系统解决方案。
ClickHouse 作为开源的列式存储数据库,主要用于在线分析处理查询(OLAP),能够使用 SQL 查询实时生成分析数据报告。而阿里云 EMR ClickHouse 则提供了开源 OLAP 分析引擎 ClickHouse 的云上托管服务。
本系列文章将从以下几个方面详细介绍 EMR ClickHouse 的操作指南:
ClickHouse 运维 (本文)
数据导入
常见问题
EMR ClickHouse 操作指南 — ClickHouse 运维
一、日志配置说明
EMR 支持在控制台查看或配置日志参数,也支持在命令行中设置参数。
前提条件
已创建集群,详情请参见创建集群:
https://help.aliyun.com/document_detail/208809.htm
Clickhouse 控制台日志配置
您可以在 ClickHouse 服务配置页面的服务配置区域,在 server-config 页签中查看或修改配置,或者在 ClickHouse 服务的配置页面,在搜索区域搜索 logger.,即可查看或修改所有的日志配置项。
参数 | 描述 |
logger.level | 日志的等级,默认等级为 information 可以配置的等级从严格到宽松依次为
|
logger.path | ClickHouse Server 正常输出的日志文件,默认为/var/log/clickhouse-server/clickhouse-server.log,会输出符合 logger.level 所指定的日志等级的日志。 |
logger.errorlog | ClickHouse Server 中错误日志的输出路径。默认值为/var/log/clickhouse-server/clickhouse-server.err.log。 |
logger.size | 日志文件的大小。当文件达到该参数设置的值时,ClickHouse 会将其存档并重命名,并创建一个新的日志文件。默认值为1000M。 |
logger.count | 存档的 ClickHouse 日志文件个数。当存档的日志文件个数达到该参数设置的值时,ClickHouse 会将最早的存档删除。默认值为10。 |
ClickHouse 客户端日志配置
您可以通过配置客户端日志,来接收来自服务端的日志,默认接收 fatal 级别的日志。
1. 通过 SSH 方式登录集群:
https://help.aliyun.com/document_detail/169150.htm
2. 基本操作示例。
查看每次执行的日志。
-
执行以下命令, 启动 clickhouse-client。
clickhouse-client您可以执行以下命令,设置参数 send_logs_level 查看每次执行的日志。
set send_logs_level='debug';
返回信息如下所示。
在 clickhouse-client 启动时,您可以执行以下命令,将日志保存到指定的文件中。
clickhouse-client --send_logs_level=trace --log-level=trace --server_logs_file='/tmp/query.log'
二、系统表说明
系统表存储于 System 数据库中,仅提供数据读取功能,不能被删除或更改,但可以对其进行分离(detach)操作。大多数系统表将其数据存储在 RAM 中,一个 ClickHouse 服务在刚启动时便会创建此类系统表。
背景信息
常用系统表如下:
system.clusters
system.query_log
system.zookeeper
system.replicas
system.storage_policies
system.disks
更多系统表信息,请参见ClickHouse官方文档:
https://clickhouse.tech/docs/zh/operations/system-tables/
system.clusters
该表包含了配置文件中可用的集群及其服务器的信息。
参数 | 数据类型 | 描述 |
cluster |
String | 集群名。 |
shard_num |
UInt32 | 集群中的分片数,从1开始。 |
shard_weight |
UInt32 | 写数据时该分片的相对权重。 |
replica_num |
UInt32 | 分片的副本数量,从1开始。 |
host_name |
String | 配置中指定的主机名 |
host_address |
String | 从 DNS 获取的主机 IP 地址。 |
port |
UInt16 | 连接到服务器的端口 |
user |
String | 连接到服务器的用户名。 |
errors_count |
UInt32 | 此主机无法访问副本的次数。 |
slowdowns_count |
UInt32 | 在与对端请求建立连接时导致副本更改的 slowdown 的次数。 |
estimated_recovery_time |
UInt32 | 在复制副本错误计数归零并被视为恢复正常之前剩余的秒数。 |
示例:您可以执行以下命令,查看表信息。
SELECT * FROM system.clusters LIMIT 2 FORMAT Vertical;
返回信息如下。
system.query_log
该表包含了已执行查询的相关信息。例如,开始时间、处理持续时间和错误消息。
system.query_log 表中记录了两种查询:
客户端直接运行的初始查询。
由其它查询启动的子查询(用于分布式查询执行)。对于这些类型的查询,有关父查询的信息显示在
initial_*
列。
根据查询的状态(请参见type
列),每个查询在查询日志表中创建一行或两行记录:
如果查询执行成功,则会创建
type
为QueryStart
和QueryFinish
的两行记录信息。如果在查询处理期间发生错误,则会创建
type
为QueryStart
和ExceptionWhileProcessing
的两行记录信息。如果在启动查询之前发生错误,则会创建
type
为ExceptionBeforeStart
的一行记录信息。
参数 | 数据类型 | 描述 |
type |
Enum8 | 执行查询时的事件类型。取值如下:
|
event_date |
Date | 查询开始日期。 |
event_time |
DateTime | 查询开始时间。 |
event_time_microseconds |
DateTime64 | 以微秒精度查询开始时间。 |
query_start_time |
DateTime | 查询执行的开始时间。 |
query_start_time_microseconds |
DateTime64 | 以微秒精度查询执行的开始时间。 |
query_duration_ms |
UInt64 | 查询消耗的时间。单位为毫秒。 |
read_rows |
UInt64 | 从参与了查询的所有表和表函数读取的字节总数。包括常用的子查询,IN和JOIN的子查询。对于分布式查询read_rows 包括在所有副本上读取的字节总数。每个副本发送它的read_rows 值,并且查询的发起方将所有接收到的和本地的值汇总。缓存卷不会影响此值。 |
read_bytes |
UInt64 | 从参与了查询的所有表和表函数读取的总字节数。包括常用的子查询,IN和JOIN的子查询。对于分布式查询read_bytes 包括在所有副本上读取的字节总数。每个副本发送它的read_bytes 值,并且查询的发起方将所有接收到的值和本地的值汇总。缓存卷不会影响此值。 |
written_rows |
UInt64 | 对于INSERT查询,为写入的行数。对于其它查询,值为0。 |
written_bytes |
UInt64 | 对于INSERT查询时,为写入的字节数。对于其它查询,值为0 |
result_rows |
UInt64 | <