分布式数据存储基础与HDFS操作实践(副本)

以下为作者本人撰写的报告,步骤略有繁琐,不建议作为参考内容,可以适当浏览,进一步理解。

一、实验目的

1、理解分布式文件系统的基本概念和工作原理。

2、掌握Hadoop分布式文件系统(HDFS)的基本操作。

3、学习如何在HDFS上进行文件的上传、下载、查看和管理。

二、实验环境准备

1、JAVA环境准备:确保Java Development Kit (JDK) 已安装并配置好环境变量。

2、Hadoop环境准备:安装并配置Hadoop环境,确保Hadoop的各个组件可以在伪分布式模式下运行。

三、实验教材参考

《大数据存储》,谭旭,人民邮电出版社,2022,ISBN 978-7-115-59414-3。

四、实验内容与步骤

1、 Hadoop的安装与配置

1. 根据教材《大数据存储》中的指导,完成Hadoop的安装。

2. 配置Hadoop以运行在伪分布式模式。

2.1 记录节点1的IP地址

节点1的IP地址为10.185.34.80

2.2 记录节点2的IP地址

节点2的IP地址为10.185.34.81

2.3 记录节点3的IP地址

节点3的IP地址为10.185.34.82

2.4 配置主机名称

主机1 名称配置

主机2名称配置

主机3名称配置

配置完名称后,重启主机。

2.5 节点1主机名与IP地址映射文件配置

检测配置是否成功

配置成功。

主机2和主机3的步骤相同,此处省略。

2.6 配置SSH免密码登录

2.6.1 节点秘钥配置及分发

使用下面代码生成使用rsa加密方式的秘钥

echo -e "\n"|ssh-keygen -t rsa -N "" >/dev/null 2>&1

查看秘钥

通过下面的命令将公钥文件发送到本机,创建root免密钥通道

ssh-copy-id -i /root/.ssh/id_rsa.pub root@realtime-1

将公钥文件发送到其他两个节点。其他两个节点进行相同的操作。此处省略。

2.6.2 登录测试

2.7 配置JDK

2.7.1 创建工作路径

2.7.2 解压安装包

2.7.3 配置环境变量

在.bashrc文件中写入下列内容:

把环境变量配置文件分发到其他两个节点。

2.7.4 更新环境变量

2.7.5 验证JDK是否配置成功

2.8 NTP服务配置

2.8.1 NTP服务配置

主机1中NTP服务配置。

主机2中NTP服务配置。

主机3中NTP服务配置。

2.8.2 启动NTP服务

在主机1中启动NTP服务。

在主机2中启动NTP服务。

在主机3中启动NTP服务。

2.8.3 NTP服务状态查看

2.9 SElinux安全配置

关闭节点的SElinux的安全设置。

2.10 安装配置ZooKeeper集群

2.10.1 解压安装包

查看解压后的文件内容

2.10.2 数据存储目录创建

创建数据存储目录data和日志存储目录logs

2.10.3 主机myid编号文件创建

2.10.4 zookeeper 配置文件编辑

 通过命令vi /usr/cx/zookeeper-3.4.6/conf/zoo.cfg 创建并打开zoo.cfg配置文件,并在文件中写入下列内容

2.10.5 文件分发

通过下面命令将节点1的zookeeper文件包分发到节点2中。

scp -r /usr/cx/zookeeper-3.4.6 root@realtime-2:/usr/cx/

通过下面命令将节点1的zookeeper文件包分发到节点3中

scp -r /usr/cx/zookeeper-3.4.6 root@realtime-3:/usr/cx/

2.10.6 环境变量配置

通过命令 vi ~/.bashrc 使用vi编辑器打开 ~/.bashrc文件,将文件编辑为下图内容

通过命令将环境变量配置文件分发到其他节点

2.10.7 更新环境变量

2.10.8 验证环境变量是否配置成功

三个节点上的zookeeper环境变量均配置成功

2.11 zookeeper启动及状态查看

2.11.1 zookeeper启动

三个节点上的zookeeper启动成功

2.11.2 zookeeper运行状态查看

由结果得出,节点2是作为leader角色运行,其他两个节点是作为follower角色运行。

