Hadoop 使用过程中 15 个常见问题的详细描述、解决方案
目录
- 问题 1:配置文件路径错误
- 问题描述
- 解决方案
- Python 实现
- 问题 2:YARN 资源配置不足
- 问题描述
- 解决方案
- Python 实现
- 问题 3:DataNode 无法启动
- 问题描述
- 解决方案
- Python 实现
- 问题 4:NameNode 格式化失败
- 问题描述
- 解决方案
- Python 实现
- 问题 5:HDFS 副本分布不均
- 问题描述
- 解决方案
- Python 实现
- 问题 6:MapReduce 作业运行失败
- 问题描述
- 解决方案
- Python 实现
- 问题 7:节点磁盘空间耗尽
- 问题描述
- 解决方案
- Python 实现
- 问题 8:集群性能下降
- 问题描述
- 解决方案
- Python 实现
- 问题 9:日志文件过大
- 问题描述
- 解决方案
- Python 实现
- 问题 10:网络延迟导致任务失败
- 问题描述
- 解决方案
- Python 实现
- 问题 11:HDFS 数据目录损坏
- 问题描述
- 解决方案
- Python 实现
- 问题 12:任务卡在调度阶段
- 问题描述
- 解决方案
- Python 实现
- 问题 13:MapReduce 输出目录已存在
- 问题描述
- 解决方案
- Python 实现
- 问题 14:RPC 连接失败
- 问题描述
- 解决方案
- Python 实现
- 问题 15:节点间时间不同步
- 问题描述
- 解决方案
- Python 实现
- 总结
以下是针对 Hadoop 使用过程中 15 个常见问题的详细描述、解决方案,以及所有问题的完整 Python 面向对象代码实现。
问题 1:配置文件路径错误
问题描述
启动 Hadoop 时,配置文件路径设置错误会导致启动失败。
解决方案
检查配置文件路径,确保 core-site.xml
和 hdfs-site.xml
等文件存在,并且环境变量 HADOOP_CONF_DIR
正确配置。
Python 实现
import osclass ConfigValidator:def __init__(self, conf_dir):self.conf_dir = conf_dirdef validate(self):required_files = ["core-site.xml", "hdfs-site.xml"]for file in required_files:path = os.path.join(self.conf_dir, file)if not os.path.exists(path):raise FileNotFoundError(f"配置文件缺失: {path}")print("配置文件验证成功!")# 示例
try:validator = ConfigValidator("/etc/hadoop/conf")validator.validate()
except FileNotFoundError as e:print(e)
问题 2:YARN 资源配置不足
问题描述
YARN 的资源配置不足会导致任务分配失败。
解决方案
通过修改 yarn.nodemanager.resource.memory-mb
和 yarn.scheduler.maximum-allocation-mb
参数进行调整。
Python 实现
class YarnConfigUpdater:def __init__(self, config_file):self.config_file = config_filedef update_resource_config(self, memory_mb, max_allocation_mb):print(f"更新 YARN 配置: memory_mb={memory_mb}, max_allocation_mb={max_allocation_mb}")# 假设此处实际实现是对 XML 文件进行解析和更新。# 示例代码省略文件操作。pass# 示例
updater = YarnConfigUpdater("/etc/hadoop/yarn-site.xml")
updater.update_resource_config(memory_mb=8192, max_allocation_mb=4096)
问题 3:DataNode 无法启动
问题描述
DataNode 由于磁盘空间不足或目录权限错误而无法启动。
解决方案
检查磁盘空间,修复或重新设置 DataNode 的数据目录。
Python 实现
class DataNodeChecker:def __init__(self, data_dir):self.data_dir = data_dirdef check_space_and_permissions(self):if not os.path.exists(self.data_dir):raise FileNotFoundError(f"DataNode 数据目录不存在: {self.data_dir}")if not os.access(self.data_dir, os.W_OK):raise PermissionError(f"DataNode 数据目录无写权限: {self.data_dir}")print("DataNode 数据目录检查通过!")# 示例
try:checker = DataNodeChecker("/hadoop/hdfs/data")checker.check_space_and_permissions()
except (FileNotFoundError, PermissionError) as e:print(e)
问题 4:NameNode 格式化失败
问题描述
NameNode 格式化可能失败,原因包括目录权限不足或目录已存在。
解决方案
删除旧数据后重新格式化,或检查目录权限。
Python 实现
import os
import shutilclass NameNodeFormatter:def __init__(self, namenode_dir):self.namenode_dir = namenode_dirdef format_namenode(self):if os.path.exists(self.namenode_dir):print(f"清理 NameNode 目录: {self.namenode_dir}")shutil.rmtree(self.namenode_dir)os.makedirs(self.namenode_dir, exist_ok=True)print("NameNode 已成功格式化!")# 示例
formatter = NameNodeFormatter("/hadoop/hdfs/namenode")
formatter.format_namenode()
问题 5:HDFS 副本分布不均
问题描述
HDFS 副本分布可能集中在少数节点,导致存储压力集中。
解决方案
使用 hdfs balancer
工具均衡数据分布。
Python 实现
import subprocessclass HDFSBalancer:def balance_cluster(self, threshold=10):command = f"hdfs balancer -threshold {threshold}"process = subprocess.run(command.split(), capture_output=True, text=True)print(process.stdout)# 示例
balancer = HDFSBalancer()
balancer.balance_cluster(threshold=5)
问题 6:MapReduce 作业运行失败
问题描述
常见原因包括输入路径错误、任务配置不足或代码逻辑问题。
解决方案
检查输入路径,增加内存分配,调试 Mapper 和 Reducer 代码。
Python 实现
class JobConfig:def __init__(self, input_path, output_path, mapper, reducer):self.input_path = input_pathself.output_path = output_pathself.mapper = mapperself.reducer = reducerdef validate_paths(self):if not os.path.exists(self.input_path):raise FileNotFoundError(f"输入路径不存在: {self.input_path}")return True# 示例
try:job = JobConfig("/input/data", "/output/result", "MyMapper", "MyReducer")job.validate_paths()print("作业配置验证成功!")
except FileNotFoundError as e:print(e)
问题 7:节点磁盘空间耗尽
问题描述
节点的磁盘空间可能因日志或临时文件过多而耗尽。
解决方案
定期清理过期文件和日志。
Python 实现
class DiskCleaner:def __init__(self, log_dir, temp_dir):self.log_dir = log_dirself.temp_dir = temp_dirdef clean_logs(self):if os.path.exists(self.log_dir):shutil.rmtree(self.log_dir)os.makedirs(self.log_dir, exist_ok=True)def clean_temp(self):if os.path.exists(self.temp_dir):shutil.rmtree(self.temp_dir)os.makedirs(self.temp_dir, exist_ok=True)# 示例
cleaner = DiskCleaner("/hadoop/logs", "/hadoop/tmp")
cleaner.clean_logs()
cleaner.clean_temp()
以下是问题 8 到问题 15 的详细分析、解决方案,以及完整的 Python 面向对象实现代码。
问题 8:集群性能下降
问题描述
集群性能下降的原因可能包括:
- 配置不当:如
dfs.blocksize
设置过小。 - 负载不均:计算和存储资源分布不平衡。
- 网络瓶颈:带宽不足或节点间通信效率低。
解决方案
- 调整 HDFS 的
dfs.blocksize
参数,增大块大小以减少开销。 - 使用
hdfs balancer
工具优化节点负载。 - 检查网络配置,提高带宽或优化通信。
Python 实现
import subprocessclass ClusterOptimizer:def __init__(self, block_size):self.block_size = block_sizedef update_block_size(self, config_file):print(f"更新配置文件中的块大小为 {self.block_size}。")# 假设这里更新 `hdfs-site.xml`,省略 XML 解析与修改实现。def balance_cluster(self):command = "hdfs balancer -threshold 10"process = subprocess.run(command.split(), capture_output=True, text=True)print(process.stdout)# 示例
optimizer = ClusterOptimizer(block_size=128 * 1024 * 1024)
optimizer.update_block_size("/etc/hadoop/hdfs-site.xml")
optimizer.balance_cluster()
问题 9:日志文件过大
问题描述
日志文件过多或过大可能占用磁盘空间,影响集群运行。
解决方案
- 调整日志级别,例如将 INFO 改为 WARN 或 ERROR。
- 配置定期清理任务,删除过期日志。
Python 实现
class LogManager:def __init__(self, log_dir):self.log_dir = log_dirdef adjust_log_level(self, config_file, level="WARN"):print(f"更新日志配置文件,将日志级别设置为 {level}。")# 假设这里更新 `log4j.properties` 配置文件。def clean_old_logs(self, days=7):if os.path.exists(self.log_dir):for file in os.listdir(self.log_dir):file_path = os.path.join(self.log_dir, file)if os.path.isfile(file_path):# 检查文件修改时间并删除超过指定天数的文件if (time.time() - os.path.getmtime(file_path)) > days * 86400:os.remove(file_path)print(f"已删除过期日志: {file_path}")# 示例
log_manager = LogManager("/hadoop/logs")
log_manager.adjust_log_level("/etc/hadoop/log4j.properties", level="WARN")
log_manager.clean_old_logs(days=30)
问题 10:网络延迟导致任务失败
问题描述
Hadoop 任务间依赖网络通信,高延迟或丢包会导致任务超时。
解决方案
- 增加任务重试次数(
mapreduce.map.maxattempts
)。 - 优化网络拓扑结构,提高带宽。
Python 实现
class NetworkOptimizer:def __init__(self, config_file):self.config_file = config_filedef update_retry_attempts(self, max_attempts):print(f"更新任务重试次数为 {max_attempts}。")# 假设更新 `mapred-site.xml` 配置文件,略去 XML 修改。# 示例
network_optimizer = NetworkOptimizer("/etc/hadoop/mapred-site.xml")
network_optimizer.update_retry_attempts(max_attempts=5)
问题 11:HDFS 数据目录损坏
问题描述
HDFS 数据目录损坏可能由硬件故障或误操作引起。
解决方案
- 使用
hdfs fsck
工具检查并修复文件系统。 - 删除损坏的块,重新复制副本。
Python 实现
class HDFSRepairTool:def __init__(self):passdef check_and_repair(self):command = "hdfs fsck / -delete"process = subprocess.run(command.split(), capture_output=True, text=True)print("HDFS 文件系统检查结果:")print(process.stdout)# 示例
repair_tool = HDFSRepairTool()
repair_tool.check_and_repair()
问题 12:任务卡在调度阶段
问题描述
YARN 的调度器资源不足可能导致任务长时间等待调度。
解决方案
- 增加资源分配,例如调整
yarn.scheduler.maximum-allocation-mb
。 - 使用
CapacityScheduler
或FairScheduler
优化调度。
Python 实现
class SchedulerConfigUpdater:def __init__(self, config_file):self.config_file = config_filedef update_scheduler_config(self, max_allocation_mb):print(f"设置最大资源分配为 {max_allocation_mb} MB。")# 假设更新 XML 配置文件。# 示例
scheduler_updater = SchedulerConfigUpdater("/etc/hadoop/yarn-site.xml")
scheduler_updater.update_scheduler_config(max_allocation_mb=8192)
问题 13:MapReduce 输出目录已存在
问题描述
如果输出目录已存在,MapReduce 作业将无法运行。
解决方案
检查输出目录是否存在,若存在则删除或指定其他目录。
Python 实现
class OutputDirManager:def __init__(self, output_dir):self.output_dir = output_dirdef prepare_output_dir(self):if os.path.exists(self.output_dir):print(f"输出目录已存在,删除: {self.output_dir}")shutil.rmtree(self.output_dir)os.makedirs(self.output_dir, exist_ok=True)print("输出目录已准备好!")# 示例
output_manager = OutputDirManager("/output/result")
output_manager.prepare_output_dir()
问题 14:RPC 连接失败
问题描述
Hadoop 节点间使用 RPC 通信,网络防火墙或配置问题可能导致连接失败。
解决方案
- 检查防火墙规则,确保所有必要端口(如 50070、8020 等)开放。
- 修改
core-site.xml
,调整超时参数。
Python 实现
class RPCConfigUpdater:def __init__(self, config_file):self.config_file = config_filedef update_timeout(self, timeout_ms):print(f"更新 RPC 超时时间为 {timeout_ms} 毫秒。")# 假设更新 `core-site.xml` 配置文件。# 示例
rpc_updater = RPCConfigUpdater("/etc/hadoop/core-site.xml")
rpc_updater.update_timeout(timeout_ms=30000)
问题 15:节点间时间不同步
问题描述
Hadoop 依赖时间戳同步任务,节点间时间不同步可能导致错误。
解决方案
使用 NTP 服务同步所有节点的系统时间。
Python 实现
class TimeSync:def sync_time(self):command = "sudo service ntp restart"process = subprocess.run(command.split(), capture_output=True, text=True)print(process.stdout)# 示例
time_sync = TimeSync()
time_sync.sync_time()
总结
至此,针对 Hadoop 使用和管理中可能遇到的 15 个问题均进行了详细分析,并通过面向对象的 Python 代码实现了解决方案。这些内容涵盖从配置到优化,再到常见错误的检测与修复,为 Hadoop 集群的高效运行提供了强有力的保障。
相关文章:
Hadoop 使用过程中 15 个常见问题的详细描述、解决方案
目录 问题 1:配置文件路径错误问题描述解决方案Python 实现 问题 2:YARN 资源配置不足问题描述解决方案Python 实现 问题 3:DataNode 无法启动问题描述解决方案Python 实现 问题 4:NameNode 格式化失败问题描述解决方案Python 实现…...
【Flutter 问题系列第 84 篇】如何清除指定网络图片的缓存
这是【Flutter 问题系列第 84 篇】,如果觉得有用的话,欢迎关注专栏。 博文当前所用 Flutter SDK:3.24.3、Dart SDK:3.5.3,网络图片缓存用的插件 cached_network_image: 3.4.1,缓存的网络图像的存储和检索用…...
【UE5】使用基元数据对材质传参,从而避免新建材质实例
在项目中,经常会遇到这样的需求:多个模型(例如 100 个)使用相同的材质,但每个模型需要不同的参数设置,比如不同的颜色或随机种子等。 在这种情况下,创建 100 个实例材质不是最佳选择。正确的做…...
鸿蒙动画开发07——粒子动画
1、概 述 粒子动画是在一定范围内随机生成的大量粒子产生运动而组成的动画。 动画元素是一个个粒子,这些粒子可以是圆点、图片。我们可以通过对粒子在颜色、透明度、大小、速度、加速度、自旋角度等维度变化做动画,来营造一种氛围感,比如下…...
IDEA2023 创建SpringBoot项目(一)
一、Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。 二、快速开发 1.打开IDEA选择 File->New->Project 2、…...
VSCode:终端打开一片空白,无cmd
第一步:找到右下角设置图标 第二步:找到 Terminal - Integrated - Default Profile: Windows: 选择一个本地存在的命令方式,重启即可 也可以直接在右下角直接选择...
Zea maize GO
1.涉及到新旧基因组的转化 B73v4_to_B73v5 (davidbioinformatics只支持新版基因组) MaizeGDB Map文件下载https://download.maizegdb.org/Pan-genes/B73_gene_xref/小处理脚本(制作map文件) import pandas as pd# 读取CSV文件 …...
Android开发实战班 - 数据持久化 - 数据加密与安全
在 Android 应用开发中,数据安全至关重要,尤其是在处理敏感信息(如用户密码、支付信息、个人隐私数据等)时。数据加密是保护数据安全的重要手段,可以有效防止数据泄露、篡改和未经授权的访问。本章节将介绍 Android 开…...
EDA实验设计-led灯管动态显示;VHDL;Quartus编程
EDA实验设计-led灯管动态显示;VHDL;Quartus编程 引脚配置实现代码RTL引脚展示现象记录效果展示 引脚配置 #------------------GLOBAL--------------------# set_global_assignment -name RESERVE_ALL_UNUSED_PINS "AS INPUT TRI-STATED" set_…...
Eclipse 查找功能深度解析
Eclipse 查找功能深度解析 Eclipse 是一款广受欢迎的集成开发环境(IDE),它为各种编程语言提供了强大的开发工具。在本文中,我们将深入探讨 Eclipse 的查找功能,这是开发者日常工作中不可或缺的一部分。无论是查找代码中的特定字符串,还是进行更复杂的搜索,如正则表达式…...
第三百二十九节 Java网络教程 - Java网络UDP套接字
Java网络教程 - Java网络UDP套接字 TCP套接字是面向连接的,基于流。基于UDP的套接字是无连接的,基于数据报。 使用UDP发送的数据块称为数据报或UDP数据包。每个UDP分组具有数据,目的地IP地址和目的地端口号。 无连接套接字在通信之前不建立…...
Leetcode215. 数组中的第K个最大元素(HOT100)
链接 第一次: class Solution { public:int findKthLargest(vector<int>& nums, int k) {sort(nums.begin(),nums.end());int n nums.size();return nums[n-k];} }; 这显然不能出现在面试中,因为面试官考察的不是这个。 正确的代码&#…...
QT与嵌入式——搭建串口
1、源码 由于我需要不止一个串口来进行数据交互,所以简单的封装了一下 void Usb_Init(QString portName, QSerialPort *Port) {Port->setPortName(portName);Port->setBaudRate(QSerialPort::Baud115200); // 设置波特率,根据你的开发板配置修改…...
Shell编程-6
声明:学习视频来自b站up主 泷羽sec,如涉及侵权马上删除文章 感谢泷羽sec 团队的教学 视频地址:shell(6)if条件判断与for循环结构_哔哩哔哩_bilibili 一、if条件判断 在Shell脚本中,if语句用于基于条件的评估来执行不同的代码块。…...
使用 Postman 设置 Bearer Token 进行身份验证
学习笔记 1. 打开 Postman 并创建新请求 打开 Postman。 在左上角点击 按钮,创建一个新的请求。 2. 选择 HTTP 方法 在请求类型(默认为 GET)旁边的下拉菜单中,选择你需要的 HTTP 方法,如 POST、GET、PUT 等。 3…...
现在转前端怎么样?
互联网技术日新月异,软件开发者追逐技术浪潮的脚步从未停歇。在这个快速发展的行业中,如何规划自己的职业道路,选择合适的技术方向,成为了许多开发者面临的重要抉择。本文将围绕技术选择这个话题,分享一些深入的思考和…...
【算法一周目】滑动窗口(1)
目录 长度最小的子数组 解题思路 代码实现 无重复字符的最大字串 解题思路 代码实现 最大连续1的个数l l l 解题思路 代码实现 将x减到0的最小操作数 解题思路 代码实现 长度最小的子数组 题目链接:209. 长度最小的子数组题目描述: 给定一个…...
React Native 基础
React 的核心概念 定义函数式组件 import组件 要定义一个Cat组件,第一步要使用 import 语句来引入React以及React Native的 Text 组件: import React from react; import { Text } from react-native; 定义函数作为组件 const CatApp = () => {}; 渲染Text组件...
【C++笔记】list使用详解及模拟实现
前言 各位读者朋友们大家好!上期我们讲了vector的使用以及底层的模拟实现,这期我们来讲list。 目录 前言一. list的介绍及使用1.1 list的介绍1.2 list的使用1.2.1 list的构造1.2.2 list iterator的使用1.2.3 list capacity1.2.4 list element access1.…...
【机器学习】机器学习中用到的高等数学知识-7.信息论 (Information Theory)
熵 (Entropy):用于评估信息的随机性,常用于决策树和聚类算法。交叉熵 (Cross-Entropy):用于衡量两个概率分布之间的差异,在分类问题中常用。 信息论作为处理信息量和信息传输的数学理论,在机器学习中具有广泛的应用。…...
《现代制造技术与装备》是什么级别的期刊?是正规期刊吗?能评职称吗?
问题解答 问:《现代制造技术与装备》是不是核心期刊? 答:不是,是知网收录的第二批认定学术期刊。 问:《现代制造技术与装备》级别? 答:省级。主管单位:齐鲁工业大学࿰…...
09 - Clickhouse的SQL操作
目录 1、Insert 1.1、标准 1.2、从表到表的插入 2、Update和Delete 2.1、删除操作 2.2、修改操作 3、查询操作 3.1、with rollup:从右至左去掉维度进行小计 3.2、with cube : 从右至左去掉维度进行小计,再从左至右去掉维度进行小计 3.3、with …...
如何解决pdf.js跨域从url动态加载pdf文档
摘要 当我们想用PDF.js从URL加载文档时,将会因遇到跨域问题而中断,且是因为会触发了PDF.js和浏览器的双重CORS block,这篇文章将会介绍:①如何禁用pdf.js的跨域?②如何绕过浏览器的CORS加载URL文件?②如何使…...
深入理解TTY体系:设备节点与驱动程序框架详解
往期内容 本专栏往期内容:Uart子系统 UART串口硬件介绍 interrupt子系统专栏: 专栏地址:interrupt子系统Linux 链式与层级中断控制器讲解:原理与驱动开发 – 末片,有专栏内容观看顺序 pinctrl和gpio子系统专栏…...
库的操作(MySQL)
1.创建数据库 语法: CREATE DATABASE [IF NOT EXISTS] db_name [create_specification [, create_specification] ...] create_specification:[DEFAULT] CHARACTER SET charset_name[DEFAULT] COLLATE collation_name说明: 大写的表示关键字 [ ] 是可…...
在 for 循环中,JVM可能会将 arr.length 提升到循环外部,仅计算一次。可能会将如何解释 详解
在 Java 的 for 循环中,JVM 有能力进行优化,将 arr.length 的访问提升到循环外部,避免每次迭代都重新计算 arr.length。这种优化主要是由于 JVM 的 即时编译器(JIT) 和 逃逸分析(Escape Analysis࿰…...
回溯--数据在内存中的存储:整数、大小端和浮点数的深度解析
目录 引言 1. 整数在内存中的存储 1.1 原码、反码和补码 1.2 为什么使用补码? 1.3 示例代码:整数的存储 2. 大小端字节序和字节序判断 2.1 什么是大端和小端? 2.2 为什么会有大端和小端之分? 2.3 字节序的判断小程序 2.…...
第二十二章 Spring之假如让你来写AOP——Target Object(目标对象)篇
Spring源码阅读目录 第一部分——IOC篇 第一章 Spring之最熟悉的陌生人——IOC 第二章 Spring之假如让你来写IOC容器——加载资源篇 第三章 Spring之假如让你来写IOC容器——解析配置文件篇 第四章 Spring之假如让你来写IOC容器——XML配置文件篇 第五章 Spring之假如让你来写…...
探索设计模式:原型模式
设计模式之原型模式 🧐1. 概念🎯2. 原型模式的作用📦3. 实现1. 定义原型接口2. 定义具体的原型类3. 定义客户端4. 结果 📰 4. 应用场景🔍5. 深拷贝和浅拷贝 在面向对象编程中,设计模式是一种通用的解决方案…...
NLP论文速读(EMNLP 2023)|工具增强的思维链推理
论文速读|ChatCoT: Tool-Augmented Chain-of-Thought Reasoning on Chat-based Large Language Models 论文信息: 简介: 本文背景是关于大型语言模型(LLMs)在复杂推理任务中的表现。尽管LLMs在多种评估基准测试中取得了优异的成绩…...
wordpress 安装 空白页/东莞网络推广托管
表a 的id字段不做唯一约束,表中aa,bb字段数据重复,目前希望aa,bb字段组合确定唯一一条数据,如何删除表a中的重复数据,保留id值最小的哪一条数据。 执行sql: delete from a where id not in (select MIN(i…...
网站的数据库选择/优秀网站
在上个星期面试一家公司的笔试题上面的最后一道题就是写程序查找一个字符串的最长重复子串。当时想了很长时间没想出什么好方法,就把一个算法复杂度比较高的算法写上去了。回来上机把那个算法写了一遍测试没问题,然后自己又到网上面查查还有什么方法&…...
静态网站如何共用一个头部和尾部/东莞软文推广
在函数编程是在java 8中加入的新内容(还不知道java9就出来了),java 8之所以费这么大功夫引入函数式编程,原因有二: 代码简洁,函数式编程写出的代码简洁且意图明确,使用stream接口让你从此告别for循环。多核友好&#…...
矢量网站动画怎么做/网站上不去首页seo要怎么办
因为qemu内置了gdbserver,所以我们可以用gdb调试qemu虚拟机上执行的代码,而且不受客户机系统限制。 以下内容是我调试 grub 0.97 时的一份笔记。 准备 qemu, gdb,以及一份带grub的虚拟机镜像,一份grub源码。 调试过程 启动虚拟机 $ sudo qemu…...
区域销售网站什么做/网络营销模式有哪些?
往常大家讨论的话题很多都是“我离职后,还被原公司的人打扰”,那么这次一起来转换视角看看:作为在职员工,原来离职后的前同事也会牵扯出不少糟心事。这次前程无忧根据网友们的亲身经历,整理出了以下几类关于前同事的纠…...
wordpress internal/电脑优化设置
一个偶然的机缘,好像要做直播相关的项目 为了筹备,前期做一些只是储备,于是开始学习ffmpeg 这是学习的第一课 做一个简单的播放器,播放视频画面帧 思路是,将视频文件解码,得到帧,然后使用定时器…...