Windows环境本地配置pyspark环境详细教程
目录
- 一、背景简记
- 二、本地单机spark环境配置详细步骤
- 第一步:python环境安装
- 第二步:安装jdk及配置环境变量
- 安装包下载安装
- 环境变量配置
- 第三步:安装Spark
- 安装包下载安装
- 配置环境变量
- 第四步:安装hadoop
- 安装包下载安装
- 配置环境变量
- 第五步:环境测试
- 测试hadoop环境变量是否配置成功
- spark环境变量是否生效与本地spark是否安装成功
- 测试winutils.exe 版本是否与操作系统兼容
- 第六步:python环境安装pyspark
- 三、本地远程集群相关配置操作方式
- 配置本地window的hosts文件连接集群
- Windows下Spyder远程连接pyspark配置
- Windows下pyspark连接Hbase操作
- 四、本地spyder测试本地pyspark
- 五、结语
- 参考教程
一、背景简记
windows环境是绝大部分比较熟悉的操作系统,作为想开始入门学习spark的数据人员来说,想在python的基础上,进一步掌握学习spark的技术。那在windows环境配置好pyspark,不失为一种最优的学习方式。本文也是基于此,将个人在windows环境配置pyspark的过程进行详细记录,以便后续在其它电脑上快速配置。当然,如果能够帮助到和自己同样需求的其它朋友,当然也不甚荣幸。下面开始正题。
本文提到的所有软件,已整理放在csdn资源处,当然也可以关注微信公众号【慕匠心】,回复关键字【spark】获取下载方式。
二、本地单机spark环境配置详细步骤
注意:所有软件的安装目录,尽量避免留有任何空格,以免后期方式各种不可预期的问题
第一步:python环境安装
现在我们习以为常的安装python环境的方式,就是通过安装anaconda来实现,因此具体的annconda的过程不做记录,整体简单,当然,网上也有很多详细的安装教程。anaconda下载地址:https://repo.anaconda.com/archive/,博主所用的anaconda版本为:Anaconda3-2023.09-0-Windows-x86_64.exe,对应的python版本是3.11.11。
如下图所示:
注意事项:可以查看下系统的环境变量Path,确认下Anaconda路径有没有添加进去,如下图标注所示:
第二步:安装jdk及配置环境变量
安装包下载安装
jdk的下载地址:https://www.oracle.com/java/technologies/downloads/#java8,根据电脑系统情况,选择下载对应的安装包。
博主安装的jdk安装包:jdk-8u172-windows-x64.exe,对应的jdk版本:1.8.0。上面的截图对应的版本也可以。
下载后安装包后,直接双击安装即可。安装完成后,命令行中执行:java -version ,确认是否配置成功,如下图所示:
环境变量配置
jdk安装好后,有几个环境变量需要配置:
新增环境变量JAVA_HOME
JAVA_HOME: D:\JDK(该值根据安装路径,修改即可)
Path路径新增信息:
Path: %JAVA_HOME%\bin(直接粘贴该路径即可)
如果没有CLASSPATH环境变量,则新增
CLASSPATH: .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\bin;(直接粘贴该路径即可)
第三步:安装Spark
安装包下载安装
spark安装包下载地址:https://archive.apache.org/dist/spark/,博主所用的spark版本为:spark-3.5.0-bin-hadoop3.tgz,将其解压放在个人想存放的目录中。
配置环境变量
spark安装包解压后,记住解压存放地址,配置环境变量会用到。
新建环境变量:SPARK_HOME
SPARK_HOME: D:\bigdataenv\spark-3.5.0-bin-hadoop3(该值根据存放路径,修改即可)
新建环境变量:HADOOP_HOME
HADOOP_HOME: D:\bigdataenv\spark-3.5.0-bin-hadoop3 (现有的spark安装包都配置了hadoop,所以路径和SPARK_HOME路径相同)
Path路径新增信息:
Path: %SPARK_HOME%\bin(直接粘贴该路径即可)
新增环境变量:PYSPARK_DRIVER_PYTHON
PYSPARK_DRIVER_PYTHON: ipython
PYSPARK_DRIVER_PYTHON,设置成ipython后,pyspark交互模式变为ipython的交互模式,如下图所示(需要安装完pyspark后才有):
第四步:安装hadoop
安装包下载安装
hadoop安装包下载地址:https://archive.apache.org/dist/hadoop/common/,选择与spark对应的版本。博主所用的hadoop版本为:hadoop-3.0.0.tar.gz,将其解压放在个人想存放的目录中。
配置环境变量
hadoop安装包解压后,记住解压存放地址,配置环境变量会用到。
新建环境变量:HADOOP_HOME
HADOOP_HOME: D:\bigdataenv\hadoop-3.0.0(该值根据存放路径,修改即可)
Path路径新增信息:
Path: %HADOOP_HOME%\bin(直接粘贴该路径即可)
此时bin目录( D:\bigdataenv\hadoop-3.0.0\bin)下可能没有 hadoop.dll及winutils.exe文件,
- 需要进行下载winutils :https://soft.3dmgame.com/down/204154.html
- 解压文件,选择hadoop版本对应的文件夹bin目录下的hadoop.dll和winutils.exe文件
- 将hadoop.dll和winutils.exe 拷贝到D:\bigdataenv\hadoop-3.0.0\bin 、C:\Windows\System32、D:\bigdataenv\spark-3.5.0-bin-hadoop3\bin 下(两个文件各拷贝一份到三个目录中)
第五步:环境测试
测试hadoop环境变量是否配置成功
测试方式:在cmd输入 hadoop version,出现如下界面,说明hadoop环境变量配置成功。
spark环境变量是否生效与本地spark是否安装成功
测试方式:继续在上述命令行中执行 spark-shell,出现如下界面结果,说明spark系统环境变量配置成功。
如有报错,可参看博文《windows下Pyspark开发环境搭建》 解决方式。
测试winutils.exe 版本是否与操作系统兼容
测试方式:在命令行中执行:cd /d %SPARK_HOME%\bin切换到指定目录,然后执行:winutils.exe ls,结果如下图所示。
如果有弹窗提示,可以从网上再找下对应hadoop版本的winutils.exe即可。
第六步:python环境安装pyspark
如果已安装的python版本和本文提供的版本不一致,可以新建一个python版本环境。当然,保险起见,无论是否一致,都可以在anaconda中新建一个python环境,如下图所示,可以建立指定版本的python环境;
然后,启动Anaconda Prompt ,执行 conda activate 新建的环境名称 ,如下图所示,确认新环境启动成功。
然后执行:pip install pyspark py4j ,安装pyspark和py4j模块(因博主已安装,所以提示如下图)
三、本地远程集群相关配置操作方式
因暂无可直连配置的集群,因此参考博文《windows下Pyspark开发环境搭建》[^2] 信息,暂时整理记录如下,以便后续使用。
配置本地window的hosts文件连接集群
将集群各节点IP对应别名,配置在windows下的hosts文件中,从而可以本地直连使用集群环境。
第一步:查看linux集群各节点信息。执行命令:cat /etc/hosts
第二步:配置到windows下的hosts文件。本地host文件目录 : C:\Windows\System32\Drivers\etc\hosts 添加集群节点信息
第三步:对每个节点做如下同样的测试,保证各节点ping通。
第四步:将集群相关配置文件同步window本地。由于要远程连接Linux集群,需要远程服务器上以下四个配置文件同步到**%SPARK_HOME%\conf**目录下,四个配置文件如下:
core-site.xml --由于hdfs是基本框架,两个都个同步
hdfs-site.xml
yarn-site.xml --作远程操作要使用
hive-site.xml --有hive操作则要同步
第五步:设置环境变量YARN_CONF_DIR。环境变量设置结果如下:
**第六步:测试远程连接spark。**命令 pyspark --master yarn --deploy-mode client --name ‘test’,如下,则说明成功了。
第七步:如果报错,则设置环境变量YARN_CONF_DIR。环境变量设置结果:YARN_CONF_DIR :%SPARK_HOME%\conf
Windows下Spyder远程连接pyspark配置
针对全局:
- 将 %SPARK_HOME%\python\lib 目录下 py4j-0.10.6-src.zip 与 pyspark.zip解压缩;
- 然后放到anaconda目录 D:\ProgramData\anaconda3\Lib\site-packages 目录下即可。
针对指定环境:
在放在指定环境的Lib\site-packages 目录下。(ps:pip install py4j pyspark后,该目录下也会有配置信息,可以启动对应环境的spyder,即可调用)
Windows下pyspark连接Hbase操作
连接Hbase需要集群相关的配置文件与jar包。
第一步:将集群上的hbase-site.xml配置文件同步到本地windows的 %SPARK_HOME%\conf 目录下
第二步:将连接hbase的集群相关jar同步到 %SPARK_HOME%\jars目录下
将集群上CDH的安装目录下对应hbase 的lib库目录下的jar饱全部同步下来,如下是我集群的目录:
- /data/opt/cloudera-manager/cloudera/parcels/CDH-5.14.0-1.cdh5.14.0.p0.24/lib/hbase/lib/
- /data/opt/cloudera-manager/cloudera/parcels/CDH-5.14.0-1.cdh5.14.0.p0.24/lib/hbase
不清楚在哪个安装目录,用以下命令在确定: find /data/ -name hbase*.jar
第三步:将metrics-core-2.2.0.jar 同步下来
第四步:将SHC编译好的shc-core-spark2.3.0-hbase1.2.0.jar也放在%SPARK_HOME%\jars目录下,并上传到集群上spark2安装目录下,这样就不需要在启动部署spark程序时指定jar包。
/data/opt/cloudera-manager/cloudera/parcels/SPARK2/lib/spark2/jars/
测试spyder连接测试集群是否成功。测试代码:
from pyspark.sql import SparkSession
import time
from pyspark import SQLContextprint("开始启动会话..................")
spark=SparkSession.builder \.master("yarn-client") \.appName('test spyder') \.config("spark.some.config.option", "some-value") \.config("spark.dynamicAllocation.enabled", "false") \.config("hive.exec.dynamic.partition.mode", "nonstrict") \.config("spark.executor.instances", "3")\.enableHiveSupport()\.getOrCreate()
print("完成启动会话..................")dep = "org.apache.spark.sql.execution.datasources.hbase"
#查询表结构
catalog = """{"table":{"namespace":"default", "name":"student"},"rowkey":"key","columns":{"rowkey":{"cf":"rowkey", "col":"key", "type":"string"},"age":{"cf":"info", "col":"age", "type":"string"},"name":{"cf":"info", "col":"name", "type":"string"}}}
"""sql_sc = SQLContext(spark)
#从hbage表查询数据
df = sql_sc.read.options(catalog = catalog).format(dep).load()
#将表数据注册为临时表,并展示出来
df.createOrReplaceTempView("test1")
spark.sql("select * from test1").show()
spark.stop()
结果如下,则说明配置成功。
四、本地spyder测试本地pyspark
测试脚本1:
from pyspark.sql import SparkSession
import timeprint("开始启动会话..................")
ss = SparkSession.builder \.appName("Test PySpark") \.master("local[*]") \.getOrCreate()
print("完成启动会话..................")print("开始parallelize启动..................")
sc=ss.sparkContext
data=sc.parallelize(range(1000),7)
print(data.count())
print("结束parallelize..................")ss.stop()
测试结果如下,说明成功了。
五、结语
本地学习使用pyspark,用上述描述的第二节内容**《二、本地单机spark环境配置详细步骤》**即可配置完成本地环境。每一次安装,可能都会遇到新问题,多尝试查找网上给的一些解决方案,终会找到出路!希望本文也可以给路过的你,有所帮助。
参考教程
- 《windows搭建pyspark环境详细教程》
- 《windows下Pyspark开发环境搭建》
- https://repo.anaconda.com/archive/
- https://soft.3dmgame.com/down/204154.html
- https://archive.apache.org/dist/hadoop/common/
- https://www.oracle.com/java/technologies/downloads/#java8
相关文章:
Windows环境本地配置pyspark环境详细教程
目录 一、背景简记二、本地单机spark环境配置详细步骤第一步:python环境安装第二步:安装jdk及配置环境变量安装包下载安装环境变量配置 第三步:安装Spark安装包下载安装配置环境变量 第四步:安装hadoop安装包下载安装配置环境变量…...
《自动驾驶与机器人中的SLAM技术》ch9:自动驾驶车辆的离线地图构建
目录 1 点云建图的流程 2 前端实现 2.1 前端流程 2.2 前端结果 3 后端位姿图优化与异常值剔除 3.1 两阶段优化流程 3.2 优化结果 ① 第一阶段优化结果 ② 第二阶段优化结果 4 回环检测 4.1 回环检测流程 ① 遍历第一阶段优化轨迹中的关键帧。 ② 并发计算候选回环对…...
IP属地会随着人的移动而改变吗
在当今数字化时代,互联网已成为人们生活中不可或缺的一部分。无论是社交媒体的日常互动,还是在线购物、远程工作,IP地址作为网络身份的重要标识,扮演着举足轻重的角色。随着移动互联网技术的飞速发展,人们越来越多地在…...
openharmony应用开发快速入门
开发准备 本文档适用于OpenHarmony应用开发的初学者。通过构建一个简单的具有页面跳转/返回功能的应用(如下图所示),快速了解工程目录的主要文件,熟悉OpenHarmony应用开发流程。 在开始之前,您需要了解有关OpenHarmon…...
USB3020任意波形发生器4路16位同步模拟量输出卡1MS/s频率 阿尔泰科技
信息社会的发展,在很大程度上取决于信息与信号处理技术的先进性。数字信号处理技术的出现改变了信息 与信号处理技术的整个面貌,而数据采集作为数字信号处理的必不可少的前期工作在整个数字系统中起到关键 性、乃至决定性的作用,其应用已经深…...
云消息队列 Kafka 版 V3 系列荣获信通院“云原生技术创新标杆案例”
2024 年 12 月 24 日,由中国信息通信研究院(以下简称“中国信通院”)主办的“2025 中国信通院深度观察报告会:算力互联网分论坛”,在北京隆重召开。本次论坛以“算力互联网 新质生产力”为主题,全面展示中国…...
linux下的NFS和FTP部署
目录 NFS应用场景架构通信原理部署权限认证Kerberos5其他认证方式 命令serverclient查看测试系统重启后自动挂载 NFS 共享 高可用实现 FTP对比一些ftp服务器1. **vsftpd (Very Secure FTP Daemon)**2. **ProFTPD (Professional FTP Daemon)**3. **Pure-FTPd**4. **WU-FTPD (Was…...
JS Clipboard API
1.作用 在web应用程序中,当用户授予了相应的权限,Clipboard API 就能实现系统剪切板的复制、粘贴和剪切功能。系统剪切板暴露在Navigator.clipboard 中。 2.例子 window.onload () > {// 监听用户的复制事件document.addEventListener(copy, (e) …...
MySQL中大量数据优化方案
文章目录 1 大量数据优化1.1 引言1.2 评估表数据体量1.2.1 表容量1.2.2 磁盘空间1.2.3 实例容量 1.3 出现问题的原因1.4 解决问题1.4.1 数据表分区1.4.1.1 简介1.4.1.2 分区限制和执行计划1.4.1.3 分区表的索引1.4.1.4 为什么分区键必须是主键的一部分1.4.1.5 操作分区1.4.1.5.…...
重拾Python学习,先从把python删除开始。。。
自己折腾就是不行啊,屡战屡败,最近终于找到前辈教我 第一步 删除Python 先把前阵子折腾的WSL和VScode删掉。还是得用spyder,跟matlab最像,也最容易入手。 从VScode上搞python,最后安装到appdata上,安装插…...
centos 安全配置基线
centos 安全配置基线 一、系统防火墙及SE系统1. 系统自带防火墙iptables(Centos6)基础命令查看防火墙设置使用命令查看防火墙设置使用命令清除防火墙设置防火墙策略开放指定的端口屏蔽IP 2. 系统自带防火墙firewalled(Centos7)基础…...
高级编程语言的基本语法在CPU的眼中是什么样的呢?
任何一门高级编程语言,就一定存在下面这几个语法元素 变量类型数组控制语句(条件,循环)运算符(算术运算,布尔运算,赋值运算,关系运算,位运算)函数 而本节探…...
Redis 性能优化:多维度技术解析与实战策略
文章目录 1 基准性能2 使用 slowlog 优化耗时命令3 big key 优化4 使用 lazy free 特性5 缩短键值对的存储长度6 设置键值的过期时间7 禁用耗时长的查询命令8 使用 Pipeline 批量操作数据9 避免大量数据同时失效10 客户端使用优化11 限制 Redis 内存大小12 使用物理机而非虚拟机…...
.netframwork模拟启动webapi服务并编写对应api接口
在.NET Framework环境中模拟启动Web服务,可以使用几种不同的方法。一个常见的选择是利用HttpListener类来创建一个简单的HTTP服务器,或者使用Owin/Katana库来自托管ASP.NET Web API或MVC应用。下面简要介绍Owin/Katana示例代码。这种方法更加灵活&#x…...
MongoDB 学习指南与资料分享
MongoDB学习资料 MongoDB学习资料 MongoDB学习资料 在数据爆炸的当下,MongoDB 作为非关系型数据库的佼佼者,以其独特优势在各领域发光发热。无论是海量数据的存储,还是复杂数据结构的处理,MongoDB 都能轻松应对。接下来…...
【Azure 架构师学习笔记】- Azure Function (2) --实操1
本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Function 】系列。 接上文【Azure 架构师学习笔记】- Azure Function (1) --环境搭建和背景介绍 前言 上一文介绍了环境搭建,接下来就在本地环境下使用一下。 环境准备 这里我下载了最新的VS studio&…...
扫描深度?滤光片和偏振片区别?
扫描深度 https://www.shining3d.cn/chike/kousao/aoralscan-wireless.html 是指扫描仪能够准确捕捉和测量的最大距离范围。这一参数对于不同类型的三维扫描仪和应用场景非常重要,具体含义包括: 扫描范围 定义: 扫描深度通常指从扫描仪到被扫描物体表…...
HJ4 字符串分隔(Java版)
一、试题地址 字符串分隔_牛客题霸_牛客网 二、试题内容 描述 对于给定的由小写字母和数字混合构成的字符串 s ,你需要按每 8 个字符换一行的方式书写它,具体地: 书写前 8 个字符,换行;书写接下来的 88 个字符&am…...
【脑机接口数据处理】matlab读取ns6 NS6 ns5NS5格式脑电数据
文章目录 MATLAB函数openNSx详解:轻松读取NSx文件函数概述下载文件基本用法注意事项示例 结论 MATLAB函数openNSx详解:轻松读取NSx文件 在神经科学和生物医学工程领域,处理神经信号数据是一项常见且重要的任务。NSx文件格式是一种用于存储神…...
用C++实现一个基于模板的观察者设计模式
观察者模式 定义 观察者模式(Observer Pattern)是一种行为型设计模式,用于定义对象间的一对多依赖关系,使得当一个对象状态发生变化时,其所有依赖它的对象都会收到通知并自动更新。 核心概念 角色定义 Subject(被观察者): 持有观察者列表,维护观察者的注册和移除。 …...
【华为路由/交换机的ftp文件操作】
华为路由/交换机的ftp文件操作 PC:10.0.1.1 R1:10.0.1.254 / 10.0.2.254 FTP:10.0.2.1 S1:无配置 在桌面创建FTP-Huawei文件夹,里面创建config/test.txt。 点击上图中的“启动”按钮。 然后ftp到server,…...
微信小程序 实现拼图功能
微信小程序 实现拼图 效果示例功能描述代码示例 效果示例 微信小程序 碎片拼图 功能描述 在微信小程序中,实现一个简单的拼图小游戏。用户需要将四张碎片图片拖动到目标图片的正确位置,具体功能如下: 拖动功能: 用户可以通过手指…...
深度学习项目--基于LSTM的火灾预测研究(pytorch实现)
🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 前言 LSTM模型一直是一个很经典的模型,这个模型当然也很复杂,一般需要先学习RNN、GRU模型之后再学,GRU、LSTM的模型讲解将…...
AI时代下 | 通义灵码冲刺备战求职季
AI时代下 | 通义灵码冲刺备战求职季 什么是通义灵码使用智能编程助手备战求职靠谱吗体验心得 AI时代下,备战求职季有了不一样的方法,使用通义灵码冲刺备战求职季,会有什么样的体验? 什么是通义灵码 在开始话题之前,首…...
当comfyui-reactor-node 安装失败urllib.error.HTTPError: HTTP Error 403: Forbidden解决方法
comfyUI 节点comfyui-reactor-node 安装 python install 时 报错 urllib.error.HTTPError: HTTP Error 403: Forbidden 如下: (xxx) xxxxxxx:~/sdb/Q/ComfyUI/custom_nodes/comfyui-reactor-node$ python install.py Traceback (most recent call last): File …...
SSE 实践:用 Vue 和 Spring Boot 实现实时数据传输
前言 大家好,我是雪荷。最近我在灵犀 BI 项目中引入了 SSE 技术,以保证图表的实时渲染,当图表渲染完毕服务端推送消息至浏览器端触发重新渲染。 什么是 SSE? SSE 全称为 Server-Send Events 意思是服务端推送事件。 SSE 相比于 …...
TouchGFX学习笔记(一)
配置请参考链接:TouchGFX超低配置移植教程-CSDN博客 一,显示配置 1.适当增加堆栈大小 2.适当增大缓冲大小 双重缓冲消除了任何撕裂的风险,无论渲染下一帧需要多长时间,因为TfT控制器,例如,总是可以访问最…...
Java算法 二叉树入门 力扣简单题相同的树 翻转二叉树 判断对称二叉树 递归求二叉树的层数
目录 模版 先序遍历 中序遍历 后序遍历 力扣原题 相同的二叉树 力扣原题 翻转二叉树 遍历树的层数 题目 静态变量 核心逻辑 模版 // 二叉树public static class Node{public int value;public Node left;public Node right;public Node(int v) {valuev;}} 先序遍历 …...
如何将 session 共享存储到 redis 中
文章目录 一. 分布式 session 登录1.1 什么是分布式?1.2 Session 共享1.3 为什么服务器 A 登录后,请求发到服务器 B,不认识该用户?1.4 共享存储 二. Session 共享实现Redis三. 测试session共享四. cookie设置4.1 前端4.2 后端 一.…...
vue3学习三
五 计算属性 定义 选项式 export default {data(){return {num:1}},computed:{num1(){this.num1}} } 组合式 import {ref,computed} from vuelet numref(0); //仅读 let num1 computed(()>{return num.value1 }) 计算时依赖的变量数据发生变化,则计算属性…...
深圳网站建设怎么办/网站要怎么创建
嗨, 欢迎来到课程的第一部分。 并行计算和Python入门。 在本节中, 我们将讨论并行计算和内存架构。 我们还将关注内存组织和并行编程模型。 接下来, 我们将看到如何设计并行程序, 并评估并行程序的性能。 此外, 我们将介绍Python。 并且我们将与流程一起工作, 并与他们一起调节…...
大连网龙建站优化推广/网店如何营销推广
更多代码请见:https://github.com/xubo245 基因数据处理系列 1.解释 重新运行,跟换了文件地址 后来终端,需要运行其他的2.代码: hadoopMaster:~/disk2/xubo/project/alignment/sparkBWA$ vi sparkBWA.sh for j in 10000 10000…...
课程设计代做网站php/各大网站的网址
目录 文档和教程 教程 文档 论文: PPT: 开发社区 Linux社区 RDMA社区 其他知识 玩家 硬件厂商和用户 参考和学习资料和途径 文档和教程 教程 链接:https://www.jianshu.com/p/22bbb8f029e6 视频教程:腾讯视频 英伟达网络的个人频…...
武汉网站模板/百分百营销软件官网
二次联通门 : BZOJ 1858: [Scoi2010]序列操作 /*BZOJ 1858: [Scoi2010]序列操作已经...没有什么好怕的的了...16K的代码...调个MMP啊...*/ #include <cstdio>void read (int &now) {now 0;register char word getchar ();while (word < 0 || word > 9)word …...
装修公司网站怎么做/网站收录提交入口大全
2019独角兽企业重金招聘Python工程师标准>>> 1.下载源代码 http://www.python.org/ftp/python/2.7.3/Python-2.7.3.tar.bz2 2.安装 安装目录一般为/usr/local/,进入该目录 ①解压安装文件 Java代码 $ tar –jxvf Python-2.7.3.tar.bz2 ②…...
wordpress 安装根目录/北仑seo排名优化技术
OSI: open system interconnection 开放式系统互联参考模型 OSI 和TCP/IP 的对应关系和协议 概述 OSI模型各层的基本作用: OSI对应tcp/ip和五层协议 OSI TCP/IP对应网络协议 详解OSI七层网络模型 物理层 数据链路层 网络层 传输层 应用层 最后一张图&…...