2.12 配置hadoop集群

2.12.1 数据存储目录创建

创建Hadoop元数据存储目录namenode,Hadoop数据存储目录datanode,创建JournalNode数据存储目录journalnode,创建任务调度的日志存储目录hadoop-yarn。

2.12.2 解压安装文件

使用tar -zxvf /usr/software/hadoop-2.7.1.tar.gz -C /usr/cx命令解压Hadoop安装文件。

2.12.3 编辑hadoop配置文件

使用vi /usr/cx/hadoop-2.7.1/etc/hadoop/hadoop-env.sh命令对配置文件进行编辑。

将此处修改为jdk的安装路径。

使用命令vi /usr/cx/hadoop-2.7.1/etc/hadoop/hdfs-site.xml 配置hdfs-site.xml 文件进行配置。将下列内容添加到<configuration> 和 </configuration> 之间:

/*配置DataNode的数据存储目录,需要与上文创建的目录相对应*/
<property>
<name>dfs.datanode.data.dir</name>
<value>/hdfs/datanode</value>
</property>
/*配置数据块大小为256M*/
<property>
<name>dfs.blocksize</name>
<value>268435456</value>
</property>
/*自定义的HDFS服务名,在高可用集群中,无法配置单一HDFS服务器入口,以需要指定一个逻辑上的服务名,当访问服务名时,会自动选择NameNode节点进行访问*/
<property>
<name>dfs.nameservices</name>
<value>HDFScluster</value>
</property>
/*配置NameNode的数据存储目录,需要与上文创建的目录相对应*/
<property>
<name>dfs.namenode.name.dir</name>
<value>/hdfs/namenode</value>
</property>
/*定义HDFS服务名所指向的NameNode主机名称*/
<property>
<name>dfs.ha.namenodes.HDFScluster</name>
<value>realtime-1,realtime-2</value>
</property>
/*设置NameNode的完整监听地址*/
<property>
<name>dfs.namenode.rpc-address.HDFScluster.realtime-1</name>
<value>realtime-1:8020</value>
</property>
/*设置NameNode的完整监听地址*/
<property>
<name>dfs.namenode.rpc-address.HDFScluster.realtime-2</name>
<value>realtime-2:8020</value>
</property>
/*设置NameNode的HTTP访问地址*/
<property>
<name>dfs.namenode.http-address.HDFScluster.realtime-1</name>
<value>realtime-1:50070</value>
</property>
/*设置NameNode的HTTP访问地址*/
<property>
<name>dfs.namenode.http-address.HDFScluster.realtime-2</name>
<value>realtime-2:50070</value>
</property>
/*设置主从NameNode元数据同步地址,官方推荐将nameservice作为最后的journal ID*/
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://realtime-1:8485;realtime-2:8485;realtime-3:8485/HDFScluster</value>
</property>
/*设置HDFS客户端用来连接集群中活动状态NameNode节点的Java类*/
<property>
<name>dfs.client.failover.proxy.provider.HDFScluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
/*设置SSH登录的私钥文件地址*/
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_rsa</value>
</property>
/*启动fence过程,确保集群高可用性*/
<property>
<name>dfs.ha.fencing.methods</name>
<value>shell(/bin/true)</value>
</property>
/*配置JournalNode的数据存储目录,需要与上文创建的目录相对应*/
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/hdfs/journalnode</value>
</property>
/*设置自动切换活跃节点,保证集群高可用性*/
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
/*配置数据块副本数*/
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
/*将dfs.webhdfs.enabled属性设置为true,否则就不能使用webhdfs的LISTSTATUS、LIST FILESTATUS等需要列出文件、文件夹状态的命令,因为这些信息都是由namenode保存的*/
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>

编辑完成后保存文件并退出vi编辑器。

使用命令vi /usr/cx/hadoop-2.7.1/etc/hadoop/core-site.xml 配置core-site.xml 文件进行配置。将下列内容添加到<configuration> 和 </configuration> 之间:

