需求分析:按地区(用户性别、用户年龄段)统计当日新增付费用户首单平均消费
- 每笔订单都要判断是否是该用户的首单。
- 无论是地区名称、用户性别、用户年龄,订单表中都没有这些字段。但是可以通过外键的形式关联其他表得到这些值。
处理判断首单业务的策略
判断是否首单的要点,在于该用户之前是否参与过消费(下单)。那么如何知道用户之前是否参与过消费,如果临时从所有消费记录中查询,是非常不现实的。那么只有将“用户是否消费过”这个状态进行保存并长期维护起来。在有需要的时候通过用户id进行关联查询。
在实际生产中,这种用户状态是非常常见的比如“用户是否退过单”、“用户是否投过诉”、“用户是否是高净值用户”等等。
那么现在问题就变为,如何保存并长期维护这种状态。考虑到
1、 这是一个保存周期较长的数据。
2、 必须可修改状态值。
3、 查询模式基本上是k-v模式的查询。
所以综上这三点比较适合保存在Hbase中。
数据流程图
HBase回顾配置
- hbase-env.sh修改内容
export JAVA_HOME=/opt/module/jdk1.6.0_144
export HBASE_MANAGES_ZK=false
- hbase-site.xml修改内容
<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://hadoop102:9000/HBase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<!-- 0.98后的新变动,之前版本没有.port,默认端口为60000 -->
<property>
<name>hbase.master.port</name>
<value>16000</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>hadoop102,hadoop103,hadoop104</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/opt/module/zookeeper-3.4.10/zkData</value>
</property>
</configuration>
- regionservers
hadoop102
hadoop103
hadoop104
- 软连接hadoop配置文件到HBase
[atguigu@hadoop102 module]$ ln -s /opt/module/hadoop-2.7.2/etc/hadoop/core-site.xml /opt/module/hbase/conf/core-site.xml
[atguigu@hadoop102 module]$ ln -s /opt/module/hadoop-2.7.2/etc/hadoop/hdfs-site.xml /opt/module/hbase/conf/hdfs-site.xml
- 分发
- 启动方式
bin/hbase-daemon.sh start master
bin/hbase-daemon.sh start regionserver
bin/start-hbase.sh
bin/stop-hbase.sh
- 端口号
http://hadoop102:16010
- shell
bin/hbase shell
help
list
Phoenix部署
- 复制jar包
// 三台节点得Hbase中都要有
cp phoenix-4.14.2-HBase-1.3-server.jar /opt/module/hbase-1.3.1/lib/
cp phoenix-4.14.2-HBase-1.3-client.jar /opt/module/hbase-1.3.1/lib/
- 配置环境
#phoenix
export PHOENIX_HOME=/opt/module/phoenix
export PHOENIX_CLASSPATH=$PHOENIX_HOME
export PATH=$PATH:$PHOENIX_HOME/bin
- 启动
/opt/module/phoenix/bin/sqlline.py hadoop102,hadoop103,hadoop104:2181
- shell操作
// 显示所有表
!table 或 !tables
退出
!quit
启动进程
使用工具
添加Driver
添加连接
连接
创建表
create table user_state( user_id varchar primary key ,state.if_consumed varchar ) SALT_BUCKETS = 3
转载:https://blog.csdn.net/qq_40180229/article/details/106166724
查看评论