Spark+ES+ClickHouse 构建DMP用户画像(1)

环境搭建



一、数据上传到hdfs

hdfs dfs -rm -r ${data_path}
hdfs dfs -mkdir -p ${data_path}
hdfs dfs -put l o c a l f i l e p a t h p r o f i x {local_file_path_profix} localfilepathprofix{col} d a t a p a t h p r o f i x {data_path_profix} datapathprofix{col_path}“/”${dt}
提示:一般是使用flume

二、创建临时内部分区表

drop table if exists  tmp.dim_product_tmp;
CREATE TABLE IF NOT EXISTS tmp.dim_product_tmp (
 item_sk int comment '代理健',
 item_id string comment '商品id',
 cate int comment '商品分类',
 brand int comment '商品品牌',
 a1 int comment '商品属性1',
 a2 int comment '商品属性2',
 a3 int comment '商品属性3'
)COMMENT '商品维度表'
partitioned by (dt string)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
location 'hdfs://node01:9000/test4/data/dim_product/';

内部表:为了删除表的同时删除数据
location:与数据路径一致,为了添加分区的时候可以使用相对路径
飘号在shell中是命令函数的意思,会优先执行; hive建表需要考虑到关键字问题,尽量不使用关键字。

三、创建外部压缩表

drop table if exists  ods.dim_order;
CREATE external TABLE IF NOT EXISTS ods.dim_order (
 order_sk int comment '代理键',
 order_id string comment '订单id',
 user_id string comment '用户id' ,
 final_total_amount decimal(16,2) comment '总金额',
 finish_time string comment '完成时间',
 finish_time_hour string comment '完成时间(小时)'
)COMMENT '订单维度表'
partitioned by (dt string)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS ORC
location 'hdfs://node01:9000/test4/ods/dim_order'
TBLPROPERTIES('orc.compress'='snappy');

存储格式:ORC
压缩格式:snappy
内部表和外部表区别: 建表语句是否使用到了 external 。 对于内部表删除后数据也会消失,外部表数据不会消失;业务上更多使用外部表。 location内部外表表都可以使用;使用了location 表位置在location位置,否则是在默认的位置。 对于load 会移动数据, insert into 会新增一份数据;对于add partition 不会复制数据

分区中的location可以使相对路径或者是绝对路径;不加/代表是相对路径;

四、数据插入到临时表

alter table  ${table_name}  drop if  exists  partition (dt=' $dt');
alter table  $1 add if not exists  partition (dt='$2') location '$3';

五、数据从临时表插入到外部压缩表

insert overwrite  table  ods.dim_product select * from tmp.dim_product_tmp where dt='2023-02-06';

六、删除临时表

drop table if exists  ods.dim_order;

七、hive创建hbase表的映射关系

drop table if exists   ods.dwt_user_tags_map_all;
CREATE EXTERNAL TABLE  ods.dwt_user_tags_map_all(
 user_id string comment '用户id',
 user_tags map<string,string> comment '用户标签聚合'
)COMMENT '用户标签主题表'
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
map keys terminated by ':'
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,tags:user_tags")
TBLPROPERTIES("hbase.table.name" = "user_tags_map_all")

和测创建HBASE表映射之后,hive表新增数据后HBASE会同时新增数据

八、hbase表创建

create ‘t20’, ‘c1’, SPLITS => [‘0000|’,‘0001|’,‘0001|’, ‘0002|’, ‘0003|’, ‘0004|’]

预分区:HBASE创建表的时候要先预分区。
1.|ascll编码中是最大的,也就是说0000开头的都会落入到这个分区
2.rowkey设计原则:唯一,16位,散列,可溯源;concat(‘000’,ceil(rand()*10)%5,substr(md5(user_id),0,12))。使用md5加随机前缀的形式散列rowkey

九、hive插入数据

insert overwrite table  ods.dwt_user_tags_map_all
select  concat('000',ceil(rand()*10)%5,substr(md5(user_id),0,12)),str_to_map(concat_ws(',',collect_set(concat_ws(':',tag_id,tag_value))))  from  ods.dws_user_action_tags_map_all  group by user_id;

十、springboot创建

https://start.aliyun.com

十一、springboot逆向工程

在这里插入图片描述
mybatis-generator:generate
mybatis-generator.xml

mybatis-generator:generate
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE generatorConfiguration PUBLIC
        "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd" >