/*设置默认的HDFS访问路径,需要与hdfs-site.xml中的HDFS服务名相一致*/
<property>
<name>fs.defaultFS</name>
<value>hdfs://HDFScluster</value>
</property>
/*临时文件夹路径设置*/
<property> 
<name>hadoop.tmp.dir</name> 
<value>/usr/tmp</value> 
</property> 
/*配置ZooKeeper服务集群,用于活跃NameNode节点的选举*/
<property>
<name>ha.zookeeper.quorum</name>
<value>realtime-1:2181,realtime-2:2181,realtime-3:2181</value>
</property>
/*设置数据压缩算法*/
<property>
<name>io.compression.codecs</name>
<value>org.apache.hadoop.io.compress.DefaultCodec,org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.BZip2Codec,com.hadoop.compression.lzo.LzoCodec,com.hadoop.compression.lzo.LzopCodec,org.apache.hadoop.io.compress.SnappyCodec</value>
</property>
<property>
<name>io.compression.codec.lzo.class</name>
<value>com.hadoop.compression.lzo.LzoCodec</value>
</property>
/*设置使用hduser用户可以代理所有主机用户进行任务提交*/
<property>
<name>hadoop.proxyuser.hduser.host</name>
<value>*</value>
</property>
/*设置使用hduser用户可以代理所有组用户进行任务提交*/
<property>
<name>hadoop.proxyuser.hduser.groups</name>
<value>*</value>
</property>
编辑完成后保存文件并退出vi编辑器。
使用命令vi /usr/cx/hadoop-2.7.1/etc/hadoop/yarn-site.xml文件进行配置。将下列内容添加到<configuration> 和 </configuration> 之间:
/*设置NodeManager上运行的附属服务,需配置成mapreduce_shuffle才可运行MapReduce程序*/
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce_shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
/*设置任务日志存储目录*/
<property>
<name>yarn.nodemanager.log-dirs</name>
<value>file:///var/log/hadoop-yarn </value>
</property>
/*设置Hadoop依赖包地址*/
<property>
<name>yarn.application.classpath</name>
<value>
$HADOOP_HOME/share/hadoop/common/*,$HADOOP_HOME/share/hadoop/common/lib/*,
HADOOP_HOME/share/hadoop/hdfs/*,$HADOOP_HOME/share/hadoop/hdfs/lib/*,
$HADOOP_HOE/share/hadoop/mapreduce/*,$HADOOP_HOME/share/hadoop/mapreduce/lib/*,
$HADOOP_HOME/share/hadoop/yarn/*,$HADOOP_HOME/share/hadoop/yarn/lib/*
</value>
</property>
/*开启resourcemanager 的高可用性功能*/
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
/*标识集群中的resourcemanager,如果设置选项,需要确保所有的resourcemanager节点在配置中都有自己的逻辑id*/
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>YARNcluster</value>
</property>
/*设置resourcemanager节点的逻辑id*/
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
/*为每个逻辑id绑定实际的主机名称*/
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>realtime-1</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>realtime-2</value>
</property>
/*指定ZooKeeper服务地址*/
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>realtime-1:2181,realtime-2:2181,realtime-3:2181</value>
</property>
/*指定resourcemanager的WEB访问地址*/
<property> 
<name>yarn.resourcemanager.webapp.address.rm1</name> 
<value>realtime-1:8089</value> 
</property>
<property> 
<name>yarn.resourcemanager.webapp.address.rm2</name> 
<value>realtime-2:8089</value> 
</property>
/*设定虚拟内存与实际内存的比例,比例值越高,则可用虚拟内存就越多*/
<property>
<name>yarn.nodemanager.vmem-pmem-ratio</name>
<value>3</value>
</property>
/*设定单个容器可以申领到的最小内存资源*/
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>32</value>
</property>
/*设置当任务运行结束后,日志文件被转移到的HDFS目录*/
<property> 
<name>yarn.nodemanager.remote-app-log-dir</name>
<value>hdfs://HDFScluster/var/log/hadoop-yarn/apps</value>
</property>
/*设定资调度策略,目前可用的有FIFO、Capacity Scheduler和Fair Scheduler*/
<property>
<name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yan.server.resourcemanager.scheduler.capacity.CapacityScheduler</value>
</property>
/*设定每个任务能够申领到的最大虚拟CPU数目*/
<property> 
<name>yarn.scheduler.maximum-allocation-vcores</name> 
<value>8</value>
</property>
/*设置任务完成指定时间(秒)之后,删除任务的本地化文件和日志目录*/
<property>
<name>yarn.nodemanager.delete.debug-delay-sec</name>
<value>600</value>
</property>
/*设置志在HDFS上保存多长时间(秒)*/
<property>
<name>yarn.nodemanager.log.retain-seconds</name>
<value>86400</value>
</property>
/*设定物理节点有2G内存加入资源池*/
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>2048</value>
</property>

