ClickHouse之入门学习-单节点安装 / 集群的建立 / 基本命令操作-日志系列引擎(2 )

ClickHouse之入门学习-单节点安装 / 集群的建立 / 基本命令操作-日志系列引擎(2 )

一 单节点安装
1 安装curl工具

yum install -y curl

2 添加clickhouse的yum镜像

curl -s https://packagecloud.io/install/repositories/altinity/clickhouse/script.rpm.sh | sudo bash

3 检查镜像情况

 yum list | grep clickhouse
(含以下两个部件 : 
clickhouse-client.x86_64                    20.5.4.40-1.el7            @Altinity_clickhouse
clickhouse-common-static.x86_64             20.5.4.40-1.el7            @Altinity_clickhouse)

4 安装clickhouse的服务端和客户端

yum install -y clickhouse-server clickhouse-client

5 启动服务端

service clickhouse-server start 

6 启动交互式客户端(在机器根目录下启动)

clickhouse-client -m      (加上-m 之后,在客户端可以多行输入)

二 建立clickhouse集群
1 启动zookeeper ,在每台机器的 /etc 目录下编写配置文件 /etc/metrika.xml

<yandex>
<clickhouse_remote_servers>             //clickhouse的集群 ,分三块,每个节点一块
    <clickhouse>   //集群的名字
        <shard>     //块
             <internal_replication>true</internal_replication>
            <replica>
                <host>linux03</host>
                <port>9000</port>
            </replica>
        </shard>
        <shard>
            <replica>
                <internal_replication>true</internal_replication>
                <host>linux04</host>
                <port>9000</port>
            </replica>
        </shard>
        <shard>
            <internal_replication>true</internal_replication>
            <replica>
                <host>linux05</host>
                <port>9000</port>
            </replica>
        </shard>
    </doit>
</clickhouse_remote_servers>

 //zookeeper的集群
<zookeeper-servers>                               
  <node index="1">
    <host>linux03</host>
    <port>2181</port>
  </node>

  <node index="2">
    <host>linux04</host>
    <port>2181</port>
  </node>
  
  <node index="3">
    <host>linux05</host>
    <port>2181</port>
  </node>
</zookeeper-servers>

//添加配置文件的当前节点域名 ,集群的每台机器都需要配置,配置的是哪台就写哪台机器的域名
<macros> 
    <replica>linux03</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>

2 开启远程访问权限(三台虚拟机的clickhouse远程连接访问权限/称一个节点拥有一个分片)

进入机器的根目录下  /etc/clickhouse-server/  目录下
vi config.xml;
进入配置文件中,在以下备注的这段代码下方添加 :  <listen_host>::</listen_host> 
 <!--
    <listen_host>::1</listen_host>
    <listen_host>127.0.0.1</listen_host>
    -->
然后:wq!保存退出

3 编写完成后需要重启虚拟机 , "三台一起重启"reboot

4 启动集群中所有的 clickhouse 服务端和客户端

service clickhouse-server start 
clickhouse-client -m

5 在每台clickhouse的客户端中创建一个普通的表

create table tb_log(id UInt16, name String) ENGINE=TinyLog;

6 创建一个分布式表==>Distributed(集群名, 当前库名, tb_log, id–分区字段);

create table tb_distribute(id UInt16, name String) ENGINE=Distributed(clickhouse, db_ck, tb_log, id);

7 向分布式表中插入的数据会被分散到集群中的各个节点上 ;
向集群中某个关联的普通表中插入数据 ;

insert into tb_distribute(1,'zss');
insert into tb_distribute(2,'yss');
insert into tb_distribute(3,'tss');

在分布式表中(每台机器中的 tb_log表中)可以查看存储的数据,插入的数据是分布式存储在 clickhouse 集群中的 .

select * from tb_log

8 注意zookeeper的正常启动

三 shell客户端操作数据库的基本命令–>表类型为日志系列引擎
1 查看/展示数据库

show databases;

2 创建一个数据库

create database db_clickhouse;

3 使用/进入数据库

use db_clickhouse;

4 查看当前 / 正在使用的数据库

select currentDatabase()

5 进入数据库后,展示数据库的表单

show tables;

6 删除表

drop table tb_data;

7 创建表(入门实例)==>TinyLog引擎(指表的类型) 向表中插入内容

create table if not exists tb_user(      //判断如果这个表在当前数据库中不存在
uid  UInt64 ,                           //整数类型:Int8/16/32/64  正数-负数    UInt8/16/32/64 只有正数
name String ,
age  UInt8,
sal  Float64 ,                         //小数类型:Float32/64
gender String 
) engine=TinyLog ;                     //TinyLog : 微小的/最简单的表日志系列引擎
insert into tb_user values(1001,'zss',23,10000,'M'),(1002,'lss',33,20000,'F') ;

8 创建表==>StripeLog引擎 向表中插入内容

create table if not exists tb_stripeLog(
uid  UInt64 ,
name String ,
age  UInt8,
sal  Float64 ,
gender String
) engine=StripeLog ;
//查看表信息
desc tb_stripeLog;
//插入内容
insert into tb_stripeLog values(1001,'zss',23,10000,'M'),(1002,'lss',33,20000,'F') ;

9 查询数据存储路径( 机器中的哪个位置 ) :

