阿里云 E-MapReduce ClickHouse 操作指南 02期 — 快速入门

阿里云 E-MapReduce(简称EMR)是运行在阿里云平台上的一种大数据处理的系统解决方案。ClickHouse 作为开源的列式存储数据库,主要用于在线分析处理查询(OLAP),能够使用 SQL 查询实时生成分析数据报告。而阿里云 EMR ClickHouse 则提供了开源 OLAP 分析引擎 ClickHouse 的云上托管服务。


本系列文章将从以下几个方面详细介绍 EMR ClickHouse 的操作指南:


EMR ClickHouse 操作指南 — 快速入门


阿里云 E-MapReduce ClickHouse 操作指南 02期 — 快速入门

一、创建集群

——创建 ClickHouse 集群的详细操作步骤和相关配置。

前提条件

已在目标地域创建一个专有网络和交换机,详情请参见 使用专有网络 使用交换机

背景信息

机型、内存和磁盘的设置,请参见 Usage Recommendations

操作步骤

  1. 进入创建集群页面
    1. 登录 阿里云E-MapReduce控制台
    2. 在顶部菜单栏处,根据实际情况选择地域和资源组。
      • 地域:创建的集群将会在对应的地域内,一旦创建不能修改。
      • 资源组:默认显示账号全部资源。
    1. 单击创建集群,进行创建。


  1. 配置集群信息。

创建集群时,您需要对集群进行软件配置、硬件配置和基础配置。

 注意集群创建完成后,除了集群名称以外,其他配置均无法修改,所以在创建时请仔细确认各项配置。

  • 软件配置
配置项 说明
集群类型 选择 ClickHouse
产品版本 默认最新的软件版本。
必选服务 默认的服务组件,后期可以在管理页面中启停服务。
可选服务 根据您的实际需求选择其他的一些组件,被选中的组件会默认启动相关的服务进程。


说明 组件越多,对机器的配置要求也越高,所以在下面的步骤中您需要根据实际的组件数量进行机器选型,否则可能没有足够的资源运行这些服务。

高级设置 软件自定义配置:可指定 JSON 文件对集群中的基础软件(例如Hadoop、Spark 和 Hive 等)进行配置,详细使用方法请参见软件配置。默认不开启。
  • 硬件配置
区域 配置项 说明
付费类型 付费类型 默认包年包月。当前支持的付费类型如下:
  • 按量付费:一种后付费模式,即先使用再付费。按量付费是根据实际使用的小时数来支付费用,每小时计费一次,适合短期的测试任务或是灵活的动态任务。
  • 包年包月:一种预付费模式,即先付费再使用。


    说明:建议测试场景下使用按量付费,测试正常后再新建一个包年包月的生产集群正式使用。

网络配置 可用区 可用区为在同一地域下的不同物理区域,可用区之间内网互通。通常使用默认的可用区即可。
网络类型 默认专有网络。
VPC 选择在该地域的VPC。如果没有可用的VPC,单击创建VPC/子网(交换机)前往新建。
交换机 选择在对应 VPC 下可用区的交换机,如果在这个可用区没有可用的交换机,则需要新创建一个。
安全组名称

注意: 禁止使用 ECS 上创建的企业安全组。

您可以直接输入安全组名称来新建一个安全组。如果已有在使用的安全组,则可以直接选择使用。

安全组详情请参见 安全组概述

实例 选型配置 您可以根据需要选择实例规格,详情请参见实例规格族
  • 系统盘配置:根据需要选择 ESSD 云盘、SSD 云盘或者高效云盘。
  • 系统盘大小:根据需要调整磁盘容量,推荐至少120 GB。取值范围为50 ~ 2048 GB。
  • 数据盘配置:根据需要选择 ESSD 云盘、SSD 云盘或者高效云盘。
  • 数据盘大小:根据需要调整磁盘容量,推荐至少80 GB。取值范围为40 ~ 32768 GB。
  • ClickHouse 数量:默认4台。
  • 基础配置

基础信息区域,配置如下参数。

注意: 暂不支持高级配置区域的参数,因此请勿设置。

配置项 说明
集群名称 集群的名字,长度限制为1~64个字符,仅可使用中文、字母、数字、中划线(-)和下划线(_)。
Shard数量 分片的数量。不支持修改。