编辑完成后保存文件并退出。

使用 cp /usr/cx/hadoop-2.7.1/etc/hadoop/mapred-site.xml.template /usr/cx/hadoop-2.7.1/etc/hadoop/mapred-site.xml 命令复制mapred-site.xml.template文件并重命名为mapred-site.xml。使用 vi 命令打开mapred-site.xml文件进行配置,在文件 <configuration>和</configuration>之间增加下列内容:

/*Hadoop对MapReduce运行框架一共提供了3种实现,在mapred-site.xml中通过"mapreduce.framework.name"这个属性来设置为"classic"、"yarn"或者"local"*/
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>

使用 vi /usr/cx/hadoop-2.7.1/etc/hadoop/slaves 命令打开slaves文件进行配置。将文件中的内容更改为图中内容:

编辑完成后保存文件并退出。

2.12.4 文件分发

通过命令 scp -r /usr/cx/hadoop-2.7.1 root@realtime-n:/usr/cx/ 将节点1 的Hadoop文件包分到其他节点中。

2.12.5 配置Hadoop环境变量

通过命令 vi  ~/.bashrc 使用vi编辑器编辑~/.bashrc文件,在文件中加入图中内容,编辑完成后保存并退出。

通过scp分发命令将节点1的环境变量文件分发到其他两个节点。

2.12.6 更新环境变量

执行图中命令,更新三个节点中的环境变量。

2.12.7 格式化HDFS

执行命令 hadoop namenode -format 格式化HDFS文件系统。

2.12.8 格式化zkfc元数据

执行命令 hdfs zkfc -formatZK 格式化zkfc元数据,在一个节点中进行处理即可。

2.19 Hadoop集群启用运行

2.19.1 启动HDFS相关服务

执行命令 start-dfs.sh 启动HDFS相关服务。

执行命令 jps 查看节点1中对应的相关服务。

执行命令 ssh realtime-2 "hadoop namenode -bootstrapStandby" 格式化Standby节点。

格式化Standby节点后,执行命令 ssh realtime-2 "hadoop-daemon.sh start namenode" 启动Standby节点的NameNode进程。

2.13.2 启动yarn相关服务

执行命令 start-yarn.sh 启动yarn相关服务。

执行命令 ssh realtime-2 "yarn-daemon.sh start resourcemanager" 在节点2中启动ResourceManager进程。

2、启动Hadoop HDFS

1. 启动HDFS。

2. 验证HDFS是否成功启动,可以使用jps命令查看Java进程,确认NameNode和DataNode等进程是否运行。

出现以上内容表示启动成功。

3、HDFS基本操作实践

1. 目录操作:使用hdfs dfs -mkdir命令创建新的目录。

2. 文件上传:使用hdfs dfs -put命令上传本地文件到HDFS。

3. 文件下载:使用hdfs dfs -get命令下载HDFS上的文件到本地。

4. 文件查看:使用hdfs dfs -cat命令查看HDFS上的文件内容。

5. 文件删除:使用hdfs dfs -rm命令删除HDFS上的文件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/1849.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Linux】操作系统与进程概念

一、操作系统 1.1概念 任何计算机系统都包含一个基本的程序集合&#xff0c;称为操作系统(OS)。笼统的理解&#xff0c;操作系统包括&#xff1a; 1.内核&#xff08;进程管理&#xff0c;内存管理&#xff0c;文件管理&#xff0c;驱动管理&#xff09; 2.其他程序&#xff0…