引擎 : TinyLog
/var/lib/clickhouse/data/doit/tb_user
最终查询的数据存储的结果为以下几个文档, 每个字段都是分别存储在一个专门属于自己的文件中的;
uid.bin
name.bin
age.bin
sal.bin
gender.bin

引擎 : StripeLog
查询数据存储路径 : /var/lib/clickhouse/data/doit/tb_stripeLog
最终数据存储结果为以下几个文档:
data.bin
index.mrk
sizes.json

10 创建有日期( Date )数据类型的表单并插入内容

create table if not exists tb_date(
id  UInt8 ,
name String ,
brithday	date
) engine=TinyLog ;
//插入内容,不与创建表单连着写上这段代码
insert into tb_date values(1,'zss','1993-02-03'),(2,'1990-08-09') ;

11 创建有数组( Array )数据类型的表单并插入内容

create table if not exists tb_array(
id  UInt8 ,
name String ,
age  UInt8,
gender  String ,
hobby	Array(String)
) engine=TinyLog ;
//查看表单信息后再插入内容,不与创建表单时连起来使用
insert into tb_array values(1,'zss',23,'M',['sing','running']),(2,'lii',33,'F',['shopping','sing','dancing']) ;

//将数组里面的字段都转为 大写
SELECT 
    uid,
    name,
    arrayMap(x -> upper(x), hobby)    //查找指定字段,并将数组里面的元素都转为大写
FROM tb_array

12 创建数组( Array )数据类型的表单并插入内容, 使用array join 将数组行转为列 ,一 一对应

create table tb_arr_join(
arr1 Array(String) ,
arr2 Array(Int8)
)engine=TinyLog ;
insert into tb_arr_join values(['a','b','c'] , [1,2,3]) ;
select * from tb_arr;
┌─arr1──────────┬─arr2────┐
│ ['a','b','c'] │ [1,2,3] │
└───────────────┴─────────┘
select
a1,
a2
from tb_arr_join 
array join 
arr1 as a1,
arr2 as a2 ;
┌─a1─┬─a2─┐
│ a  │  1 │
│ b  │  2 │
│ c  │  3 │
└────┴────┘

13 数据块演示(创建表和向表中插入内容代码连在一起写在 txt文档中,一起复制粘贴到 clickhouse客户端运行 )==> StripeLog

create table tb_block(
uid Int8 ,
name String ,
gender String ,
age UInt8 
)engine = **StripeLog** ;
insert into tb_block values(1,'zss','M',23);
insert into tb_block values(2,'lss','M',22),(3,'ada','F',34);

查询结果

select * from tb_block;

结果如下 :
在这里插入图片描述
将以上两个数据块合并成一个数据块 ,操作如下 :

SELECT *
FROM tb_block
ORDER BY age DESC;

结果如下所示 :
在这里插入图片描述
14 数据的运算及数据类型的转换(这里没有指定在哪个表中)

select 45+23;

结果为 :
在这里插入图片描述

select '45'+23 ;     //报错 ,String类型不可以与Int类型进行运算,需要将其转型

转型后代码如下 :

select toInt8('45')+23;

结果如下所示
在这里插入图片描述

四 java客户端连接clickhouse的基本操作(入门程序)
1 创建表并插入内容

create table if not exists tb_a(
id Int32,
name String,
gender String,
age Int32)engine=TinyLog;
insert into tb_a values (1,'zss','M',18)(2,'lii','F',16);

2 在java客户端创建一个maven项目 ,在 pom.xml 配置文件中导入一下代码,将clickhouse jar包导入 :

<dependencies>
    <dependency>
        <groupId>ru.yandex.clickhouse</groupId>
        <artifactId>clickhouse-jdbc</artifactId>
        <version>0.1.54</version>
    </dependency>
</dependencies>

3 新建一个 .java文件,在文件中写入一下代码 ,可以连接到clickhouse查询到特定表格的特定内容 ,操作如下 :

public class ClientHouseTest01 {
    public static void main(String[] args) throws Exception {
        //注册驱动
        Class.forName("com.clickhouse.client.ClientHouseTest01");      //class文件的相对路径
        //获取连接对象
        String path = "jdbc:clickhouse://doit03:8123/doit";              //查询内容所在的位置,哪个节点哪个数据库中
        Connection connection = DriverManager.getConnection(path);

        //获取执行SQL对象
        Statement statement = connection.createStatement();
        //执行SQL语句
        ResultSet resultSet = statement.executeQuery("select * from tb_a");

        //得到结果集
        while (resultSet.next()){
            int id = resultSet.getInt("id");
            String name = resultSet.getString("name");
            String gender = resultSet.getString("gender");
            int age = resultSet.getInt("age");
            System.out.println(id+"---"+name+"---"+gender+"---"+age);
        }
        //关流
        resultSet.close();
        statement.close();
        connection.close();
    }
}

4 注意事项 :

  1. 启动java程序之前 ,确保clickhouse服务端和shell客户端是开启状态的;
  2. 查询表内容的路径要确定好是在哪个节点的哪个数据库中;
  3. 确保clickhouse的集群都将shell客户端开启了 ;
  4. 确保将clickhouse的config.xml文件中的"开发访问权限"修改好了;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值