Windows通过虚拟机的Ubuntu系统安装、配置、管理、远程访问ClickHouse

  • 1. 安装虚拟机
  • 2. 使用Ubuntu的官方预编译deb软件包
    • 2.1 apt-get命令
    • 2.2 密钥管理
    • 2.3 将特定地址添加到source.list的列表中并更新apt
    • 2.4 安装clickhouse-server和clickhouse-client
    • 2.5 启动clickhouse-server服务登录命令行客户端
  • 3. ClickHouse提供的接口
  • 4. 访问控制和用户管理
    • 4.1 用户配置文件users.xml
    • 4.2 profile配置详解
    • 4.3 users配置详解
    • 4.4 quotas配置详解
  • 5. ClickHouse远程连接
    • 5.1 修改config.xml配置文件
    • 5.2 测试远程登陆

1. 安装虚拟机

ClickHouse可以在任何具有x86_64, AArch64或PowerPC64LE CPU架构的Linux,FreeBSD或Mac OS X上运行。无法在Windows上运行,所以我推荐首先要在Windows系统安装Linux的虚拟机。MAC OS X的安装与配置我会放在下一篇(或有)写。

我选择的是vmware16 Pro,虚拟机系统Ubuntu20.04.3 LTS,这样系统要求就满足了。

2. 使用Ubuntu的官方预编译deb软件包

以下安装与编译的内容可以直接参考ClickHouse官方文档:ClickHouse Getting Started

2.1 apt-get命令

打开终端Terminal窗口,输入命令

sudo apt-get install apt-transport-https ca-certificates dirmngr

apt-get是一条linux命令,适用于deb包管理式的操作系统,主要用于自动从互联网的软件仓库中搜索、安装、升级、卸载软件或操作系统。使用apt-get的主流Linux系统包括Debian和Ubuntu变异版本。更多关于apt-get的信息可以参考:apt-get命令

用apt来替换apt-get命令也可以,事实上,我认为应该推荐直接使用apt,二者的区别要从这两个命令的背景和目的说起,简单来讲就是

apt = apt-get、apt-cache 和 apt-config 中最常用命令选项的集合。

但apt并不能完全向下兼容 apt-get 命令,兼容的命令可以参考 Linux中apt与apt-get的区别

那至于是否还可以继续用apt-get呢?目前还没有任何 Linux 发行版官方放出 apt-get 将被停用的消息,至少它还有比 apt 更多、更细化的操作功能。对于低级操作,仍然需要 apt-get。

所以我的建议是对于apt-get install这种apt可以兼容的命令,尽量选择直接使用apt替代apt-get,对于apt无法使用的操作再使用apt-get。

2.2 密钥管理

继续在Terminal输入命令

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv E0C56BD4

apt-key用于管理Debian Linux系统中的软件包密钥。每个发布的deb包,都是通过密钥认证的,apt-key用来管理密钥。-recv -key可以下载并添加到受信任密钥环中(不做安全检查,有风险)。关于密钥管理与验证测试可以参考 apt-key密钥管理

2.3 将特定地址添加到source.list的列表中并更新apt

继续在Terminal输入命令

echo "deb https://repo.clickhouse.com/deb/stable/main/" | sudo tee /etc/apt/sources.list.d/clickhouse.list
sudo apt-get udpate

注意这里不是运行deb命令,而是将这行命令添加到地址为source.list.d/clickhouse.list的文件中,tee命令会从标准输入设备读取数据,将其内容输出到标准输出设备,同时保存成文件。

第一行运行成功后,会输出deb https://repo.clickhouse.com/deb/stable/main/,并且切换到root用户(sudo -i)后

cd etc/apt/sources.list.d
vim clickhouse.d

你会发现存在一个叫做clickhouse.d的文件,并且打开后第一行就是刚刚写入的命令

然后输入第二行命令,更新apt-get。

2.4 安装clickhouse-server和clickhouse-client

继续在Terminal输入命令

sudo apt-get install -y clickhouse-server clickhouse-client

2.5 启动clickhouse-server服务登录命令行客户端

继续在Terminal输入命令

sudo service clickhouse-server start
clickhouse-client

第一行打开了服务,所以需要加sudo,第二行就可以启动命令行客户端了,启动后你会通过默认的default用户进入安装好的ClickHouse,界面如下:

关于Default用户的初始配置,clickhouse配置文件的修改,访问权限和账户管理,我会在4.访问控制和用户管理写到。

到这里已经就完成了clickhouse在Windows系统上的安装与使用,撒花!!尤其是看到退出clickhouse的命令行客户端的时候,她会说一句Happy new year. 不知道是因为年末临近所以这么说,还是会随着临近节日的不同而更改祝福,anyway有被暖到。

