一 数据迁移至Clickhouse
1 为何要迁移
标签计算完成后保存在hive虽然可以查询但是性能非常糟糕。而标签的使用往往是即时的。最常见的场景就是“用户分群”,也称“人群圈选”、“圈人”等等。
分群操作就是根据多个标签组合,产生一个用户集合,供营销、广告等部门使用。而这些操作计算量大,产生结果需要时效性高。
2 方案选型
选择方案最重要的依据就是数据量和时效性要求。
时效性 | 数据量 | 分群方案 |
---|---|---|
能接受隔天 | 无所谓 | HIVE宽表 |
即时产生 | 千万以下,标签百级 | OLAP宽表(Elasticsearch,Clickhouse,Tidb…) |
即时产生 | 亿级,标签千级 | Bitmap方式(Clickhouse,doris) |
适合的才是最好的,此任务选择用Clickhouse实现Bitmap方式存储。
3 任务目标
把hive中标签宽表数据,写入至Clickhouse的宽表。
4 设计分析
-
读取hive的宽表,在clickhouse中建立对应的宽表。
因为并不是hive表到hive表,所以并不能够直接用insert select 解决。
-
先通过把数据查询成为Dataframe ,再通过行动算子写入至Clickhouse的宽表。
5 代码实现
搭建模块 – task-export-ck
(1 )pom.xml
在poml文件中添加配置
<dependencies>
<dependency>
<groupId>com.hzy.userprofile</groupId>
<artifactId>task-common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
<build>
<plugins>
<!-- 该插件用于将Scala代码编译成class文件 -->
<plugin>
<groupId>net.alchim31.maven</groupId>
<artifactId>scala-maven-plugin</artifactId>
<version>3.4.6</version>
<executions>
<execution>
<!-- 声明绑定到maven的compile阶段 -->
<goals>
<goal>compile</goal>
<goal>testCompile</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single