• ClickHouse初始+安装


    ClickHouse是俄罗斯的Yandex于2016年开源的列式存储数据库(DBMS),使用C++语言编写,主要用于在线分析处理查询(OLAP),能够使用SQL查询实时生成分析数据报告。
     

    一、特点

    1.列式存储

    对于列的聚合,计数,求和等统计操作优于行式存储
    由于某一列的数据类型都是相同的,针对数据存储更容易进行数据压缩,每一列选择更优的数据压缩算法,大大提高了数据的压缩比重。
    由于数据压缩比较好,一方面节省了磁盘空间,另一方面对cache也有很大的发挥空间
     

    2.DBMS的功能

    几乎覆盖了标准SQL的大部分语法,包括DDL和DML,以及配套的各种函数,用户管理及权限管理,数据的备份与恢复
     

    3.多样化引擎

    clickhouse和MySQL类似,把表级的存储引擎插件化,根据表的不同需求可以设定不同的存储引擎。目前包括合并树、日志、接口和其它四大类20多种引擎
     

    4.高吞吐写入能力

    clickhouse采用类LSM Tree的结构,数据写入后定期在后台compaction。通过类LSM Tree的结构,clickhouse在数据导入时全部是顺序append写,写入后数据段不可更改,在后台compaction时也是多个段merge sort后顺序写会磁盘。顺序写的特性,充分利用了磁盘的吞吐能力,即便在HDD上也有着优异的写入性能。
    官方公开benchmark测试显示能够达到50MB-200MB/s的写入吞吐能力,按照每行100byte估算,大约相当于50w-200w条/s的写入速度
     

    5.数据分区与线程级并行

    clickhouse将数据划分为多个partition,每个partition再进一步划分为多个index granularity(索引粒度),然后通过多个CPU核心分别处理其中的一部分来实现并行数据处理。在这种设计下,单条query就能利用整机所有CPU。极致的并行处理能力,极大的降低了查询延时。
    所以,clickhouse即使对于大量数据的查询也能够化整为零平行处理。但是有一个弊端就是对于单条查询使用多CPU,就不利于同时并发多条查询。所以对高QPS的查询业务,clickhouse并不是强项。
     
    适合存储大宽表,基于大宽表的聚合操作
     

    6.对比

    单表查询
     
    关联查询(尽量避免join)
    关联时会将右表加载到内存,和左表比对
     
    结论:clickhouse像很多OLAP数据库一样,单表查询速度优于关联查询,而且clickhouse的两者差距更为明显。
     
     

    二、安装部署

     

    1.环境准备

     
    Centos操作:
    查看系统限制
    ulimit -a
    MacBook-Pro:bin FengZhen$ ulimit -a
    core file size          (blocks, -c) 0
    data seg size           (kbytes, -d) unlimited
    file size               (blocks, -f) unlimited
    max locked memory       (kbytes, -l) unlimited
    max memory size         (kbytes, -m) unlimited
    open files                      (-n) 2560
    pipe size            (512 bytes, -p) 1
    stack size              (kbytes, -s) 8176
    cpu time               (seconds, -t) unlimited
    max user processes              (-u) 5333
    virtual memory          (kbytes, -v) unlimited
    修改资源限制
    vim /etc/security/limits.conf
    fengzhen@group soft noffile 65536
    fengzhen@group hard noffile 65536
    fengzhen@group soft nproc 131072
    fengzhen@group hard nproc 131072 
    第一列标记用户,如果为所有用户标记,直接*
    第二列soft、hard,强软限制,一般软<=硬,标记-则表示两者一起配置,值相同
    第三列 noffile:可打开文件数    nproc:进程数
    第四列具体数值
     
    vim /etc/security/limits.d/20-nproc.conf
    将上边四行也放入这个里边
    上述配置重新登录即可
     
    安装依赖
    yum install -y libtool
    yum install -y *unixODBC*
     
    centos取消selinux
    vim /etc/selinux/config
    SELINUX=disabled
    默认是enforcing开启状态
    查看:getenforce
    临时生效:setenforce 0(关闭) 1(开启)
     
     
    *MacOS操作:
    vim /Library/LaunchDaemons/limit.maxfiles.plist
     
    #添加以下内容
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
            "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
      <dict>
        <key>Label</key>
        <string>limit.maxfiles</string>
        <key>ProgramArguments</key>
        <array>
          <string>launchctl</string>
          <string>limit</string>
          <string>maxfiles</string>
          <string>524288</string>
          <string>524288</string>
        </array>
        <key>RunAtLoad</key>
        <true/>
        <key>ServiceIPC</key>
        <false/>
      </dict>
    </plist>
     
    # 然后执行以下命令
    sudo chown root:wheel /Library/LaunchDaemons/limit.maxfiles.plist
     
    # 然后重启,通过 ulimit -n看是否生效
    ulimit -n

    2.安装

    A.Mac【启动失败】

    chmod a+x ./clickhouse
    ./clickhouse
     

    A.Mac + docker【启动失败】

    拉取服务端
    docker pull yandex/clickhouse-server
    拉取客户端
    docker pull yandex/clickhouse-client
     
    启动容器
    docker run -d --name ck-server --ulimit nofile=262144:262144 -p 8123:8123 -p 9000:9000 -p 9009:9009 --volume=/Users/FengZhen/Desktop/Hadoop/clickhouse/some_clickhouse_database:/var/lib/clickhouse -v /Users/FengZhen/Desktop/Hadoop/clickhouse/etc/:/etc/clickhouse-server/ yandex/clickhouse-server
     
    修改/etc/config.xml
    注释去掉<listen_host>::</listen_host>,表示不做IP限制
    重启
     
    报错
    MacBook-Pro:clickhouse FengZhen$ docker logs -f -t --since="2018-03-31" --tail=100 ck-server
    2022-03-31T08:38:29.202014966Z Configuration file '/etc/clickhouse-server/config.xml' isn't readable by user with id '101'
     
    查看服务 $ docker ps
    进入到这个容器中 $ docker exec -it ck-server /bin/bash
    然后执行 $ clickhouse-client
    进入容器成功,再执行 :) show databases;  即可查看数据库
     
    测试
    CREATE TABLE default.user_table(id UInt16, name String, age UInt16 ) ENGINE = TinyLog();
     

    B.centos-自动

    sudo yum install -y yum-utils
    sudo yum-config-manager --add-repo https://packages.clickhouse.com/rpm/clickhouse.repo
    sudo yum install -y clickhouse-server clickhouse-client
     
    sudo /etc/init.d/clickhouse-server start
    clickhouse-client # or "clickhouse-client --password" if you set up a password.
     

    C.centos-手动【推荐】

    下载安装包
    https://packages.clickhouse.com/rpm/stable/
     
    clickhouse-client-22.3.2.2-2.noarch.rpm
    clickhouse-common-static-22.3.2.2-2.x86_64.rpm
    clickhouse-common-static-dbg-22.3.2.2-2.x86_64.rpm
    clickhouse-server-22.3.2.2-2.noarch.rpm
     
    20.5版本:final支持多线程
    20.6.3版本:支持explain
    20.8:新引擎:实时同步MySQL
     
    clickhouse目录下:
    rpm -ivh *.rpm
    会提示输入密码,用户:default
    1234qwer
     
    确认是否安装
    rpm -qa|grep clickhouse
    [root@superset-BI rpm]# rpm -qa|grep clickhouse
    clickhouse-client-22.3.2.2-2.noarch
    clickhouse-common-static-22.3.2.2-2.x86_64
    clickhouse-server-22.3.2.2-2.noarch
    clickhouse-common-static-dbg-22.3.2.2-2.x86_64
     
    默认路径
    conf -> /etc/clickhouse-server /etc/clickhouse-client 
    bin -> /usr/bin/
    lib -> /val/lib/clickhouse
    log -> /var/log/clickhouse
     
    查看/etc/clickhouse-server目录下文件
    cd /etc/clickhouse-server
    [root@superset-BI clickhouse-server]# ll
    总用量 80
    dr-x------ 2 clickhouse clickhouse  4096 3月  31 18:19 config.d
    -r-------- 1 clickhouse clickhouse 61569 3月  18 01:01 config.xml
    dr-x------ 2 clickhouse clickhouse  4096 3月  31 18:19 users.d
    -r-------- 1 clickhouse clickhouse  6248 3月  18 01:01 users.xml
     
    config.xml    服务端配置
    users.xml    参数配置(CPU、最大内存使用量)
     
    上述两个文件为只读,添加可编辑权限
    chmod +w config.xml 
    chmod +w users.xml 
     
    取消IP限制
    vim config.xml
    不对IP做限制
    <listen_host>::</listen_host>
     
    数据目录,可以自己修改,不建议改
    <path>/val/lib/clickhouse</path>
     
    日志
    <level>trace</level>
    <log>/var/log/clickhouse-server/clickhouse-server.log</log>
    <errorlog>/var/log/clickhouse-server/clickhouse-server.err.log</lerrorlogog>
     
     
    常用命令
    sudo clickhouse start
    sudo clickhouse status
    sudo clickhouse stop
    sudo clickhouse restart
     
    启动
    [root@superset-BI clickhouse-server]# sudo clickhouse start
     chown -R clickhouse: '/var/run/clickhouse-server/'
    Will run su -s /bin/sh 'clickhouse' -c '/usr/bin/clickhouse-server --config-file /etc/clickhouse-server/config.xml --pid-file /var/run/clickhouse-server/clickhouse-server.pid --daemon'
    Waiting for server to start
    Waiting for server to start
    Server started
     
    [root@superset-BI clickhouse-server]# sudo clickhouse status
    /var/run/clickhouse-server/clickhouse-server.pid file exists and contains pid = 19428.
    The process with pid = 19428 is running.
     
    启动成功后使用client连接(端口默认9000)
    clickhouse-client
        -m:支持换行
        -h:主机名
        -p:端口
        --password:如果配置了密码
        --query:可直接写SQL
       
    clickhouse-client -m --password
    [root@superset-BI ~]# clickhouse-client -m --password
    ClickHouse client version 22.3.2.1.
    Password for user (default):
    Connecting to localhost:9000 as user default.
    Connected to ClickHouse server version 22.3.2 revision 54455.
    superset-BI :)

    建表测试

    superset-BI :) CREATE TABLE default.user_table(id UInt16, name String, age UInt16 ) ENGINE = TinyLog();
    CREATE TABLE default.user_table
    (
        `id` UInt16,
        `name` String,
        `age` UInt16
    )
    ENGINE = TinyLog
    Query id: 42ed57fd-76a1-4996-be45-d47804b1c013
    Ok.
    0 rows in set. Elapsed: 0.011 sec. 
    superset-BI :) show tables in default;
    SHOW TABLES FROM default
    Query id: 74e494da-566e-46ae-a32d-4cfca95e363d
    ┌─name───────┐
    │ user_table │
    └────────────┘
    1 rows in set. Elapsed: 0.002 sec. 

    成功。

     
     
  • 相关阅读:
    Spring boot 使用多个RedisTemplate
    Spring boot 连接Redis实现HMSET操作
    Spring boot 工具类静态属性注入及多环境配置
    向量空间模型(Vector Space Model)的理解
    双数组Trie树中叶子结点check[t]=t的证明
    谈谈我对隐马尔可夫模型的理解
    Information Retrieval 倒排索引 学习笔记
    朴素贝叶斯文本分类简单介绍
    Python Thrift 简单示例
    迭代器模式(Iterator)
  • 原文地址:https://www.cnblogs.com/EnzoDin/p/16084223.html
Copyright © 2020-2023  润新知