3. ClickHouse提供的接口

ClickHouse提供了两个网络接口

  • HTTP,包含文档,易于使用。
  • Native TCP,简单,方便使用。

考虑到实际需要,我建议你使用工具库,Yandex官方支持的项目有:

  • 命令行客户端
  • JDBC驱动
  • ODBC驱动
  • C++客户端

还有一些广泛的第三方库可以使用:

  • 第三方开发库(Python、PHP、Go、Swift、R、Java等)
  • 第三方集成库(关系型数据库、消息队列、流处理、对象存储等)
  • 可视化UI(Tabix、HouseOps等)

关于接口的说明文档,可以在 客户端接口 中查询。

4. 访问控制和用户管理

初次登陆会默认使用ClickHouse提供的default账号,这个账号有所有的权限,但是不能使用SQL驱动方式的访问权限和账户管理。default主要用于在其他用户还没有设置的情况从客户端登陆或者执行分布式查询。如果已经设置了开发者账户和管理员账户,我不建议继续使用default账户了。default账户的登录信息如下(密码为空):

clickhouse-client --host 127.0.0.1 --user default --port 9000

本段内容参考的官方文档:Access Control and Account Management

官方提供的3个步骤【命令行客户端快速新建用户】

  1. 为 default 用户开启 SQL驱动方式的访问权限和账户管理;
  2. 使用 default 用户登录并且创建所需要的所有用户。 不要忘记创建管理员账户 (GRANT ALL ON . WITH GRANT OPTION TO admin_user_account);
  3. 关闭 default 用户的权限并且禁用SQL驱动方式的访问权限和账户管理;

这里要说明的是,上面第2步从我的测试结果来看是行不通的,我无法通过default用户启用SQL驱动的方式来访问控制和管理账户,只能通过修改配置文件进行账户管理。在目前我还不知道为什么,如果我知道了我会回来更改。

ClickHouse支持使用两种方式配置访问实体:

  • 通过sql直接设置,这也是官方推荐的,但是需要至少一个用户帐户启用SQL驱动的访问控制和帐户管理,这需要使用第二种方式设置access_management的值为1(相当于开放SQL驱动方式的访问管理权限)
  • 通过配置文件users.xml,默认位置在/etc/clickhouse-server目录下,ClickHouse使用它来定义用户相关的配置项。

下面通过第二种方式,先对用户配置文件详解,再使用它定义新的用户与权限管理。

4.1 用户配置文件users.xml

打开Terminal,切换成root用户的根目录

cd etc/clickhouse-server

clickhouse-server文件夹下存放两个配置文件,config.xml和users.xml, 若想开放远程访问,则需要修改config.xml的配置参数,修改方法可以直接跳至5.ClickHouse远程连接

users.xml存储的是所有用户的配置,主要有三部分组成:profile,users,quotas

  • profiles:类似于用户角色,可以预先在这里定义多组profile,并为每组profile定义不同的配置项,可以实现配置的复用;
  • users:定义用户与设置权限;
  • quotas:限制一段时间内的资源使用等

配置参数详解有官方文档:Server Configuration Parameters
推荐几个我看过的总结文章:

  • clickhouse用户配置文件详解
  • clickhouse配置项users.xml详解
  • Clickhouse访问控制和账号管理

4.2 profile配置详解

<yandex><!-- Profiles of settings. --><profiles><!-- Default settings. --><default><!-- Maximum memory usage for processing single query, in bytes. --><max_memory_usage>10000000000</max_memory_usage><!-- Use cache of uncompressed blocks of data. Meaningful only for processing many of very short queries. --><use_uncompressed_cache>0</use_uncompressed_cache><load_balancing>random</load_balancing></default><developer><max_memory_usage>10000000000</max_memory_usage><use_uncompressed_cache>0</use_uncompressed_cache><load_balancing>random</load_balancing><force_index_by_date>0</force_index_by_date><distributed_product_mode>allow</distribute_product_mode><readonly>0</readonly></developer><inherit><profile>developer</profile><distributed_product_mode>deny</distributed_product_mode></inherit><readonly><readonly>1</readonly></readonly><readwrite><readonly>0</readonly><allow_ddl>1</allow_ddl></readwrite>

这是我的users.xml的profile定义,有五组profile配置:default、developer、inherit、readonly、readwrite

其中inherit是个继承示例,profile配置支持继承,实现继承的方式是在profile配置中先引入其他的profile名称,但若有冲突,后面的配置会覆盖之前继承的配置。

