4、环境搭建:JDK、Maven、Git等基础环境配置、Flink集群搭建(Standalone模式)、Redis与HBase的安装与配置
说实话,很多新手一上来就急着写代码,结果环境配了三天还没跑通第一个Demo。我见过太多这种案例了。环境搭建这事儿,看着琐碎,但它是整个实时风控引擎的根基。你想想看,地基没打好,后面Flink作业跑着跑着就OOM,或者HBase连不上,排查起来比重新搭一遍还痛苦。
这一章,我会带你一步步把基础环境搞定。咱们不搞虚的,全是实操。我会把我在项目中踩过的坑、养成的习惯,都揉碎了讲给你听。
4.1 JDK、Maven、Git 基础环境配置
先说JDK。实时风控引擎对Java版本有要求,我个人习惯用JDK 8,稳定、生态好。Flink 1.13之后虽然支持JDK 11,但很多第三方依赖在JDK 8上验证得更充分。嗯,这里要注意:千万别用JDK 9、10这种过渡版本,坑多。
JDK安装步骤:
- 下载JDK 8(推荐jdk-8u202,这是最后一个免费商用版本)
- 解压到
/usr/local/java/目录 - 配置环境变量
JAVA_HOME和PATH - 验证:
java -version
# 解压
tar -zxvf jdk-8u202-linux-x64.tar.gz -C /usr/local/java/
# 配置环境变量(写入 /etc/profile 或 ~/.bashrc)
export JAVA_HOME=/usr/local/java/jdk1.8.0_202
export PATH=$JAVA_HOME/bin:$PATH
# 生效
source /etc/profile
# 验证
java -version
# 输出:java version "1.8.0_202"
/etc/profile.d/ 下创建一个 java.sh 文件,把环境变量写进去。这样系统启动时自动加载,而且方便管理。我曾经因为直接在 /etc/profile 里改,结果搞崩了系统环境变量,重装了系统……从那以后,我就用这个分离的方式了。
Maven配置:
Maven是Java项目的构建工具,说白了就是帮你管理jar包依赖的。实时风控项目依赖很多,比如Flink、HBase客户端、Redis客户端,全靠Maven来拉取。
# 下载Maven 3.6.3(推荐这个版本,兼容性好)
wget https://archive.apache.org/dist/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
tar -zxvf apache-maven-3.6.3-bin.tar.gz -C /usr/local/maven/
# 配置环境变量
export MAVEN_HOME=/usr/local/maven/apache-maven-3.6.3
export PATH=$MAVEN_HOME/bin:$PATH
# 验证
mvn -version
这里有个关键点:配置阿里云镜像。国内网络你懂的,直接连Maven中央仓库慢得让人抓狂。修改 ~/.m2/settings.xml,加入镜像配置:
<mirrors>
<mirror>
<id>aliyunmaven</id>
<mirrorOf>central</mirrorOf>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
</mirrors>
Downloading... 不动,排查了半天发现是公司网络限制了HTTPS。解决办法是把阿里云镜像的URL改成HTTP版本,或者配置公司内部的Nexus私服。
Git配置:
Git是版本控制工具,实时风控项目的代码管理全靠它。我建议你养成一个好习惯:每次提交代码前,先 git pull --rebase,避免产生多余的merge commit。
# 安装Git
yum install -y git
# 配置全局用户信息
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"
# 生成SSH密钥(用于连接GitLab/GitHub)
ssh-keygen -t rsa -b 4096 -C "your.email@example.com"
# 将公钥 ~/.ssh/id_rsa.pub 添加到GitLab/GitHub的SSH Keys中
4.2 Flink集群搭建(Standalone模式)
Flink是实时风控引擎的计算核心。Standalone模式适合开发和测试环境,生产环境一般用YARN或Kubernetes。但咱们从零搭建,先用Standalone模式跑通流程。
下载与解压:
wget https://archive.apache.org/dist/flink/flink-1.13.6/flink-1.13.6-bin-scala_2.12.tgz
tar -zxvf flink-1.13.6-bin-scala_2.12.tgz -C /usr/local/flink/
配置Flink集群:
修改 conf/flink-conf.yaml,这是Flink的核心配置文件。我列出几个关键参数:
| 参数 | 说明 | 推荐值 |
|---|---|---|
jobmanager.rpc.address |
JobManager的地址 | 你的主节点IP |
taskmanager.numberOfTaskSlots |
每个TaskManager的并行度 | 根据CPU核数设定,一般设为2-4 |
parallelism.default |
默认并行度 | 2(开发环境够用) |
state.backend |
状态后端 | filesystem(开发环境) |
# conf/flink-conf.yaml 关键配置
jobmanager.rpc.address: 192.168.1.100
taskmanager.numberOfTaskSlots: 2
parallelism.default: 2
state.backend: filesystem
state.checkpoints.dir: file:///data/flink/checkpoints
配置workers节点:
编辑 conf/workers 文件,列出所有TaskManager节点的IP或主机名:
192.168.1.101
192.168.1.102
启动集群:
# 在JobManager节点上执行
bin/start-cluster.sh
# 验证
jps
# 应该看到:StandaloneSessionClusterEntrypoint(JobManager)
# 在TaskManager节点上应该看到:TaskManagerRunner
http://192.168.1.100:8081,如果能看到TaskManager列表,说明集群启动成功。我曾经遇到过TaskManager注册不上,排查了半天发现是防火墙没关。嗯,开发环境直接 systemctl stop firewalld 吧。
4.3 Redis与HBase的安装与配置
Redis和HBase是实时风控引擎的两大存储支柱。Redis负责高速缓存和计数器,HBase负责存储海量的规则和事件明细。
4.3.1 Redis安装与配置
Redis安装很简单,但配置有讲究。实时风控场景下,Redis的稳定性至关重要。
# 下载Redis 6.2.6(推荐这个版本,稳定且支持ACL)
wget https://download.redis.io/releases/redis-6.2.6.tar.gz
tar -zxvf redis-6.2.6.tar.gz
cd redis-6.2.6
make && make install
# 启动
redis-server /usr/local/redis/redis.conf
关键配置项:
| 配置项 | 说明 | 推荐值 |
|---|---|---|
requirepass |
设置密码 | 强密码,不要用默认 |
maxmemory |
最大内存限制 | 根据机器配置,比如4GB |
maxmemory-policy |
内存淘汰策略 | allkeys-lru(常用) |
save |
持久化策略 | 开发环境可以关闭,生产环境建议开启RDB+AOF |
maxmemory 设置得太小,而规则缓存占用了大量内存。后来我改用 allkeys-lru 策略,并定期清理过期规则。记住:Redis不是数据库,别把所有数据都往里塞。
4.3.2 HBase安装与配置
HBase是实时风控引擎的“冷存储”,用来存历史事件、规则版本、模型特征等。HBase依赖HDFS和ZooKeeper,所以需要先搭建Hadoop集群。
前置条件:
- Hadoop 3.2.2(HDFS提供底层存储)
- ZooKeeper 3.6.3(HBase的协调服务)
HBase安装步骤:
# 下载HBase 2.4.9
wget https://archive.apache.org/dist/hbase/2.4.9/hbase-2.4.9-bin.tar.gz
tar -zxvf hbase-2.4.9-bin.tar.gz -C /usr/local/hbase/
# 配置 hbase-site.xml
<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://192.168.1.100:9000/hbase</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>192.168.1.101,192.168.1.102,192.168.1.103</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
</configuration>
启动HBase:
# 启动HDFS(在Hadoop主节点上)
start-dfs.sh
# 启动ZooKeeper(在所有ZooKeeper节点上)
zkServer.sh start
# 启动HBase(在HBase主节点上)
bin/start-hbase.sh
# 验证
bin/hbase shell
# 输入 list 命令,如果能正常返回,说明HBase启动成功
risk_rule(规则表)、risk_event(事件表)。预创建分区可以避免数据写入时的热点问题。我曾经因为没预分区,导致某个RegionServer压力过大,整个集群响应变慢。
这张图展示了实时风控引擎的三层架构。底层是基础环境(JDK、Maven、Git),中间是存储层(Redis、HBase),顶层是计算层(Flink)。每一层都依赖下一层,缺一不可。
git clone 然后一键部署。嗯,这才是工程师该有的效率。
公众号:蓝海资料掘金营,微信deep3321