说明: 创建集群时,Shard 数量会被自动计算, Shard数量 = ClickHouse数量 ÷ Replica数量。请保证 ClickHouse 数量可以被 Replica 数量整除,否则无法创建集群。

Replica数量

副本的数量。默认为2。


说明: 如果需要保证 ClickHouse 集群的高可用,Replica数量至少为2。

挂载公网

集群是否挂载弹性公网IP地址,默认不开启。


说明: 不开启挂载公网,将无法使用EMR控制台访问链接与端口功能查看开源组件的 Web UI。

密钥对 关于密钥对的使用详情请参见 SSH密钥对
登录密码 设置 Master 节点的登录密码,密码规则:8~30个字符,且必须同时包含大写字母、小写字母、数字和特殊字符。

特殊字符包括:感叹号(!)、at(@)、井号(#)、美元符号($)、百分号(%)、乘方(^)、and(&)和星号(*)。

说明: 页面右边会显示您所创建集群的配置清单以及集群费用。根据不同的付费类型,展示不同的价格信息。


  • 选中 E-MapReduce 服务条款复选框。
  • 单击创建创建集群后可以通过刷新页面来查看进度,当集群状态显示为空闲时,集群创建成功。


二、快速使用 ClickHouse

——快速将数据随机写入 ClickHouse 集群各个节点的本地表

前提条件

已创建 ClickHouse 集群,详情参见上文。

操作步骤

  • 使用 SSH 方式登录 ClickHouse 集群,详情请参见登录集群


  • 执行以下命令,下载官方样例数据集。

curl https://datasets.clickhouse.tech/hits/tsv/hits_v1.tsv.xz | unxz --threads=`nproc` > hits_v1.tsv


  • 执行如下命令,启动 ClickHouse 客户端。

clickhouse-client


您也可以使用默认的 default 用户启动 ClickHouse 客户端。

clickhouse-client -u default --password


说明: 因为默认密码为空,所以直接按回车键,即可启动 ClickHouse 客户端。


  • 执行如下命令,创建数据库。

可以使用 on ClUSTER 参数在集群的所有节点创建数据库, 默认集群标识为cluster_emr。

CREATE DATABASE IF NOT EXISTS demo on CLUSTER cluster_emr


返回信息如下所示。

阿里云 E-MapReduce ClickHouse 操作指南 02期 — 快速入门

  • 在集群上的所有节点创建一张复制表(Replicated表)。

复制表(Replicated表)会根据副本的个数,实现数据的多副本,并实现数据的最终一致性。

CREATE TABLE demo.hits_local ON CLUSTER cluster_emr
(
    `WatchID` UInt64,
    `JavaEnable` UInt8,
    `Title` String,
    `GoodEvent` Int16,
    `EventTime` DateTime,
    `EventDate` Date,
    `CounterID` UInt32,
    `ClientIP` UInt32,
    `ClientIP6` FixedString(16),
    `RegionID` UInt32,
    `UserID` UInt64,
    `CounterClass` Int8,
    `OS` UInt8,
    `UserAgent` UInt8,
    `URL` String,
    `Referer` String,
    `URLDomain` String,
    `RefererDomain` String,
    `Refresh` UInt8,
    `IsRobot` UInt8,
    `RefererCategories` Array(UInt16),
    `URLCategories` Array(UInt16),
    `URLRegions` Array(UInt32),
    `RefererRegions` Array(UInt32),
    `ResolutionWidth` UInt16,
    `ResolutionHeight` UInt16,
    `ResolutionDepth` UInt8,
    `FlashMajor` UInt8,
    `FlashMinor` UInt8,
    `FlashMinor2` String,
    `NetMajor` UInt8,
    `NetMinor` UInt8,
    `UserAgentMajor` UInt16,
    `UserAgentMinor` FixedString(2),
    `CookieEnable` UInt8,
    `JavascriptEnable` UInt8,
    `IsMobile` UInt8,
    `MobilePhone` UInt8,
    `MobilePhoneModel` String,
    `Params` String,
    `IPNetworkID` UInt32,
    `TraficSourceID` Int8,
    `SearchEngineID` UInt16,
    `SearchPhrase` String,
    `AdvEngineID` UInt8,
    `IsArtifical` UInt8,
    `WindowClientWidth` UInt16,
    `WindowClientHeight` UInt16,
    `ClientTimeZone` Int16,
    `ClientEventTime` DateTime,
    `SilverlightVersion1` UInt8,
    `SilverlightVersion2` UInt8,
    `SilverlightVersion3` UInt32,
    `SilverlightVersion4` UInt16,
    `PageCharset` String,
    `CodeVersion` UInt32,
    `IsLink` UInt8,
    `IsDownload` UInt8,
    `IsNotBounce` UInt8,
    `FUniqID` UInt64,
    `HID` UInt32,
    `IsOldCounter` UInt8,
    `IsEvent` UInt8,
    `IsParameter` UInt8,
    `DontCountHits` UInt8,
    `WithHash` UInt8,
    `HitColor` FixedString(1),
    `UTCEventTime` DateTime,
    `Age` UInt8,
    `Sex` UInt8,
    `Income` UInt8,
    `Interests` UInt16,
    `Robotness` UInt8,
    `GeneralInterests` Array(UInt16),
    `RemoteIP` UInt32,
    `RemoteIP6` FixedString(16),
    `WindowName` Int32,
    `OpenerName` Int32,
    `HistoryLength` Int16,
    `BrowserLanguage` FixedString(2),
    `BrowserCountry` FixedString(2),
    `SocialNetwork` String,
    `SocialAction` String,
    `HTTPError` UInt16,
    `SendTiming` Int32,
    `DNSTiming` Int32,
    `ConnectTiming` Int32,
    `ResponseStartTiming` Int32,
    `ResponseEndTiming` Int32,
    `FetchTiming` Int32,
    `RedirectTiming` Int32,
    `DOMInteractiveTiming` Int32,
    `DOMContentLoadedTiming` Int32,
    `DOMCompleteTiming` Int32,
    `LoadEventStartTiming` Int32,
    `LoadEventEndTiming` Int32,
    `NSToDOMContentLoadedTiming` Int32,
    `FirstPaintTiming` Int32,
    `RedirectCount` Int8,
    `SocialSourceNetworkID` UInt8,
    `SocialSourcePage` String,
    `ParamPrice` Int64,
    `ParamOrderID` String,
    `ParamCurrency` FixedString(3),
    `ParamCurrencyID` UInt16,
    `GoalsReached` Array(UInt32),
    `OpenstatServiceName` String,
    `OpenstatCampaignID` String,
    `OpenstatAdID` String,
    `OpenstatSourceID` String,
    `UTMSource` String,
    `UTMMedium` String,
    `UTMCampaign` String,
    `UTMContent` String,
    `UTMTerm` String,
    `FromTag` String,
    `HasGCLID` UInt8,
    `RefererHash` UInt64,
    `URLHash` UInt64,
    `CLID` UInt32,
    `YCLID` UInt64,
    `ShareService` String,
    `ShareURL` String,
    `ShareTitle` String,
    `ParsedParams` Nested(Key1 String,Key2 String,Key3 String,Key4 String,Key5 String,ValueDouble Float64),
    `IslandID` FixedString(16),
    `RequestNum` UInt32,
    `RequestTry` UInt8
)
ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/{database}/hits_local', '{replica}')
PARTITION BY toYYYYMM(EventDate)
ORDER BY (CounterID, EventDate, intHash32(UserID))
SAMPLE BY intHash32(UserID)

说明: {shard}{replica}是阿里云EMR为ClickHouse集群自动生成的宏定义,可以直接使用。


返回信息如下图所示。

阿里云 E-MapReduce ClickHouse 操作指南 02期 — 快速入门

  • 执行以下命令,创建分布式(Distributed)表。

分布式表不存储数据,仅仅是底层表的一个View,但可以在多个服务器上进行分布式查询。本例中使用随机函数rand(),表示数据会随机写入各个节点的本地表。

CREATE TABLE demo.hits_all on CLUSTER cluster_emr AS demo.hits_local ENGINE = Distributed(cluster_emr, demo, hits_local, rand())


  • 退出 ClickHouse 客户端,在样例数据的目录下执行以下命令,导入数据。

clickhouse-client --query "INSERT INTO demo.hits_all FORMAT TSV" --max_insert_block_size=100000 < hits_v1.tsv


  • 重新启动 ClickHouse 客户端,查看数据。

因为数据是随机写入的,各节点数据量可能不同。


    • 查看 emr-header-1 节点 demo.hits_all 的数据量。

select count(*) from demo.hits_all

返回信息如下。

阿里云 E-MapReduce ClickHouse 操作指南 02期 — 快速入门

    • 查看 emr-header-1 节点 demo.hits_local 的数据量。

select count(*) from demo.hits_local

回信息如下。

阿里云 E-MapReduce ClickHouse 操作指南 02期 — 快速入门

    • 查看 emr-worker-1 节点 demo.hits_local 的数据量。


说明 其余节点,您也可以按照以下步骤来查看 demo.hits_local 的数据量。

    1. 执行以下命令,在 Master 节点切换到 hadoop 账号。
      su hadoop
    2. 执行以下命令,切换到 emr-worker-1 节点。
      ssh emr-worker-1
    3. 执行以下命令,查看 demo.hits_local 的数据量。

select count(*) from demo.hits_local

返回信息如下。

阿里云 E-MapReduce ClickHouse 操作指南 02期 — 快速入门

三、访问模式

访问 E-MapReduce(简称EMR)上的 ClickHouse 集群支持通过原生 JDBC 访问和通过负载均衡 SLB 访问两种方式

背景信息

  • 通过原生 JDBC 访问 ClickHouse 集群的架构图如下:

  阿里云 E-MapReduce ClickHouse 操作指南 02期 — 快速入门

  • 通过负载均衡器 SLB 访问 ClickHouse 集群的架构图如下:

阿里云 E-MapReduce ClickHouse 操作指南 02期 — 快速入门

前提条件

  • 已创建 E-MapReduce 的 ClickHouse 集群,详情请参见前文。
  • 已创建 SLB 服务,详情请参见创建实例


注意: 如果是想通过负载均衡器SLB访问ClickHouse集群,则需要创建SLB服务。并且在创建SLB服务时,如果实例类型选择的是私网,则在选择专有网络时,必须选择与EMR ClickHouse集群相同的VPC。


通过原生 JDBC 访问 ClickHouse 集群

  • 获取主机的IP地址。
    • 登录 阿里云E-MapReduce控制台
    • 在顶部菜单栏处,根据实际情况选择地域和资源组。
    • 单击上方的集群管理页签。
    • 集群管理页面,单击相应集群所在行的详情
    • 在左侧导航栏,单击主机列表。在此页面您可以查看ClickHouse集群的IP地址。

阿里云 E-MapReduce ClickHouse 操作指南 02期 — 快速入门


通过负载均衡器 SLB 访问 ClickHouse 集群

通常情况下,ClickHouse 使用 SLB 服务仅需要配置 HTTP 及 TCP 两种协议的监听,如果您有需要,也可以配置HTTPS的监听。配置监听详情,请参见 添加TCP监听添加HTTP监听添加HTTPS监听


    • 注意:
    • TCP监听所使用的虚拟服务器组,其端口应为ClickHouse通过TCP连接到服务器的端口,默认为9000。您可以在EMR控制台ClickHouse服务的配置页面,在搜索区域搜索tcp_port参数,参数值即为TCP端口。
    • HTTP监听所使用的虚拟服务器组,其端口应为ClickHouse通过HTTP连接到服务器的端口,默认为8123。您可以在EMR控制台ClickHouse服务的配置页面,在搜索区域搜索http_port参数,参数值即为HTTP端口。


  • 实例管理页面,获取 SLB 的服务地址

  阿里云 E-MapReduce ClickHouse 操作指南 02期 — 快速入门


后续

您已经学习了 ClickHouse 快速入门,本系列还包括其他内容:

  • ClickHouse 概述
  • ClickHouse 运维
  • 数据导入
  • 常见问题




获取更详细的 EMR ClickHouse 相关信息,可至产品文档页查看:

https://help.aliyun.com/document_detail/212195.html


扫描下方二维码加入 EMR 相关产品钉钉交流群一起参与讨论吧!

阿里云 E-MapReduce ClickHouse 操作指南 02期 — 快速入门

上一篇:带你读《重构数字战斗力: 中小企业的数字化转型之路》第二章电子电气企业覆盖 “全渠道—研发—经营—制造” 全价值链的上云之路案例4(一)


下一篇:修改MSSQL自增列标识值