每个参数的具体含义和数值范围可以参考我推荐的几篇文章,readonly设为1表明所有查询类Querry权限是开放的,但无法做写入类的Querry操作,例如可以SELECT但不能INSERT INTO,readonly设为0表明查询和写入的权限都有。allow_ddl设为1表示DDL类命令是可以操作的,例如可以CREATE TABLE,不过这个默认值就是1,不设置应该也可以。

4.3 users配置详解

<users><!-- If user name was not specified, 'default' user is used. --><default><password></password><access_manegement>1</access_management><!-- List of networks with open access.To open access from everywhere, specify:<ip>::/0</ip>To open access only from localhost, specify:<ip>::1</ip><ip>127.0.0.1</ip>--><networks incl="networks" replace="replace"><ip>::/0</ip></networks><!-- Setting profile for user. --><profile>default</profile><!-- Quota for user. --><quota>default</quota></default><admin><password_sha256_hex>YOURPASSWORD</password_sha256_hex><networks incl="networks" replace="replace"><ip>::/0</ip></networks><profile>developer</profile><quota>default</quota></admin><!-- Example of user with readonly access. --><readonly><password></password><networks incl="networks" replace="replace"><ip>::1</ip><ip>127.0.0.1</ip></networks><profile>readonly</profile><quota>default</quota> </readonly>
</users>

我的users定义了三个用户:default、admin、readonly

  • readonly是只读用户,并且ip的设置是只允许本地访问;
  • admin是管理员账户,允许非本地访问,并且profile选择的是开发者profile。password的设置方式有三种:明文、SHA256加密、SHA1加密,明文不被推荐,可以选择SHA256加密的方式。打开Terminal,加密方法如下:
PASSWORD=$(base64 < /dev/urandom | head -c8); echo "PASSWORD"; echo -n $"PASSWORD" | sha256sum | tr -d '-'

运行后第一行会显示你的密码PASSWORD,第二行会显示加密后的一串SHA256加密后的密文。

关于用户设置的配置参数在官方文档里做了很好的解释:User Settings

4.4 quotas配置详解

quotas标签是限制了单位时间内的系统资源使用量,而不是限制单个查询的系统资源使用量,值为0表示不限制。我的配置中只有一个quotas设置。

<quotas><default><interval><!-- Length of interval. --><duration>3600</duration><!-- No limits. Just calculate resource usage for time interval. --><queries>0</queries><errors>0</errors><result_rows>0</result_rows><read_rows>0</read_rows><execution_time>0</execution_time></interval></default>
</quotas>

恭喜你看到这里,用户配置基本就结束了。你可以任意增加profile组,然后给任意用户配置不同的profiles,再赋予这些用户不同的权限。下面我要进行另一项工作了,申请远程登陆。

5. ClickHouse远程连接

我参考的是ClickHouse:允许远程连接 allow remote access

5.1 修改config.xml配置文件

还记得在4.1节我提过,存在用户配置文件users.xml的地方,还有另外一个配置文件叫做config.xml, 在这里面可以修改ClickHouse服务端监听端口的配置,如果你用命令

sudo -i
cd /.
cd var/lib/clickhouse
lsof -i :8123

查看监听端口的状态,你可能会发现,ClickHouse默认监听的是本地端口,因此需要修改config.xml中的配置,同样还是vim打开

cd /.
cd etc/clickhouse-server
vim config.xml

把配置中原本被注释掉的 <listen_host>::</listen_host> 取消注释就可以了。

<!-- Listen specified host. use :: (wildcard IPv6 address), if you want to accept connection both with IPv4 and IPv6 from everywhere. -->
<!-- Listen_host>::</listen_host> -->
<!-- Same for hosts with disabled ipv6: -->
<!-- <listen_host>0.0.0.0</listen_host> --><!-- Default values - try listen localhost on ipv4 and ipv6: -->
<!--
<listen_host>::1</listen_host>
<listen_host>127.0.0.1</listen_host>
-->
<!-- Don't exit if ipv6 or ipv4 unavailable, but listen_host with this protocal specified -->
<!-- <listen_try>0</listen_try> -->

5.2 测试远程登陆

虚拟机外,我使用Python的clickhouse_driver接口,虚拟机地址为HOSTIP,端口为9000,测试default用户的远程连接。

