Clickhouse从单节点到集群搭建详解以及分布式分表设计,mysql整表同步,表主键去重以及脚本增删改查,以及可视化工具DBeaver推荐详解

本文主要是介绍Clickhouse从单节点到集群搭建详解以及分布式分表设计,mysql整表同步,表主键去重以及脚本增删改查,以及可视化工具DBeaver推荐详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一.背景

参考:ClickHouse高性能分布式分析数据库

二.分布式设计

原始数据表A:a服务器

分表B1:a服务器 分表B2:b服务器 分表B3:c服务器

分布式表C:a服务器
在这里插入图片描述

三.搭建
1.单节点搭建
#使用脚本安装yum源
curl -s https://packagecloud.io/install/repositories/altinity/clickhouse/script.rpm.sh | sudo bash
#yum 安装 server 以及 client
sudo yum install -y clickhouse-server clickhouse-client# yum下载的数据一般都在/etc/init.d目录下
#查看是否安装完成
sudo yum list installed 'clickhouse*'# 对外开放
cd /etc/clickhouse-server
vim config.xml
<listen_host>0.0.0.0</listen_host># 开机启动clickhouse-server 
# systemctl enable clickhouse-server
# systemctl start clickhouse-server
2.集群搭建(三台机器)

在这里插入图片描述

zookeeper搭建参考centos7搭建kafka集群

# 三台服务器依次进行一下操作
vim config.xml
<!-- 外部配置文件 -->
<include_from>/etc/clickhouse-server/metrika.xml</include_from>cd /etc/clickhouse-server
vim metrika.xml<yandex>
<!-- 集群配置 -->
<clickhouse_remote_servers><!-- 3分片1备份 --><cluster_3shards_1replicas><!-- 数据分片1  --><shard><replica><host>10.8.*.147</host><port>9000</port></replica></shard><!-- 数据分片2  --><shard><replica><host>10.8.*.62</host><port> 9000</port></replica></shard><!-- 数据分片3  --><shard><replica><host>10.8.*.239</host><port>9000</port></replica></shard></cluster_3shards_1replicas>
</clickhouse_remote_servers>
<!-- zk配置  -->
<zookeeper-servers><node index="1"><host>10.8.*.147</host><port>2181</port></node><node index="2"><host>10.8.*.62</host><port>2181</port></node><node index="3"><host>10.8.*.239</host><port>2181</port></node></zookeeper-servers>
</yandex>

查看集群是否搭建成功

# 进入客户端
clickhouse-clientselect * from system.clusters;

在这里插入图片描述

四.Clickhouse表设计
4.1mysql整表同步
# 进入客户端
clickhouse-clientCREATE TABLE clickhousedb.clickhousetablename ENGINE = MergeTree ORDER BY xxxxid AS SELECT * FROM mysql('ip:3306', 'mysqldbname', 'mysqltablename', 'mysqluser', 'mysqlpwd');# 查看迁移后的数据量
select count(1) from clickhousetablename;

在这里插入图片描述

4.2分布式表设计
# 分表设计(a,b,c三台服务器)
CREATE TABLE test.ontime_local (
`ip` Nullable(String),`id` Int32,`media` Int8,`type` Int8,`page_id` String,`home_id` Nullable(String),`obj_name` Nullable(String),`img_url` Nullable(String),`c_url` Nullable(String),`company_url` Nullable(String),`email` Nullable(String),`tel` Nullable(String),`vocation` Nullable(String),`address` Nullable(String),`markers` Nullable(String),`country` Nullable(String),`country_code` Nullable(String),`country_code_iso` Nullable(String),`country_code_iso2` Nullable(String),`province` Nullable(String),`city` Nullable(String),`district` Nullable(String),`street` Nullable(String),`fans` Nullable(String),`lik` Nullable(String),`brief` Nullable(String),`source_kw` Nullable(String),`to_company` Nullable(String),`img_status` Int32,`is_upload` Int32,`twitter` Nullable(String),`linkedin` Nullable(String),`pinterest` Nullable(String),`instagram` Nullable(String),`issuu` Nullable(String),`youtube` Nullable(String),`google` Nullable(String),`times` Nullable(DateTime),`update_time` Nullable(DateTime),`status` Nullable(String)
) ENGINE = MergeTree ORDER BY id SETTINGS index_granularity = 8192
# 分布式表设计
CREATE TABLE test(数据库名).ontime_all ENGINE = Distributed(cluster_3shards_1replicas(集群名), test(数据库名), ontime_local(表名), rand())
# 迁移数据到分布式表
INSERT INTO test.ontime_all SELECT * FROM jwt_client;

查看每个节点分表的数据情况
在这里插入图片描述
查看分布式表的数据情况
在这里插入图片描述

4.3 ReplacingMergeTree根据主键去重
# 根据c_url字段进行去重
CREATE TABLE tablename (c_url String,facebook_content String,facebook_img String,facebook_time String,facebook_time_sort Int64,main_id String,update_time Int64,post_id String,create_date date
) ENGINE = ReplacingMergeTree(create_date, (c_url), 8192);

CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1],name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2],...
) ENGINE = ReplacingMergeTree([ver])
[PARTITION BY expr]
[ORDER BY expr]
[PRIMARY KEY expr]
[SAMPLE BY expr]
[SETTINGS name=value, ...]# 官网参考案例
CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1],name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2],...
) ENGINE [=] ReplacingMergeTree(date-column [, sampling_expression], (primary, key), index_granularity, [ver])
4.4 python脚本增删改查操作clickhouse
# -*- coding: utf-8 -*-
# @Time    : 2020/4/26 20:13
# @Author  :import datetime
from decimal import Decimalfrom clickhouse_driver import Clientclass ClickHouse(object):"""clickhouse读写封装"""def __init__(self, host='ip', port='9000', user='default'):self.client = Client(host=host, port=port, user=user)def query(self, sql):"""查询"""ans = self.client.execute(sql, with_column_types=True)def time_transform(obj):"""时间转换处理"""if isinstance(obj, datetime.datetime):return str(obj)elif isinstance(obj, datetime.date):return str(obj)elif isinstance(obj, Decimal):return float(obj)else:return objreturn dict(zip((i[0] for i in ans[1]), (time_transform(ob) for ob in ans[0][0])))def bulk_insert(self, db_name, table_name, kwargs_list):"""批量插入 建议一次性插入数据量大于1000条:param db_name::param table_name::param kwargs_list::return:"""sql = 'INSERT INTO  {db_name}.{table_name}(%s)values'.format(db_name=db_name, table_name=table_name)keys = kwargs_list[0].keys()sql_2 = sql % ",".join(keys)ans = self.client.execute(sql_2, params=kwargs_list)return ansif __name__ == '__main__':click = ClickHouse()kwargs_list = [{"id": 555555, "name": "东莞测试"},{"id": 666666, "name": "东莞测试"},{"id": 777777, "name": "东莞测试"},{"id": 888888, "name": "东莞测试"},{"id": 999999, "name": "东莞测试"}]# test.mytest# 批量插入click.bulk_insert("test", "mytest", kwargs_list)sql = "select * from test.mytest where id=555555;"result = click.query(sql)print(result)# 单条更新操作
ALTER TABLE test.f_kw_url UPDATE ip='ddd112.1112.111.222' where id=11325362;# 单条删除操作
ALTER TABLE test.f_kw_url DELETE where id=999999;
五.Clickhouse可视化工具DBeaver推荐

在这里插入图片描述

参考:https://clickhouse.tech/docs/en/engines/table_engines
参考:https://www.jianshu.com/p/20639fdfdc99
推荐:http://blog.itpub.net/69965230/viewspace-2690052/

这篇关于Clickhouse从单节点到集群搭建详解以及分布式分表设计,mysql整表同步,表主键去重以及脚本增删改查,以及可视化工具DBeaver推荐详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/500095

相关文章

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

SQL中的外键约束

外键约束用于表示两张表中的指标连接关系。外键约束的作用主要有以下三点: 1.确保子表中的某个字段(外键)只能引用父表中的有效记录2.主表中的列被删除时,子表中的关联列也会被删除3.主表中的列更新时,子表中的关联元素也会被更新 子表中的元素指向主表 以下是一个外键约束的实例展示

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

服务器集群同步时间手记

1.时间服务器配置(必须root用户) (1)检查ntp是否安装 [root@node1 桌面]# rpm -qa|grep ntpntp-4.2.6p5-10.el6.centos.x86_64fontpackages-filesystem-1.41-1.1.el6.noarchntpdate-4.2.6p5-10.el6.centos.x86_64 (2)修改ntp配置文件 [r

如何去写一手好SQL

MySQL性能 最大数据量 抛开数据量和并发数,谈性能都是耍流氓。MySQL没有限制单表最大记录数,它取决于操作系统对文件大小的限制。 《阿里巴巴Java开发手册》提出单表行数超过500万行或者单表容量超过2GB,才推荐分库分表。性能由综合因素决定,抛开业务复杂度,影响程度依次是硬件配置、MySQL配置、数据表设计、索引优化。500万这个值仅供参考,并非铁律。 博主曾经操作过超过4亿行数据

HDFS—集群扩容及缩容

白名单:表示在白名单的主机IP地址可以,用来存储数据。 配置白名单步骤如下: 1)在NameNode节点的/opt/module/hadoop-3.1.4/etc/hadoop目录下分别创建whitelist 和blacklist文件 (1)创建白名单 [lytfly@hadoop102 hadoop]$ vim whitelist 在whitelist中添加如下主机名称,假如集群正常工作的节

Hadoop集群数据均衡之磁盘间数据均衡

生产环境,由于硬盘空间不足,往往需要增加一块硬盘。刚加载的硬盘没有数据时,可以执行磁盘数据均衡命令。(Hadoop3.x新特性) plan后面带的节点的名字必须是已经存在的,并且是需要均衡的节点。 如果节点不存在,会报如下错误: 如果节点只有一个硬盘的话,不会创建均衡计划: (1)生成均衡计划 hdfs diskbalancer -plan hadoop102 (2)执行均衡计划 hd

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置