# 离线任务快速启动指南 ## 一、环境准备 ### 1. 安装依赖 ```bash cd /home/tw/recommendation pip install -r requirements.txt ``` ### 2. 配置数据库和Redis 编辑配置文件 `offline_tasks/config/offline_config.py`,确保数据库和Redis连接信息正确: ```python # 数据库配置 DB_CONFIG = { 'host': 'your_db_host', 'port': '9030', 'database': 'datacenter', 'username': 'readonly', 'password': 'your_password' } # Redis配置 REDIS_CONFIG = { 'host': 'your_redis_host', 'port': 6379, 'db': 0, 'password': None } ``` ## 二、运行离线任务 ### 方式1:运行所有任务(推荐) ```bash cd /home/tw/recommendation/offline_tasks python run_all.py --lookback_days 730 --top_n 50 ``` 这将依次运行: 1. Swing算法(i2i相似度) 2. Session Word2Vec(i2i相似度) 3. DeepWalk算法(i2i相似度) 4. 兴趣点聚合(多维度商品索引) ### 方式2:运行单个任务 #### 运行Swing算法 ```bash cd /home/tw/recommendation/offline_tasks python scripts/i2i_swing.py --lookback_days 730 --top_n 50 --time_decay ``` #### 运行Session Word2Vec ```bash python scripts/i2i_session_w2v.py --lookback_days 730 --top_n 50 --save_model ``` #### 运行DeepWalk ```bash python scripts/i2i_deepwalk.py --lookback_days 730 --top_n 50 --save_model --save_graph ``` #### 运行兴趣点聚合 ```bash python scripts/interest_aggregation.py --lookback_days 730 --top_n 1000 ``` ## 三、将索引加载到Redis 任务运行完成后,将生成的索引加载到Redis: ```bash cd /home/tw/recommendation/offline_tasks python scripts/load_index_to_redis.py --redis-host localhost --redis-port 6379 --expire-days 7 ``` 参数说明: - `--redis-host`: Redis服务器地址 - `--redis-port`: Redis端口 - `--redis-db`: Redis数据库编号(默认0) - `--expire-days`: 索引过期天数(默认7天) ## 四、查看输出结果 所有输出文件都在 `offline_tasks/output/` 目录下: ```bash cd /home/tw/recommendation/offline_tasks/output ls -lh ``` 输出文件示例: ``` i2i_swing_20251016.txt i2i_session_w2v_20251016.txt i2i_deepwalk_20251016.txt interest_aggregation_hot_20251016.txt interest_aggregation_cart_20251016.txt interest_aggregation_new_20251016.txt interest_aggregation_global_20251016.txt ``` ## 五、查看日志 所有运行日志都在 `offline_tasks/logs/` 目录下: ```bash cd /home/tw/recommendation/offline_tasks/logs tail -f run_all_20251016.log ``` ## 六、设置定时任务 ### 使用crontab设置每天运行 ```bash # 编辑crontab crontab -e # 添加以下行(每天凌晨2点运行) 0 2 * * * cd /home/tw/recommendation/offline_tasks && /usr/bin/python3 run_all.py --lookback_days 730 --top_n 50 >> /home/tw/recommendation/offline_tasks/logs/cron.log 2>&1 ``` ### 运行后自动加载到Redis 可以在crontab中添加索引加载任务: ```bash # 凌晨6点加载索引到Redis(假设离线任务在4小时内完成) 0 6 * * * cd /home/tw/recommendation/offline_tasks && /usr/bin/python3 scripts/load_index_to_redis.py >> /home/tw/recommendation/offline_tasks/logs/load_redis.log 2>&1 ``` ## 七、验证结果 ### 查看文件内容 ```bash # 查看i2i相似度 head -n 5 output/i2i_swing_20251016.txt # 查看兴趣点聚合 head -n 5 output/interest_aggregation_hot_20251016.txt ``` ### 从Redis查询 ```bash # 使用redis-cli redis-cli # 查看i2i相似度 GET i2i:swing:123456 # 查看兴趣点索引 GET interest:hot:platform:PC GET interest:global:country:US ``` ## 八、常见问题 ### Q1: 任务运行时间太长怎么办? A: 可以尝试: 1. 减少 `--lookback_days` 参数(如改为365天) 2. 减少 `--top_n` 参数(如改为20) 3. 在更强大的机器上运行 4. 考虑分布式运行不同算法 ### Q2: 内存不足怎么办? A: 1. Swing算法特别消耗内存,可以先跳过:`python run_all.py --skip-i2i` 2. 只运行DeepWalk或Session W2V 3. 对数据进行采样 ### Q3: 数据库连接超时怎么办? A: 1. 检查数据库配置是否正确 2. 检查网络连接 3. 增加SQL查询的超时时间 4. 分批查询数据 ### Q4: 如何只更新特定维度的索引? A: 修改 `interest_aggregation.py` 脚本,注释掉不需要的维度计算代码。 ## 九、性能参考 在标准配置(730天数据,top_n=50)下的预估运行时间: | 任务 | 数据量 | 预估时间 | 内存占用 | |------|--------|---------|---------| | Swing | 100万条行为 | 2-4小时 | 4-8GB | | Session W2V | 100万条行为 | 30-60分钟 | 2-4GB | | DeepWalk | 100万条行为 | 1-2小时 | 2-4GB | | 兴趣点聚合 | 100万条行为 | 30-60分钟 | 2-4GB | 实际时间会因数据量和机器配置而异。 ## 十、联系与支持 如有问题,请查看日志文件或联系开发团队。