Splits.io:速度跑者的数据分析与竞赛平台

YanJiabin开发的开源项目ExtendDialog为Android应用提供强大的对话框解决方案,模块化设计、丰富样式、简单API和跨版本兼容,助力开发者创建定制化、响应式的交互体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Splits.io:速度跑者的数据分析与竞赛平台

splits-io a speedrunning data store and analysis engine 项目地址: https://gitcode.com/gh_mirrors/sp/splits-io

项目介绍

Splits.io 是一个专为速度跑者设计的综合平台,旨在通过数据分析帮助跑者提升表现。它不仅是一个数据存储库,还是一个强大的分析引擎和竞赛平台。Splits.io 支持 LiveSplit 及其他超过 15 种速度跑计时器,能够自动生成详细的分割分析报告,帮助跑者了解每次尝试的细节,无论是成功的还是失败的。通过历史数据和实时竞赛,跑者可以与自己或其他跑者进行比较,从而找到改进的方向。

项目技术分析

Splits.io 的技术架构基于 Ruby on Rails,并结合了 Docker 进行容器化部署,确保在不同环境下的一致性和易用性。项目使用了 AWS 的多种服务,如 RDS(PostgreSQL)、Elasticache(Redis)和 EC2 实例,构建了一个高可用、可扩展的基础设施。此外,Splits.io 还提供了丰富的 API 接口,支持 Python 和 Rust 的客户端库,方便开发者进行二次开发和集成。

项目及技术应用场景

Splits.io 适用于所有速度跑爱好者和专业跑者,无论是个人训练还是团队竞赛,都能从中受益。以下是一些具体的应用场景:

  1. 个人训练分析:跑者可以上传自己的计时数据,通过 Splits.io 的分析工具,了解每次训练的详细表现,找出需要改进的地方。
  2. 历史数据对比:通过对比历史数据,跑者可以观察自己的进步情况,制定更科学的训练计划。
  3. 实时竞赛:Splits.io 支持实时竞赛功能,跑者可以与全球的其他跑者进行在线比赛,提升竞技水平。
  4. 团队协作:团队成员可以共享数据,进行集体分析,共同提升团队的整体表现。

项目特点

  1. 多平台支持:Splits.io 兼容多种速度跑计时器,包括 LiveSplit、WSplit 等,覆盖了大部分跑者的需求。
  2. 强大的分析引擎:通过详细的分割分析和历史数据对比,帮助跑者深入了解自己的表现,找到改进的突破口。
  3. 实时竞赛功能:支持在线实时竞赛,跑者可以与全球的其他跑者一较高下,提升竞技体验。
  4. 易于部署和开发:基于 Docker 的容器化部署,简化了开发和测试环境设置。同时,丰富的 API 接口和客户端库,方便开发者进行二次开发和集成。

Splits.io 不仅是一个数据存储和分析平台,更是一个连接全球速度跑者的社区。无论你是初学者还是资深跑者,Splits.io 都能为你提供有价值的数据支持和竞技体验。立即加入 Splits.io,开启你的速度跑数据分析之旅吧!

splits-io a speedrunning data store and analysis engine 项目地址: https://gitcode.com/gh_mirrors/sp/splits-io