深度学习中的学习率调度器(scheduler)分析并作图查看各方法差异

文章目录 1. 指数衰减调度器&#xff08;Exponential Decay Scheduler&#xff09;工作原理适用场景实现示例 2. 余弦退火调度器&#xff08;Cosine Annealing Scheduler&#xff09;工作原理适用场景实现示例 3. 步长衰减调度器&#xff08;Step Decay Scheduler&#xff09;工…

WEB攻防-通用漏洞_XSS跨站_权限维持_捆绑钓鱼_浏览器漏洞

目录 XSS的分类 XSS跨站-后台植入Cookie&表单劫持 【例1】&#xff1a;利用beef或xss平台实时监控Cookie等凭据实现权限维持 【例2】&#xff1a;XSS-Flash钓鱼配合MSF捆绑上线 【例3】&#xff1a;XSS-浏览器网马配合MSF访问上线 XSS的分类 反射型&#xff08;非持久…

【AIGC-ChatGPT进阶提示词指令】智慧母婴:打造基于成长树的儿童发展引导系统

第一次进入全站综合热榜&#xff0c;有点紧张 好了&#xff0c;开始今天的内容&#xff0c;今天的内容是基于育儿的系统 今天继续回馈大家&#xff0c;最近都是可以在自媒体上使用的提示词。提示词在最下方 引言 在人工智能时代&#xff0c;如何将传统育儿智慧与现代教育理念有…

使用葡萄城+vue实现Excel

最终实现效果如下 包含增加复选框 设置公式 设置背景颜色等&#xff0c;代码实在太多 有需要可留言 第一步&#xff1a;创建表头 请使用官网提供的网址&#xff1a;在线 Excel 编辑器 | SpreadJS 在线表格编辑器 1.点击下方号&#xff0c;创建一个新的sheet页 默认新创建的she…

【Qt】01-了解QT

踏入QT的殿堂之路 前言一、创建工程文件1.1 步骤介绍1.2 编译介绍方法1、方法2、编译成功 二、了解框架2.1 main.cpp2.2 .Pro文件2.2.1 注释需要打井号。2.2.2 F1带你进入帮助模式2.2.3 build文件 2.3 构造函数 三、编写工程3.1 main代码3.2 结果展示 四、指定父对象4.1 main代…

《异步编程之美》— 全栈修仙《Java 8 CompletableFuture 对比 ES6 Promise 以及Spring @Async》

哈喽&#xff0c;大家好&#xff01;在平常开发过程中会遇到许多意想不到的坑&#xff0c;本篇文章就记录在开发过程中遇到一些常见的问题&#xff0c;看了许多博主的异步编程&#xff0c;我只能说一言难尽。本文详细的讲解了异步编程之美&#xff0c;是不可多得的好文&#xf…

unity——Preject3——面板基类

目录 1.Canvas Group Canvas Group 的功能 Canvas Group 的常见用途 如何使用 Canvas Group 2.代码 3.代码分析 类分析:BasePanel 功能 作用 实际应用 代码解析:hideCallBack?.Invoke(); 语法知识点 作用 虚函数(virtual)和抽象类(abstract)的作用与区别 …

Windows service运行Django项目

系统&#xff1a;Windows Service 软件&#xff1a;nssm&#xff0c;nginx 配置Django项目 1、把Django项目的静态文件整理到staticfiles文件夹中 注&#xff1a;settings中的设置 STATIC_URL /static/ STATIC_ROOT os.path.join(BASE_DIR, staticfiles/) STATICFILES_DI…

SQL面试题1:连续登陆问题

引言 场景介绍&#xff1a; 许多互联网平台为了提高用户的参与度和忠诚度&#xff0c;会推出各种连续登录奖励机制。例如&#xff0c;游戏平台会给连续登录的玩家发放游戏道具、金币等奖励&#xff1b;学习类 APP 会为连续登录学习的用户提供积分&#xff0c;积分可兑换课程或…

【大数据】机器学习-----线性模型