<generatorConfiguration>

    <context id="DB2Tables" targetRuntime="MyBatis3">
        <commentGenerator>
            <property name="suppressAllComments" value="true"/>
            <property name="suppressDate" value="true"/>
        </commentGenerator>

        <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
                        connectionURL="jdbc:mysql://ip:3306/ccm_ods?
                                        useUnicode=true&amp;
                                        characterEncoding=utf-8&amp;
                                        useSSL=true&amp;
                                        useJDBCCompliantTimezoneShift=true&amp;
                                        useLegacyDatetimeCode=false&amp;
                                        serverTimezone=Hongkong&amp;nullCatalogMeansCurrent=true"
                        userId="root"
                        password="root">
        </jdbcConnection>

        <javaTypeResolver>
            <property name="forceBigDecimals" value="false"/>
        </javaTypeResolver>

        <javaModelGenerator targetPackage="com.xf.dmp.entity" targetProject="C:\project\dmp\dmp\src\main\java">
            <property name="enableSubPackages" value="true"/>
            <property name="trimStrings" value="true"/>
        </javaModelGenerator>

        <sqlMapGenerator targetPackage="resources.mapper" targetProject="C:\project\dmp\dmp\src\main">
            <property name="enableSubPackages" value="true"/>
        </sqlMapGenerator>

        <javaClientGenerator targetPackage="com.xf.dmp.mapper" type="XMLMAPPER" targetProject="C:\project\dmp\dmp\src\main\java">
            <property name="enableSubPackages" value="true"/>
        </javaClientGenerator>

        <table domainObjectName="test1" tableName="test1" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false">
<!--            <generatedKey column="id" sqlStatement="MySql" identity="true" />-->
        </table>
    </context>
</generatorConfiguration>

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.7.RELEASE</version>
    </parent>
    <groupId>com.example</groupId>
    <artifactId>dmp</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>dmp</name>
    <description>dmp</description>

    <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <spring-boot.version>2.3.7.RELEASE</spring-boot.version>
    </properties>

    <dependencies>


        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-text</artifactId>
            <version>1.9</version>
        </dependency>

        <!--        连接数据库-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5.5</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.47</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.22</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.3</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.6</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.12.0</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.10</version>
        </dependency>



    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
                <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
                    <plugins>
                        <plugin>
                            <groupId>org.mybatis.generator</groupId>
                            <artifactId>mybatis-generator-maven-plugin</artifactId>
                            <version>1.3.5</version>
                            <dependencies>
                                <dependency>
                                    <groupId>org.mybatis.generator</groupId>
                                    <artifactId>mybatis-generator-core</artifactId>
                                    <version>1.3.5</version>
                                </dependency>
                                <dependency>
                                    <groupId>mysql</groupId>
                                    <artifactId>mysql-connector-java</artifactId>
                                    <version>8.0.22</version>
                                </dependency>
                            </dependencies>
                            <executions>
                                <execution>
                                    <id>mybatis generator</id>
                                    <phase>package</phase>
                                    <goals>
                                        <goal>generate</goal>
                                    </goals>
                                </execution>
                            </executions>
                            <configuration>
                                <!--允许移动生成的文件-->
                                <verbose>true</verbose>
                                <!--允许自动覆盖文件-->
                                <overwrite>true</overwrite>
                                <configurationFile>
                                    src/main/resources/mybatis-generator.xml
                                </configurationFile>
                            </configuration>
                        </plugin>
                    </plugins>
                </pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

十二、docker部署clickhouse

1.拉取clickhouse镜像

docker pull yandex/clickhouse-server

2.启动server端

docker run -d --name clickhouse-server --ulimit nofile=262144:262144 -p 8123:8123  yandex/clickhouse-server

3.进入容器操作数据库
进入容器

docker exec -it clickhouse-server /bin/bash

4.进入clickhouse命令行

clickhouse-client

5.显示数据库

show databases

6.选择数据库

use default

7.显示表

show tables

8.创建表

CREATE TABLE IF NOT EXISTS log_gather2
(
branch String COMMENT '分支',
ten_id Nullable(String) COMMENT '租户Id',
sys_id Nullable(String) COMMENT '系统Id'
) ENGINE = MergeTree() PARTITION BY branch 
ORDER BY (branch) 
PRIMARY KEY (branch) SETTINGS index_granularity=8192;

9.插入数据

insert into log_gather2 (branch,ten_id,sys_id) 
values('bbbb','test','1');

10.查询

select * from log_gather2

11.docker基础容器中bash: vi: command not found问题解决
在docker容器中使用如下命令安装:

apt-get update
apt-get install vim

12.远程连接授权
配置文件路径一般为/etc/clickhouse-server/config.xml,在配置文件中添加如下一行
<listen_host>::</listen_host>
在这里插入图片描述
保存后重启服务,再重新用DBeaver连接可成功

13.测试连接
在这里插入图片描述


总结

提示:这里对文章进行总结:

例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

居高声自远,非是藉秋风

千山万水总是情,赏个一块行不行

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值