ClickHouse是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS)。可以用于PB级大数据实时分析,特点呢,就是快,比sparksql 和 impala还要快很多,同样也支持利用sql进行分析,相对于hadoop生态的那套,安装和学习成本要低很多
clickhouse中文文档
https://clickhouse.tech/docs/zh/
参考博客
https://www.jianshu.com/p/20639fdfdc99
https://www.jianshu.com/p/ae45e0aa2b52
- 创建clickhouse用户 (root用户执行)
useradd clickhouse -d /home/clickhouse
passwd clickhouse
2.上传安装包 (clickhouse用户执行)rz
-
添加sudo 权限(root用户执行)
chmod u+w /etc/sudoers
vim /etc/sudoers
添加一行,保存并退出
chmod u-w /etc/sudoers
安装(clickhouse用户执行)
cd /home/clickhouse
sudo rpm –ivh *
5.启动服务
sudo service clickhouse-server start
6.clickhouse-client 命令直接连接执行 selet 1 验证
7.配置文件所在目录
8.users.xml 创建用户
- clickhouse-client连接参数
--host, -h -– 服务端的 host 名称, 默认是 ‘localhost’。 您可以选择使用 host 名称或者 IPv4 或 IPv6 地址。
--port – 连接的端口,默认值: 9000。注意 HTTP 接口以及 TCP 原生接口是使用不同端口的。
--user, -u – 用户名。 默认值: default。
--password – 密码。 默认值: 空字符串。
--query, -q – 非交互模式下的查询语句.
--database, -d – 默认当前操作的数据库. 默认值: 服务端默认的配置 (默认是 default)。
--multiline, -m – 如果指定,允许多行语句查询(Enter 仅代表换行,不代表查询语句完结)。
--multiquery, -n – 如果指定, 允许处理用逗号分隔的多个查询,只在非交互模式下生效。
--format, -f – 使用指定的默认格式输出结果。
--vertical, -E – 如果指定,默认情况下使用垂直格式输出结果。这与 ‘–format=Vertical’ 相同。在这种格式中,每个值都在单独的行上打印,这种方式对显示宽表很有帮助。
--time, -t – 如果指定,非交互模式下会打印查询执行的时间到 ‘stderr’ 中。
--stacktrace – 如果指定,如果出现异常,会打印堆栈跟踪信息。
--config-file – 配置文件的名称
10.创建数据库(命令行执行)
create database tclydcdb ENGINE = Ordinary;
11.表结构同步
第一步创建Mysql到CLickhouse的映射表插入1条数据,这里可以随表
CREATE TABLE Orders ENGINE = MergeTree ORDER BY OrderID AS SELECT * FROM mysql('$ip:$port', '$database', '$table', '$user', '$pwd') limit 1;
第二步查询创建的表结构复制下来
show create table Orders;
第三步删除表
drop table Orders;
第四步将第二步复制的表结构里的Decimal字段类型进行变更然后执行即可
第五步插入数据
insert into Orders SELECT * FROM mysql('$ip:$port', '$database', '$table', '$user', '$pwd');
=======================================
=====>单机完成,开始集群搭建 两机一备(无备份)=======================================
12.在两台机器的/etc/hosts 文件中添加域名映射(Ip 主机名 域名)
13.配置
/etc/clickhouse-server/config.xml
<?xml version="1.0"?>
<yandex>
<!-- 日志 -->
<logger>
<level>trace</level>
<log>/var/lib/clickhouse/log/server.log</log>
<errorlog>/var/lib/clickhouse/log/error.log</errorlog>
<size>1000M</size>
<count>10</count>
</logger>
<!-- 端口 -->
<http_port>8123</http_port>
<tcp_port>9000</tcp_port>
<interserver_http_port>9009</interserver_http_port>
<!-- 本机域名 -->
<interserver_http_host>tv1-xxxx-java-01.ab.elong.com</interserver_http_host>
<!-- 监听IP -->
<listen_host>0.0.0.0</listen_host>
<!-- 最大连接数 -->
<max_connections>64</max_connections>
<keep_alive_timeout>3</keep_alive_timeout>
<!-- 最大并发查询数 -->
<max_concurrent_queries>16</max_concurrent_queries>
<!-- 单位是B -->
<uncompressed_cache_size>8589934592</uncompressed_cache_size>
<mark_cache_size>10737418240</mark_cache_size>
<!-- 存储路径 -->
<path>/var/lib/clickhouse/</path>
<tmp_path>/var/lib/clickhouse/tmp/</tmp_path>
<!-- user配置 -->
<users_config>users.xml</users_config>
<default_profile>default</default_profile>
<log_queries>1</log_queries>
<default_database>default</default_database>
<remote_servers incl="clickhouse_remote_servers" />
<zookeeper incl="zookeeper-servers" optional="true" />
<macros incl="macros" optional="true" />
<builtin_dictionaries_reload_interval>3600</builtin_dictionaries_reload_interval>
<!-- 控制大表的删除 -->
<max_table_size_to_drop>0</max_table_size_to_drop>
<include_from>/etc/clickhouse-server/metrika.xml</include_from>
</yandex>
/etc/clickhouse-server/metrika.xml
<yandex>
<!-- 集群配置 -->
<clickhouse_remote_servers>
<ck_cluster>
<!-- 数据分片1 -->
<shard>
<internal_replication>false</internal_replication>
<replica>
<host>tv1-xxxx-java-01.ab.elong.com</host>
<port>9000</port>
<user>xxxx</user>
<password>xxxx</password>
</replica>
</shard>
<!-- 数据分片2 -->
<shard>
<internal_replication>false</internal_replication>
<replica>
<host>tv1-xxxx-java-02.ab.elong.com</host>
<port>9000</port>
<user>xxxx</user>
<password>xxxx</password>
</replica>
</shard>
</ck_cluster>
</clickhouse_remote_servers>
<!—宏配置,相当于环境变量(这里先不用) -->
<!--<macros>
<replica>ck1</replica>
</macros>-->
<networks>
<ip>::/0</ip>
</networks>
<!-- 数据压缩算法 -->
<clickhouse_compression>
<case>
<min_part_size>10000000000</min_part_size>
<min_part_size_ratio>0.01</min_part_size_ratio>
<method>lz4</method>
</case>
</clickhouse_compression>
</yandex>
14.将目录下的这三个配置sz下载下来,传到第二台机器上
15.clickhouse-client命令行select * from system.clusters ;查看集群
16.集群搭建成功
中间有一个小细节,配置好集群之后,再启动,报UNKNOWN
然后进/var/lib/clickhouse目录下发现少了log文件夹
用clickhouse用户创建即可
17.建分布式表,利用前面的步骤在每台机器上建好表之后,就可以建分布式表了
分布表(Distributed)本身不存储数据,相当于路由,需要指定集群名、数据库名、数据表名、分片KEY,这里分片用rand()函数,表示随机分片。查询分布表,会根据集群配置信息,路由到具体的数据表,再把结果进行合并。
CREATE TABLE orders_all AS orders ENGINE = Distributed(ck_cluster,tclydcdb, orders, rand())
18.验证
ck01插入5条数据
insert into Orders SELECT * FROM mysql('$ip:$port', '$database', '$table', '$user', '$pwd') limit 5 ;
ck02插入5条数据
insert into Orders SELECT * FROM mysql('$ip:$port', '$database', '$table', '$user', '$pwd') limit 5,10;
ck01执行查询
查分布式表得到全量数据,查本地orders表只得到了在本机的5条。
到此为止,一个简单的集群就搭建完成。但是,在生产环境的话,如果某一台机器挂掉了,整个集群就不可用了,某一个硬盘坏掉了,部分数据就没了。呵呵
下期,就是高可用集群的搭建(两机两备);