本系列文章将从以下几个方面详细介绍 EMR ClickHouse 的操作指南:
ClickHouse 概述
快速入门(本文)
ClickHouse 运维
数据导入
常见问题
EMR ClickHouse 操作指南 — 快速入门
一、创建集群:
创建 ClickHouse 集群的详细操作步骤和相关配置。
前提条件
已在目标地域创建一个专有网络和交换机,详情请参见使用专有网络和使用交换机。
使用专有网络:
https://help.aliyun.com/document_detail/65398.htm
使用交换机:https://help.aliyun.com/document_detail/65387.htm
背景信息
机型、内存和磁盘的设置,请参见 Usage Recommendations:https://clickhouse.tech/docs/en/operations/tips
操作步骤
1、进入创建集群页面。
a、登录 阿里云E-MapReduce控制台。
EMR 控制台:https://emr.console.aliyun.com
b、在顶部菜单栏处,根据实际情况选择地域和资源组。
地域:创建的集群将会在对应的地域内,一旦创建不能修改。
资源组:默认显示账号全部资源。
c、单击创建集群,进行创建。
2、配置集群信息。
创建集群时,您需要对集群进行软件配置、硬件配置和基础配置。
#注意#
集群创建完成后,除了集群名称以外,其他配置均无法修改,所以在创建时请仔细确认各项配置。
软件配置
配置项说明集群类型选择 ClickHouse。产品版本默认最新的软件版本。必选服务默认的服务组件,后期可以在管理页面中启停服务。可选服务根据您的实际需求选择其他的一些组件,被选中的组件会默认启动相关的服务进程。
说明:组件越多,对机器的配置要求也越高,所以在下面的步骤中您需要根据实际的组件数量进行机器选型,否则可能没有足够的资源运行这些服务。
高级设置
软件自定义配置:可指定 JSON 文件对集群中的基础软件(例如Hadoop、Spark 和 Hive 等)进行配置,详细使用方法请参见软件配置,默认不开启:https://help.aliyun.com/document_detail/28106.htm。
硬件配置
区域配置项说明付费类型付费类型默认包年包月。当前支持的付费类型如下:
按量付费:一种后付费模式,即先使用再付费。按量付费是根据实际使用的小时数来支付费用,每小时计费一次,适合短期的测试任务或是灵活的动态任务。
包年包月:一种预付费模式,即先付费再使用。
说明:建议测试场景下使用按量付费,测试正常后再新建一个包年包月的生产集群正式使用。
网络配置可用区可用区为在同一地域下的不同物理区域,可用区之间内网互通。通常使用默认的可用区即可。网络类型默认专有网络。VPC选择在该地域的VPC。如果没有可用的VPC,单击创建VPC/子网(交换机)前往新建。交换机选择在对应 VPC 下可用区的交换机,如果在这个可用区没有可用的交换机,则需要新创建一个。安全组名称
注意:禁止使用 ECS 上创建的企业安全组。
您可以直接输入安全组名称来新建一个安全组。如果已有在使用的安全组,则可以直接选择使用。
安全组详情请参见安全组概述:https://help.aliyun.com/document_detail/25387.htm
实例选型配置
您可以根据需要选择实例规格,详情请参见实例规格族:https://help.aliyun.com/document_detail/25378.htm
系统盘配置:根据需要选择 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。
挂载公网
说明:不开启挂载公网,将无法使用EMR控制台访问链接与端口功能查看开源组件的 Web UI。
密钥对
关于密钥对的使用详情请参见SSH密钥对:https://help.aliyun.com/document_detail/51792.htm
登录密码
设置 Master 节点的登录密码,密码规则:8~30个字符,且必须同时包含大写字母、小写字母、数字和特殊字符。特殊字符包括:感叹号(!)、at(@)、井号(#)、美元符号($)、百分号(%)、乘方(^)、and(&)和星号(*)。
说明:页面右边会显示您所创建集群的配置清单以及集群费用。根据不同的付费类型,展示不同的价格信息。
选中 E-MapReduce 服务条款复选框。
单击创建。创建集群后可以通过刷新页面来查看进度,当集群状态显示为空闲时,集群创建成功
二、快速使用 ClickHouse
快速将数据随机写入 ClickHouse 集群各个节点的本地表
前提条件
已创建 ClickHouse 集群,详情参见上文。
操作步骤
使用 SSH 方式登录 ClickHouse 集群,详情请参见登录集群:https://help.aliyun.com/document_detail/169150.htm
执行以下命令,下载官方样例数据集。
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返回信息如下所示。
在集群上的所有节点创建一张复制表(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集群自动生成的宏定义,可以直接使用。返回信息如下图所示。
执行以下命令,创建分布式(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
返回信息如下。
查看 emr-header-1 节点 demo.hits_local 的数据量。
select count(*) from demo.hits_local返回信息如下。
查看 emr-worker-1 节点 demo.hits_local 的数据量。
说明:其余节点,您也可以按照以下步骤来查看demo.hits_local的数据量。
a、执行以下命令,在Master节点切换到hadoop账号
su hadoop
b、执行以下命令,切换到emr-worker-1节点
ssh emr-worker-1
c、执行以下命令,查看demo.hits_local的数据量
select count(*) from demo.hits_local返回信息如下。
三、访问模式
——访问 E-MapReduce(简称EMR)上的 ClickHouse 集群支持通过原生 JDBC 访问和通过负载均衡 SLB 访问两种方式
背景信息
通过原生 JDBC 访问 ClickHouse 集群的架构图如下:
通过负载均衡器 SLB 访问 ClickHouse 集群的架构图如下:
前提条件
已创建 E-MapReduce 的 ClickHouse 集群,详情请参见前文。
已创建 SLB 服务,详情请参见创建实例:
https://help.aliyun.com/document_detail/85941.htm
注意: 如果是想通过负载均衡器SLB访问ClickHouse集群,则需要创建SLB服务。并且在创建SLB服务时,如果实例类型选择的是私网,则在选择专有网络时,必须选择与EMR ClickHouse集群相同的VPC。
通过原生 JDBC 访问 ClickHouse 集群
登录 阿里云E-MapReduce控制台:
https://emr.console.aliyun.com
在顶部菜单栏处,根据实际情况选择地域和资源组。
单击上方的集群管理页签。
在集群管理页面,单击相应集群所在行的详情。
配置JDBC以访问ClickHouse集群,详情请参见ClickHouse JDBC driver:https://github.com/ClickHouse/clickhouse-jdbc
通过负载均衡器 SLB 访问 ClickHouse 集群配置 SLB 服务,详情请参见配置实例:https://help.aliyun.com/document_detail/86451.htm通常情况下,ClickHouse 使用 SLB 服务仅需要配置 HTTP 及 TCP 两种协议的监听,如果您有需要,也可以配置HTTPS的监听。配置监听详情,请参见添加TCP监听、添加HTTP监听和添加HTTPS监听 。
添加 TCP 监听:https://help.aliyun.com/document_detail/85995.htm
添加 HTTP 监听:https://help.aliyun.com/document_detail/85949.htm
添加 HTTPS 监听:https://help.aliyun.com/document_detail/86438.htm
#注意#
TCP监听所使用的虚拟服务器组,其端口应为ClickHouse通过TCP连接到服务器的端口,默认为9000。您可以在EMR控制台ClickHouse服务的配置页面,在搜索区域搜索tcp_port参数,参数值即为TCP端口。
HTTP监听所使用的虚拟服务器组,其端口应为ClickHouse通过HTTP连接到服务器的端口,默认为8123。您可以在EMR控制台ClickHouse服务的配置页面,在搜索区域搜索http_port参数,参数值即为HTTP端口。
配置 JDBC 以访问 ClickHouse 集群,详情请参见ClickHouse JDBC driver:
https://github.com/ClickHouse/clickhouse-jdbc
后续
概述
ClickHouse 运维
数据导入
常见问题
获取更详细的 EMR ClickHouse 相关信息,可至产品文档页查看:
https://help.aliyun.com/document_detail/212195.html
扫描下方二维码加入阿里云 EMR 相关产品钉钉交流群一起参与讨论吧!