配置
安装好clickhouse后有几个关键的配置需要调整。
clickhouse
的配置文件主要有两个:
1 2
| vi /etc/clickhouse-server/config.xml # 服务器配置 vi /etc/clickhouse-server/users.xml # 客户端连接的默认配置
|
config.xml
里需要调整的主要是数据文件的目录、http端口、监听地址:
1 2 3 4 5 6
| <http_port>8080</http_port> <listen_host>0.0.0.0</listen_host> <path>/var/lib/clickhouse/</path>
<uncompressed_cache_size>8589934592</uncompressed_cache_size> <mark_cache_size>5368709120</mark_cache_size>
|
此外也能通过配置文件发现默认的tcp端口是9000,interserver_http_port是9009。
users.xml
里需要调整的主要是:
1 2
| <max_memory_usage>20000000000</max_memory_usage> <password></password>
|
启动命令
1 2 3 4 5 6
| # 服务端: sudo service clickhouse-server start # 客户端(多行模式): clickhouse-client -m # 客户端执行sql文件: clickhouse-client -mn < 1.sql
|
jdbc
首先是引入依赖:
1 2 3 4 5 6 7 8 9 10 11 12
| <dependency> <groupId>ru.yandex.clickhouse</groupId> <artifactId>clickhouse-jdbc</artifactId> <version>0.1.54</version> <exclusions> <exclusion> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>*</artifactId> </exclusion> </exclusions> </dependency>
|
这里我项目里其他地方用fasterxml,有版本冲突,因此这里exclude掉了。
然后配置yml:
1 2 3 4 5 6
| spring.clickhouse.hikari: idle-timeout: 1000 jdbc-url: jdbc:clickhouse://<your_host_or_ip_address>:8080/default driverClassName: ru.yandex.clickhouse.ClickHouseDriver maximumPoolSize: 10 rewriteBatchedStatements: true
|
最后像普通jdbc一样使用即可:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| @Configuration @ConfigurationProperties(prefix = "spring.clickhouse.hikari") public class ClickhouseDSConfig extends HikariConfig { @Bean(name="chds") public DataSource dataSource() throws SQLException { return new HikariDataSource(this); } }
@Repository public class ChDao extends JdbcDaoSupport implements IChDao { @Autowired public ChDao(@Qualifier("chds") DataSource ds) { setDataSource(ds); }
@Override public Map<String, Object> query(String sql, Object... args) { return this.getJdbcTemplate().queryForMap(sql, args); }
@Override public List<Map<String, Object>> queryForList(String sql, Object... args) { return this.getJdbcTemplate().queryForList(sql, args); } }
@Autowired IChDao dao;
public void run() { System.out.println("begin~~~"); String sqlDB = "show databases"; System.out.println(dao.queryForList(sqlDB)); System.out.println(dao.queryForList("show tables;")); }
|