一、线性模型基本形式 线性模型旨在通过线性组合输入特征来预测输出。其一般形式为&#xff1a; 其中&#xff1a; x ( x 1 , x 2 , ⋯ , x d ) \mathbf{x}(x_1,x_2,\cdots,x_d) x(x1​,x2​,⋯,xd​) 是输入特征向量&#xff0c;包含 d d d 个特征。 w ( w 1 , w 2 , ⋯ ,…

OpenCV基础:矩阵的创建、检索与赋值

本文主要是介绍如何使用numpy进行矩阵的创建&#xff0c;以及从矩阵中读取数据&#xff0c;修改矩阵数据。 创建矩阵 import numpy as npa np.array([1,2,3]) b np.array([[1,2,3],[4,5,6]]) #print(a) #print(b)# 创建全0数组 eros矩阵 c np.zeros((8,8), np.uint8) #prin…

(蓝桥杯)二维数组前缀和典型例题——子矩阵求和

题目描述 小 A 同学有着很强的计算能力&#xff0c;张老师为了检验小 AA同学的计算能力&#xff0c;写了一个 n 行 m 列的矩阵数列。 张老师问了小 A 同学 k 个问题&#xff0c;每个问题会先告知小 A 同学 4 个数 x1,y1,x2,y2画出一个子矩阵&#xff0c;张老师请小 A同学计算出…

Node.js - HTTP

1. HTTP请求 HTTP&#xff08;Hypertext Transfer Protocol&#xff0c;超文本传输协议&#xff09;是客户端和服务器之间通信的基础协议。HTTP 请求是由客户端&#xff08;通常是浏览器、手机应用或其他网络工具&#xff09;发送给服务器的消息&#xff0c;用来请求资源或执行…

[读书日志]8051软核处理器设计实战(基于FPGA)第七篇:8051软核处理器的测试(verilog+C)

6. 8051软核处理器的验证和使用 为了充分测试8051的性能&#xff0c;我们需要测试每一条指令。在HELLO文件夹中存放了整个测试的C语言工程文件。主函数存放在指令被分为五大类&#xff0c;和上面一样。 打开后是这样的文件结构。HELLO.c是主文件&#xff0c;这是里面的代码&am…

深入浅出 Android AES 加密解密:从理论到实战

深入浅出 Android AES 加密解密&#xff1a;从理论到实战 在现代移动应用中&#xff0c;数据安全是不可忽视的一环。无论是用户隐私保护&#xff0c;还是敏感信息的存储与传输&#xff0c;加密技术都扮演着重要角色。本文将以 AES&#xff08;Advanced Encryption Standard&am…

IDEA编译器集成Maven环境以及项目的创建(2)

选择&#xff1a;“File” ---> "Othoer Setting" --> "Settings for New Projects..." --->搜索“Maven” 新建项目 利用maven命令去编译这个项目 利用maven去打包

Open FPV VTX开源之默认MAVLink设置

Open FPV VTX开源之默认MAVLink设置 1. 源由2. 准备3. 连接4. 安装5. 配置6. 测试6.1 启动wfb-ng服务6.2 启动wfb-ng监测6.3 启动QGroundControl6.4 观察测试结果 7. 总结8. 参考资料9. 补充9.1 telemetry_tx异常9.2 DEBUG串口部分乱码9.3 PixelPilot软件问题 1. 源由 飞控图传…

gesp(C++五级)(4)洛谷:B3872:[GESP202309 五级] 巧夺大奖

gesp(C五级)&#xff08;4&#xff09;洛谷&#xff1a;B3872&#xff1a;[GESP202309 五级] 巧夺大奖 题目描述 小明参加了一个巧夺大奖的游戏节目。主持人宣布了游戏规则&#xff1a; 游戏分为 n n n 个时间段&#xff0c;参加者每个时间段可以选择一个小游戏。 游戏中共有…

像JSONDecodeError: Extra data: line 2 column 1 (char 134)这样的问题怎么解决

问题介绍 今天处理返回的 JSON 的时候&#xff0c;出现了下面这样的问题&#xff1a; 处理这种问题的时候&#xff0c;首先你要看一下当前的字符串格式是啥样的&#xff0c;比如我查看后发现是下面这样的&#xff1a; 会发现这个字符串中间没有逗号&#xff0c;也就是此时的J…