from clickhouse_driver import connectconn = connect(host=HOSTIP, user='default', password='', port=9000)
cursor = conn.cursor()
cursor.execute("SELECT * FROM tutorial.test)
cursor.fetchall()

返回了test表的全部数据,远程访问测试成功。

Windows通过虚拟机的Ubuntu系统安装、配置、管理、远程访问ClickHouse相关推荐

  1. 虚拟机安装ubuntu及配置mysql进行远程访问详细过程

    虚拟机安装ubuntu及配置mysql进行远程访问详细过程 1.虚拟机准备及安装 选择虚拟机Oracle VM VirtualBox,下载地址:https://www.virtualbox.org/w ...

  2. windows vmware虚拟机安装ubuntu蓝屏终极解决方法

    问题: 运行VMware等虚拟机导致win10蓝屏死机(终止代码:SYSTEM_SERVICE_EXCEPTION) 原因: 因为更新了Windows的相关补丁导致的,Hyper-V被默认开启 解决方 ...

  3. VMware虚拟机之Ubuntu网络配置

    ========================================Ubuntu 网络配置 ======================================= 一.参考你们的书 ...

  4. linux虚拟机之ubuntu的软件包管理(6/10)

    实训1 (1)执行sudo apt-get update更新系统中apt-get缓存中的软件包信息. (2)执行sudo apt-get install emacs安装Emacs. (3)执行sudo ...

  5. 在Ubuntu系统安装配置OpenSfM软件用来实现三维重建

    内容转载自我的博客 文章目录 1. 介绍 2. 下载OpenSfm 2.1 下载opensfm的原始github库 2.2 安装依赖 3. 测试 4. 注意事项 5. 配置文件 1. 介绍 照相机是将 ...

  6. Windows和虚拟机的Ubuntu不能进行复制粘贴

    第一步:确定自己的VMware Tools没有问题: 第二步: sudo apt-get autoremove open-vm-tools : 第三步:sudo apt-get install ope ...

  7. 服务器虚拟系统无法上网络设置,玩转Windows 2008虚拟机网络设置

    很多安装了Windows 2008的朋友在看过<玩转Windows Server 2008自带的虚拟化功能>一文中表示,对其虚拟机功能很感兴趣,纷纷在自己电脑上尝试该功能.但是也有读者来信 ...

  8. linux系统怎么装搜狗输入法_Linux之Ubuntu系统安装搜狗输入法

    如何在Ubuntu系统中安装搜狗输入法? 1.第一步  下载搜狗输入法文件for Linux 2.检查更新 update 如果没有更新的话,需要做这一步 3.语言支持 选择fcitx,然后关闭界面 4 ...

  9. Windows重装系统+虚拟机virtuabox安装+ubuntu系统安装+linux环境下安装fsl 一条龙(步步亲测有效)

    Windows重装系统+虚拟机virtuabox安装+ubuntu系统安装+linux环境下安装fsl 一条龙 零:综述 一.windows10系统的安装 1.准备工作 2.制作启动盘 3.修改启动设 ...

最新文章

  1. Visual Studio 2019连接自动的Sql Server开发版数据库(C#语言)
  2. 51. N 皇后(回溯算法)
  3. python socket之udp说明
  4. Linux 管理登陆的用户/查看/剔除
  5. java取模运算_Java的四则运算符与取模运算符
  6. python---之plt.subplot画图详解
  7. 同一台主机部署两个比特币钱包以及rpc服务的摘要
  8. html5简单提问,【问答技巧】怎样提问才能让我的问题更快速被解答?
  9. Vue3学习之第四节:setup()中使用watch、watchEffect 函数
  10. 驰声科技推出AI对话考辅系统 将VR引入语音评测
  11. 一个程序员的书法学习之路-法帖篇
  12. 2021-03-08-java-pdf导出-lowagie
  13. 在Vue中使用Echarts绘制带图标的矩形树图
  14. python 热度图_python可视化(七)绘制詹姆斯、杜兰特、伦纳德生涯数据热度图...
  15. POJ1392: Ouroboros Snake 题解
  16. 视频号怎么添加商品带货扩展链接规则
  17. 用python :输入 20 个整数,统计其中正数、负数和零的个数
  18. 谷歌浏览器Adobe Flash player 已过期 解决办法
  19. 关于局域网中无法访问的解决方法
  20. nyoj1238 最少换乘 最短路

热门文章

  1. c语言eallow,求大神指导C语言框图设计!!!
  2. oracle授权v$lock,访问V$LOCK视图Oracle 11g出现性能问题
  3. iOS开发之网络监听(一)Reachability
  4. [Java] 类和对象(简介,封装,内存机制,构造方法)
  5. 该网页无法正常运作 目前无法处理此请求。 HTTP ERROR 500
  6. 一篇关于营销的功能需求分析
  7. 南开计算机考研真题,(NEW)南开大学《812计算机综合基础》历年考研真题汇编(83页)-原创力文档...
  8. 极速office(Word)人民币符号怎么打出来
  9. 一个定语修饰两个并列的名词。
  10. 代数余子式之和怎么算_小明说养老 | 养老金怎么算之算算过渡性养老金