[root@hadoop01 jars]# hadoop jar film.jar CleanDriver /film/input /film/outputs/cleandata 25/04/02 17:25:34 INFO client.RMProxy: Connecting to ResourceManager at hadoop01/192.168.20.20:8032 25/04/02 17:25:35 WARN mapreduce.JobResourceUploader: Hadoop command-line option parsing not performed. Implement the Tool interface and execute your application with ToolRunner to remedy this. 25/04/02 17:25:35 INFO input.FileInputFormat: Total input paths to process : 2 25/04/02 17:25:35 INFO mapreduce.JobSubmitter: number of splits:2 25/04/02 17:25:35 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1743583799083_0005 25/04/02 17:25:35 INFO impl.YarnClientImpl: Submitted application application_1743583799083_0005 25/04/02 17:25:35 INFO mapreduce.Job: The url to track the job: http://hadoop01:8088/proxy/application_1743583799083_0005/ 25/04/02 17:25:35 INFO mapreduce.Job: Running job: job_1743583799083_0005 25/04/02 17:25:41 INFO mapreduce.Job: Job job_1743583799083_0005 running in uber mode : false 25/04/02 17:25:41 INFO mapreduce.Job: map 0% reduce 0% 25/04/02 17:25:49 INFO mapreduce.Job: map 100% reduce 0% 25/04/02 17:25:55 INFO mapreduce.Job: map 100% reduce 17% 25/04/02 17:26:01 INFO mapreduce.Job: map 100% reduce 33% 25/04/02 17:26:04 INFO mapreduce.Job: map 100% reduce 50% 25/04/02 17:26:05 INFO mapreduce.Job: map 100% reduce 67% 25/04/02 17:26:06 INFO mapreduce.Job: map 100% reduce 100% 25/04/02 17:26:06 INFO mapreduce.Job: Job job_1743583799083_0005 completed successfully 25/04/02 17:26:06 INFO mapreduce.Job: Counters: 50 File System Counters FILE: Number of bytes read=36 FILE: Number of bytes written=982026 FILE: Number of read operations=0 FILE: Number of large read operations=0 FILE: Number of write operations=0 HDFS: Number of bytes read=17347 HDFS: Number of bytes written=0 HDFS: Number of read operations=24 HDFS: Number of large read operations=0 HDFS: Number of write operations=12 Job Counters Killed reduce tasks=1 Launched map tasks=2 Launched reduce tasks=6 Data-local map tasks=2 Total time spent by all maps in occupied slots (ms)=9878 Total time spent by all reduces in occupied slots (ms)=55847 Total time spent by all map tasks (ms)=9878 Total time spent by all reduce tasks (ms)=55847 Total vcore-milliseconds taken by all map tasks=9878 Total vcore-milliseconds taken by all reduce tasks=55847 Total megabyte-milliseconds taken by all map tasks=10115072 Total megabyte-milliseconds taken by all reduce tasks=57187328 Map-Reduce Framework Map input records=144 Map output records=0 Map output bytes=0 Map output materialized bytes=72 Input split bytes=219 Combine input records=0 Combine output records=0 Reduce input groups=0 Reduce shuffle bytes=72 Reduce input records=0 Reduce output records=0 Spilled Records=0 Shuffled Maps =12 Failed Shuffles=0 Merged Map outputs=12 GC time elapsed (ms)=535 CPU time spent (ms)=2820 Physical memory (bytes) snapshot=1039224832 Virtual memory (bytes) snapshot=16491360256 Total committed heap usage (bytes)=453517312 Shuffle Errors BAD_ID=0 CONNECTION=0 IO_ERROR=0 WRONG_LENGTH=0 WRONG_MAP=0 WRONG_REDUCE=0 File Input Format Counters Bytes Read=17128 File Output Format Counters Bytes Written=0
04-03
<think>好的,我现在需要帮用户分析他们执行Hadoop作业时的输出日志。首先,用户运行的是`hadoop jar film.jar CleanDriver /film/input /film/outputs/cleandata`这个命令,看起来是在处理电影数据,进行数据清洗。 首先看日志结构。开头是连接到ResourceManager,说明YARN集群正常启动。接下来有个警告,关于没有使用Tool接口,可能影响命令行参数解析,不过作业还是提交成功了。这个警告可能需要用户后续优化代码,但暂时不影响执行。 然后输入路径处理了两个文件,分成了两个map任务。任务提交后,Application ID生成,用户可以通过提供的URL监控作业状态。作业运行过程中,map任务很快完成到100%,但reduce阶段有波动,从0%逐步到100%。这里可能需要注意reduce任务的数量,日志显示启动了6个reduce任务,但有一个被终止,可能资源竞争或配置问题,但最终作业成功完成。 计数器部分需要详细分析。File System Counters显示HDFS读取了17347字节,但写入0,这可能有问题。正常情况下清洗后的数据应该输出,所以这里可能输出路径为空,或者代码逻辑未正确写数据。需要检查CleanDriver的Mapper或Reducer是否漏掉了输出步骤,或者是否配置了正确的OutputFormat。 Map-Reduce框架计数器显示Map输入144条记录,但输出0条,这说明Mapper可能没有产生任何输出。这会导致后续的Reduce阶段也没有数据,最终输出为空。用户需要检查Mapper逻辑是否正确处理输入数据,是否有过滤条件过于严格导致所有数据被丢弃,或者是否有bug导致未能正确写入上下文。 另外,Reduce阶段有6个任务启动,但有一个被终止,可能由于节点故障或资源不足,但最终其他任务完成。需要关注是否有频繁的任务重试,可能影响性能。 总结问题可能出在Mapper未正确输出数据,或者OutputFormat配置错误,导致最终HDFS没有写入结果。建议用户检查Mapper和Reducer代码,确保在处理后调用了context.write,并验证输出路径是否正确,是否有权限问题。同时,处理Tool接口的警告可以优化参数解析,避免未来潜在问题。</think>以下是对该Hadoop命令执行结果的分步解析: $\boxed{关键信息摘要}$ • 成功执行数据清洗作业,Job ID:$\text{job\_1743583799083\_0005}$ • 输入2个文件,输出路径$\text{/film/outputs/cleandata}$ • Map成功率100%,Reduce最终成功率100% • 总耗时约31秒(17:25:35 - 17:26:06) $\boxed{关键日志分析}$ 1. **资源配置阶段** ```log 25/04/02 17:25:34 INFO client.RMProxy: 连接到ResourceManager at hadoop01/192.168.20.20:8032 25/04/02 17:25:35 WARN mapreduce.JobResourceUploader: 未执行Hadoop命令行选项解析 ``` - 成功连接YARN资源管理器 - 警告建议实现Tool接口(可通过继承`Configured`并实现`Tool`优化) 2. **任务拆分阶段** ```log INFO input.FileInputFormat: Total input paths to process : 2 INFO mapreduce.JobSubmitter: number of splits:2 ``` - 输入文件被拆分为2个Map任务(对应HDFS块大小) 3. **任务执行监控** ```log INFO mapreduce.Job: The url to track the job: http://hadoop01:8088/proxy/application_1743583799083_0005/ ``` - 可通过Web UI实时监控作业状态(默认端口8088) 4. **执行过程统计** ```log Map 100% Reduce 100% INFO mapreduce.Job: Counters: 50 ``` - 完整计数器显示资源使用细节,其中需特别注意: ```log HDFS: Number of bytes read=17347 HDFS: Number of bytes written=0 # 输出数据量为0 Map input records=144 Map output records=0 # Map阶段无输出 Reduce input records=0 # Reduce阶段无输入 ``` $\boxed{异常现象诊断}$ 1. **数据写入异常** - 最终输出目录字节数为0,可能原因: - Mapper/Reducer中未调用`context.write()` - 数据清洗逻辑过滤了所有记录 - 输出路径权限问题 2. **Map阶段异常** - Map输入144条记录但输出0条,说明: ```java // 示例问题代码可能形式 public void map(...) { if(严格过滤条件){ // 导致所有记录被过滤 context.write(...); } } ``` $\boxed{建议排查步骤}$ 1. **代码验证** - 检查Mapper类是否包含输出逻辑 - 验证数据清洗规则是否过于严格 - 添加调试日志输出原始记录和过滤结果 2. **路径检查** ```bash hdfs dfs -ls /film/outputs/cleandata hdfs dfs -cat /film/outputs/cleandata/part-* | head ``` 3. **配置确认** - 检查`Job`是否设置正确的OutputFormat ```java job.setOutputFormatClass(TextOutputFormat.class); ``` 4. **警告处理(可选优化)** - 实现Tool接口规范参数解析: ```java public class CleanDriver extends Configured implements Tool { public int run(String[] args) throws Exception { Job job = Job.getInstance(getConf()); // 作业配置 return job.waitForCompletion(true) ? 0 : 1; } } ``` 该作业虽然显示执行成功,但实际未产生有效输出数据,需要重点检查数据处理逻辑和输出机制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

戴洵珠Gerald

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值