Spark-core 运行原理

本文详细介绍了Spark Core的运行原理,包括应用程序、驱动程序、执行单元和集群管理程序的角色。SparkContext在资源管理器上注册并申请Executor资源,Task Scheduler负责任务分发。调度模式涵盖Standalone和YARN,分别解析了YARN-Client和YARN-CLUSTER模式的工作流程。

架构图在此

这里写图片描述

Spark Core部件解析

  • 应用程序(Application): 基于Spark的用户程序,包含了一个Driver Program 和集群中多个的Executor;
  • 驱动程序(Driver Program): 运行Application的main()函数并且创建 SparkContext. 通常用SparkContext代表Driver Program
  • 执行单元 (Executor): 是为某Application运行在Worker Node上的一个进程,该进程负责运行Task,并且负责将数据存在内存或者磁盘上,每个Application都有各自独立的Executors
  • 集群管理程序(Cluster Manager): 在集群上获取资源的外部服务(例如:Standalone、Mesos或Yarn);

Spark Core中操作RDD的命令分为Transformation和Action
Transformation都是采用的懒策略,如果只是将transformation提交是不会执行计算的,计算只有在action被提交的时候才被触发。
map 就是Transformation
collect(), take()等则是Action

运行原理

这里写图片描述
- SPARK CORE的驱动程序首先运行Application的main函数并创建建立Spark Application的运行环境即SparkContext,SparkContext被注册到某类资源管理器上:Standalone、Mesos或YARN并申请运行Executor资源;
- 资源管理器分配Executor资源并启动Executor后端服务并接受主节点命令以及进行状态汇报
- SparkContext构建成DAG图,将DAG图分解成Stage,并把Taskset发送给 Task Scheduler。Executor向SparkContext申请Task,Task Scheduler将Task发放给Executor运行同时SparkContext将应用程序代码发放给Executor。
- Task在Executor上运行,运行完毕释放所有资源。

调度模式

这里写图片描述

Standalone模式 (Spark自带的模式)

  • spark-shell交互式工具提交Spark的Job时,Driver在Master节点上运行

  • spark-submit工具提交Job时Driver运行在本地Client端上

$ spark-shell --master spark://localhost:7077 --executor-memory 1g
4 is the number of cores available on your machine

这里写图片描述

YARN模式

  • YARN (在HADOOP2.0中替代JOB TRACKER 资源分配工作做) 包括两大部件:

    • ResourceManager (由Application Manager 和Scheduler 组成)负责将集群的资源分配给各个应用使用,而资源分配和调度的基本单位是Container,其中封装了机器资源,如内存、CPU、磁盘和网络等,每个任务会被分配一个Container,该任务只能在该Container中执行,并使用该Container内的资源. ResourceManager同时在每个DataNode上产生ApplicationMaster以监控Container的运行

    • NodeManager是一个个的计算节点,主要负责启动和资源上监控Application所需的 Container, 包括监控例如内存、CPU、磁盘和网络等的使用情况并将之汇报给ResourceManager。ApplicationMaster与具体的Application相关,主要负责同ResourceManager协商以获取合适的Containers,并跟踪这些Containers的状态和监控其进度;
      这里写图片描述

YARN-Client模式
  • Yarn-Client模式中,Driver在客户端本地运行,这种模式可以使得Spark Application和客户端进行交互,因为Driver在客户端,所以可以通过webUI访问Driver的状态,默认是http://hadoop1:4040访问,而YARN通过http:// hadoop1:8088访问。Yarn-Client模式中Application Master仅仅向YARN请求Executor,Client会和请求的Container通信来调度他们工作,也就是说Client不能离开

输入如下命令即可使用YARN-Client模式

$./spark-shell --master YARN-client --num-executors 3 --executor-memory 1g

YARN-CLUSTER模式

  • 当用户向YARN中提交一个应用程序后,YARN将分两个阶段运行该应用程序
    1. 把Spark的Driver作为一个ApplicationMaster在YARN集群中先启动;
    2. 由ApplicationMaster创建应用程序,然后为它向ResourceManager申请资源,并启动Executor来运行Task,同时监控它的整个运行过程,直到运行完成.

Driver运行在AM(Application Master)中,它负责向YARN申请资源,并监督作业的运行状况。当用户提交了作业之后,就可以关掉Client,作业会继续在YARN上运行,因而YARN-Cluster模式不适合运行交互类型的作业.

spark-submit --master YARN-cluster
[root@yfw ~]# cd /opt/openfire/enterprise/Spark-master [root@yfw Spark-master]# scp root@124.71.230.244:/opt/openfire/enterprise/Spark-master/spark-client.zip ./spark-client.zip The authenticity of host '124.71.230.244 (124.71.230.244)' can't be established. ECDSA key fingerprint is SHA256:U5XbNIctslcKEL1Lv354cOWi7Hsq2syxemRKcCOXqug. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added '124.71.230.244' (ECDSA) to the list of known hosts. spark-client.zip 100% 68MB 353.3MB/s 00:00 [root@yfw Spark-master]# unzip spark-client.zip -d spark-client-local Archive: spark-client.zip creating: spark-client-local/spark-client/distribution/ creating: spark-client-local/spark-client/distribution/resources/ creating: spark-client-local/spark-client/distribution/resources/sounds/ inflating: spark-client-local/spark-client/distribution/resources/sounds/presence_changed.wav inflating: spark-client-local/spark-client/distribution/resources/sounds/incoming.wav inflating: spark-client-local/spark-client/distribution/resources/sounds/outgoing.wav inflating: spark-client-local/spark-client/distribution/resources/sounds/bell.wav inflating: spark-client-local/spark-client/distribution/resources/sounds/chat_request.wav inflating: spark-client-local/spark-client/distribution/resources/systeminfo.dll inflating: spark-client-local/spark-client/distribution/resources/Info.plist inflating: spark-client-local/spark-client/distribution/resources/jniwrap.lic inflating: spark-client-local/spark-client/distribution/resources/startup.bat inflating: spark-client-local/spark-client/distribution/resources/jniwrap.dll inflating: spark-client-local/spark-client/distribution/resources/startup.sh creating: spark-client-local/spark-client/distribution/plugins/ inflating: spark-client-local/spark-client/distribution/plugins/growl.jar inflating: spark-client-local/spark-client/distribution/plugins/fileupload.jar inflating: spark-client-local/spark-client/distribution/plugins/roar.jar inflating: spark-client-local/spark-client/distribution/plugins/meet.jar inflating: spark-client-local/spark-client/distribution/plugins/tictactoe.jar inflating: spark-client-local/spark-client/distribution/plugins/fastpath.jar inflating: spark-client-local/spark-client/distribution/plugins/transferguard.jar inflating: spark-client-local/spark-client/distribution/plugins/translator.jar inflating: spark-client-local/spark-client/distribution/plugins/flashing.jar inflating: spark-client-local/spark-client/distribution/plugins/apple.jar inflating: spark-client-local/spark-client/distribution/plugins/spelling.jar inflating: spark-client-local/spark-client/distribution/plugins/reversi.jar creating: spark-client-local/spark-client/distribution/documentation/ inflating: spark-client-local/spark-client/distribution/documentation/ide-vscode-setup.html inflating: spark-client-local/spark-client/distribution/documentation/ide-intellij-setup.html creating: spark-client-local/spark-client/distribution/documentation/spark guide/ creating: spark-client-local/spark-client/distribution/documentation/spark guide/images/ extracting: spark-client-local/spark-client/distribution/documentation/spark guide/images/image021.png extracting: spark-client-local/spark-client/distribution/documentation/spark guide/images/image033.png inflating: spark-client-local/spark-client/distribution/documentation/spark guide/images/image015.png inflating: spark-client-local/spark-client/distribution/documentation/spark guide/images/image003.png inflating: spark-client-local/spark-client/distribution/documentation/spark guide/images/image027.png extracting: spark-client-local/spark-client/distribution/documentation/spark guide/images/image007.png extracting: spark-client-local/spark-client/distribution/documentation/spark guide/images/image001.png extracting: spark-client-local/spark-client/distribution/documentation/spark guide/images/image009.png inflating: spark-client-local/spark-client/distribution/documentation/spark guide/images/image031.png extracting: spark-client-local/spark-client/distribution/documentation/spark guide/images/image011.png inflating: spark-client-local/spark-client/distribution/documentation/spark guide/images/image025.png inflating: spark-client-local/spark-client/distribution/documentation/spark guide/images/image017.png inflating: spark-client-local/spark-client/distribution/documentation/spark guide/images/image029.png extracting: spark-client-local/spark-client/distribution/documentation/spark guide/images/image023.png inflating: spark-client-local/spark-client/distribution/documentation/spark guide/images/filelist.xml extracting: spark-client-local/spark-client/distribution/documentation/spark guide/images/image013.png extracting: spark-client-local/spark-client/distribution/documentation/spark guide/images/image005.png extracting: spark-client-local/spark-client/distribution/documentation/spark guide/images/image019.png inflating: spark-client-local/spark-client/distribution/documentation/spark guide/Spark.default.properties.guide.html inflating: spark-client-local/spark-client/distribution/documentation/spark.doap inflating: spark-client-local/spark-client/distribution/documentation/changelog.html inflating: spark-client-local/spark-client/distribution/documentation/sparkplug_compile.html creating: spark-client-local/spark-client/distribution/documentation/images/ inflating: spark-client-local/spark-client/distribution/documentation/images/IntelliJ-8.JPG inflating: spark-client-local/spark-client/distribution/documentation/images/VSCode-4.png inflating: spark-client-local/spark-client/distribution/documentation/images/VSCode-6.png inflating: spark-client-local/spark-client/distribution/documentation/images/IntelliJ-3.JPG inflating: spark-client-local/spark-client/distribution/documentation/images/VSCode-2.png inflating: spark-client-local/spark-client/distribution/documentation/images/IntelliJ-10.JPG inflating: spark-client-local/spark-client/distribution/documentation/images/login-dialog.png inflating: spark-client-local/spark-client/distribution/documentation/images/eclipse-maven-step-1.png inflating: spark-client-local/spark-client/distribution/documentation/images/IntelliJ-6.JPG inflating: spark-client-local/spark-client/distribution/documentation/images/IntelliJ-1.JPG inflating: spark-client-local/spark-client/distribution/documentation/images/contact-list.png inflating: spark-client-local/spark-client/distribution/documentation/images/IntelliJ-9.JPG inflating: spark-client-local/spark-client/distribution/documentation/images/IntelliJ-5.JPG inflating: spark-client-local/spark-client/distribution/documentation/images/VSCode-1.png inflating: spark-client-local/spark-client/distribution/documentation/images/chat-room.png inflating: spark-client-local/spark-client/distribution/documentation/images/eclipse-maven-step-5.png inflating: spark-client-local/spark-client/distribution/documentation/images/VSCode-5.png inflating: spark-client-local/spark-client/distribution/documentation/images/eclipse-maven-step-6.png inflating: spark-client-local/spark-client/distribution/documentation/images/IntelliJ-2.JPG inflating: spark-client-local/spark-client/distribution/documentation/images/banner-spring.gif inflating: spark-client-local/spark-client/distribution/documentation/images/eclipse-maven-step-2.png inflating: spark-client-local/spark-client/distribution/documentation/images/eclipse-maven-step-3.png inflating: spark-client-local/spark-client/distribution/documentation/images/IntelliJ-7.JPG inflating: spark-client-local/spark-client/distribution/documentation/images/eclipse-maven-step-4.png inflating: spark-client-local/spark-client/distribution/documentation/images/VSCode-3.png extracting: spark-client-local/spark-client/distribution/documentation/images/banner-spark.gif inflating: spark-client-local/spark-client/distribution/documentation/images/IntelliJ-4.JPG inflating: spark-client-local/spark-client/distribution/documentation/sample_plugin_repository.xml inflating: spark-client-local/spark-client/distribution/documentation/changes.xsl inflating: spark-client-local/spark-client/distribution/documentation/ide-eclipse-setup.html inflating: spark-client-local/spark-client/distribution/documentation/style.css inflating: spark-client-local/spark-client/distribution/documentation/LICENSE.html inflating: spark-client-local/spark-client/distribution/documentation/builder.jar inflating: spark-client-local/spark-client/distribution/documentation/sparkplug_dev_guide.html inflating: spark-client-local/spark-client/distribution/documentation/README.html creating: spark-client-local/spark-client/distribution/xtra/ creating: spark-client-local/spark-client/distribution/xtra/emoticons/ extracting: spark-client-local/spark-client/distribution/xtra/emoticons/sparkEmoticonSet.zip extracting: spark-client-local/spark-client/distribution/xtra/emoticons/GTalk.AdiumEmoticonset.zip extracting: spark-client-local/spark-client/distribution/xtra/emoticons/Default.adiumemoticonset.zip extracting: spark-client-local/spark-client/distribution/xtra/emoticons/POPO.adiumemoticonset.zip creating: spark-client-local/spark-client/distribution/lib/ inflating: spark-client-local/spark-client/distribution/lib/jxmpp-jid-1.0.3.jar inflating: spark-client-local/spark-client/distribution/lib/smack-debug-4.4.8.jar inflating: spark-client-local/spark-client/distribution/lib/bcpkix-jdk18on-1.78.1.jar inflating: spark-client-local/spark-client/distribution/lib/flatlaf-3.1.1.jar inflating: spark-client-local/spark-client/distribution/lib/minidns-core-1.0.5.jar creating: spark-client-local/spark-client/distribution/lib/linux/ inflating: spark-client-local/spark-client/distribution/lib/linux/libcivil.so inflating: spark-client-local/spark-client/distribution/lib/linux/libjng722.so inflating: spark-client-local/spark-client/distribution/lib/linux/libjnvpx.so inflating: spark-client-local/spark-client/distribution/lib/linux/libjnscreencapture.so inflating: spark-client-local/spark-client/distribution/lib/linux/libjnspeex.so inflating: spark-client-local/spark-client/distribution/lib/linux/libjnpulseaudio.so inflating: spark-client-local/spark-client/distribution/lib/linux/libjnvideo4linux2.so inflating: spark-client-local/spark-client/distribution/lib/linux/libjnawtrenderer.so inflating: spark-client-local/spark-client/distribution/lib/linux/libjnopus.so inflating: spark-client-local/spark-client/distribution/lib/linux/libjnffmpeg.so inflating: spark-client-local/spark-client/distribution/lib/linux/libjnportaudio.so inflating: spark-client-local/spark-client/distribution/lib/jna-platform-5.12.1.jar inflating: spark-client-local/spark-client/distribution/lib/jaxen-1.2.0.jar inflating: spark-client-local/spark-client/distribution/lib/slf4j-api-1.8.0-beta4.jar inflating: spark-client-local/spark-client/distribution/lib/bcutil-jdk18on-1.78.1.jar inflating: spark-client-local/spark-client/distribution/lib/swingx-all-1.6.5-1.jar inflating: spark-client-local/spark-client/distribution/lib/smack-xmlparser-4.4.8.jar inflating: spark-client-local/spark-client/distribution/lib/smack-legacy-4.4.8.jar inflating: spark-client-local/spark-client/distribution/lib/smack-tcp-4.4.8.jar inflating: spark-client-local/spark-client/distribution/lib/commons-lang3-3.15.0.jar inflating: spark-client-local/spark-client/distribution/lib/xstream-1.4.20.jar creating: spark-client-local/spark-client/distribution/lib/mac/ inflating: spark-client-local/spark-client/distribution/lib/mac/libjng722.jnilib inflating: spark-client-local/spark-client/distribution/lib/mac/libSystemUtilities.jnilib inflating: spark-client-local/spark-client/distribution/lib/mac/libjnspeex.jnilib inflating: spark-client-local/spark-client/distribution/lib/mac/JavaSoundStream.fix.jar inflating: spark-client-local/spark-client/distribution/lib/mac/libjnscreencapture.jnilib inflating: spark-client-local/spark-client/distribution/lib/mac/libjnopus.jnilib inflating: spark-client-local/spark-client/distribution/lib/mac/libjnffmpeg.jnilib inflating: spark-client-local/spark-client/distribution/lib/mac/libjnportaudio.jnilib inflating: spark-client-local/spark-client/distribution/lib/mac/libjnquicktime.jnilib inflating: spark-client-local/spark-client/distribution/lib/mac/libjnawtrenderer.jnilib inflating: spark-client-local/spark-client/distribution/lib/mac/libjnmaccoreaudio.jnilib inflating: spark-client-local/spark-client/distribution/lib/mac/libjnvpx.jnilib inflating: spark-client-local/spark-client/distribution/lib/bctls-jdk18on-1.78.1.jar inflating: spark-client-local/spark-client/distribution/lib/dom4j-2.1.4.jar inflating: spark-client-local/spark-client/distribution/lib/spark-core-3.0.3-SNAPSHOT.jar inflating: spark-client-local/spark-client/distribution/lib/smack-java8-4.4.8.jar inflating: spark-client-local/spark-client/distribution/lib/smack-debug-slf4j-4.4.8.jar creating: spark-client-local/spark-client/distribution/lib/windows64/ inflating: spark-client-local/spark-client/distribution/lib/windows64/jng722.dll inflating: spark-client-local/spark-client/distribution/lib/windows64/jnvpx.dll inflating: spark-client-local/spark-client/distribution/lib/windows64/jnffmpeg.dll inflating: spark-client-local/spark-client/distribution/lib/windows64/civil.dll inflating: spark-client-local/spark-client/distribution/lib/windows64/jnopus.dll inflating: spark-client-local/spark-client/distribution/lib/windows64/jndirectshow.dll inflating: spark-client-local/spark-client/distribution/lib/windows64/jnwasapi.dll inflating: spark-client-local/spark-client/distribution/lib/windows64/jnspeex.dll inflating: spark-client-local/spark-client/distribution/lib/windows64/jnwincoreaudio.dll inflating: spark-client-local/spark-client/distribution/lib/windows64/jnscreencapture.dll inflating: spark-client-local/spark-client/distribution/lib/windows64/jnportaudio.dll inflating: spark-client-local/spark-client/distribution/lib/windows64/jnawtrenderer.dll inflating: spark-client-local/spark-client/distribution/lib/mxparser-1.2.2.jar creating: spark-client-local/spark-client/distribution/lib/linux64/ inflating: spark-client-local/spark-client/distribution/lib/linux64/libcivil.so inflating: spark-client-local/spark-client/distribution/lib/linux64/libjng722.so inflating: spark-client-local/spark-client/distribution/lib/linux64/libjnvpx.so inflating: spark-client-local/spark-client/distribution/lib/linux64/libodbcinst.so inflating: spark-client-local/spark-client/distribution/lib/linux64/libjnscreencapture.so inflating: spark-client-local/spark-client/distribution/lib/linux64/libodbc.so inflating: spark-client-local/spark-client/distribution/lib/linux64/libjnspeex.so inflating: spark-client-local/spark-client/distribution/lib/linux64/libjnpulseaudio.so inflating: spark-client-local/spark-client/distribution/lib/linux64/libjnvideo4linux2.so inflating: spark-client-local/spark-client/distribution/lib/linux64/libjnawtrenderer.so inflating: spark-client-local/spark-client/distribution/lib/linux64/libjnopus.so inflating: spark-client-local/spark-client/distribution/lib/linux64/libjnffmpeg.so inflating: spark-client-local/spark-client/distribution/lib/linux64/libjnportaudio.so inflating: spark-client-local/spark-client/distribution/lib/jaxb-api-2.3.1.jar inflating: spark-client-local/spark-client/distribution/lib/httpcore5-h2-5.2.4.jar inflating: spark-client-local/spark-client/distribution/lib/smack-resolver-javax-4.4.8.jar inflating: spark-client-local/spark-client/distribution/lib/jxmpp-core-1.0.3.jar inflating: spark-client-local/spark-client/distribution/lib/install4j-runtime-11.0.4.jar inflating: spark-client-local/spark-client/distribution/lib/jna-5.12.1.jar inflating: spark-client-local/spark-client/distribution/lib/smack-sasl-javax-4.4.8.jar inflating: spark-client-local/spark-client/distribution/lib/javax.activation-api-1.2.0.jar inflating: spark-client-local/spark-client/distribution/lib/smack-extensions-4.4.8.jar inflating: spark-client-local/spark-client/distribution/lib/smack-im-4.4.8.jar inflating: spark-client-local/spark-client/distribution/lib/smack-xmlparser-stax-4.4.8.jar inflating: spark-client-local/spark-client/distribution/lib/thumbnailator-0.4.20.jar inflating: spark-client-local/spark-client/distribution/lib/xmlpull-1.1.3.1.jar inflating: spark-client-local/spark-client/distribution/lib/LoboBrowser-1.0.0.jar creating: spark-client-local/spark-client/distribution/lib/windows/ inflating: spark-client-local/spark-client/distribution/lib/windows/jng722.dll inflating: spark-client-local/spark-client/distribution/lib/windows/jnvpx.dll inflating: spark-client-local/spark-client/distribution/lib/windows/jnffmpeg.dll inflating: spark-client-local/spark-client/distribution/lib/windows/civil.dll inflating: spark-client-local/spark-client/distribution/lib/windows/jnopus.dll inflating: spark-client-local/spark-client/distribution/lib/windows/jndirectshow.dll inflating: spark-client-local/spark-client/distribution/lib/windows/jnwasapi.dll inflating: spark-client-local/spark-client/distribution/lib/windows/jnspeex.dll inflating: spark-client-local/spark-client/distribution/lib/windows/jnwincoreaudio.dll inflating: spark-client-local/spark-client/distribution/lib/windows/jnscreencapture.dll inflating: spark-client-local/spark-client/distribution/lib/windows/jnportaudio.dll inflating: spark-client-local/spark-client/distribution/lib/windows/jnawtrenderer.dll inflating: spark-client-local/spark-client/distribution/lib/httpclient5-5.2.3.jar inflating: spark-client-local/spark-client/distribution/lib/httpcore5-5.2.4.jar inflating: spark-client-local/spark-client/distribution/lib/smack-experimental-4.4.8.jar inflating: spark-client-local/spark-client/distribution/lib/smack-streammanagement-4.4.8.jar inflating: spark-client-local/spark-client/distribution/lib/hsluv-0.2.jar inflating: spark-client-local/spark-client/distribution/lib/smack-core-4.4.8.jar inflating: spark-client-local/spark-client/distribution/lib/jxmpp-util-cache-1.0.3.jar inflating: spark-client-local/spark-client/distribution/lib/bcprov-jdk18on-1.78.1.jar creating: spark-client-local/spark-client/distribution/security/ creating: spark-client-local/spark-client/distribution/bin/ inflating: spark-client-local/spark-client/distribution/bin/startup.bat inflating: spark-client-local/spark-client/distribution/bin/startup.sh [root@yfw Spark-master]# cd spark-client-local/distribution -bash: cd: spark-client-local/distribution: No such file or directory [root@yfw Spark-master]# ls -la 总用量 69312 drwxr-xr-x 10 root root 4096 10月 30 16:05 . drwxr-xr-x 4 openfire openfire 4096 10月 30 14:58 .. drwxr-xr-x 4 root root 4096 10月 30 15:33 core drwxr-xr-x 4 root root 4096 10月 30 15:33 distribution -rw-r--r-- 1 root root 311 10月 21 17:54 .editorconfig drwxr-xr-x 3 root root 4096 10月 21 17:54 emoticons -rw-r--r-- 1 root root 911 10月 21 17:54 .gitattributes drwxr-xr-x 3 root root 4096 10月 21 17:54 .github -rw-r--r-- 1 root root 441 10月 21 17:54 .gitignore drwxr-xr-x 2 root root 4096 10月 21 17:54 .idea -rw-r--r-- 1 root root 11357 10月 21 17:54 LICENSE.txt drwxr-xr-x 22 root root 4096 10月 21 17:54 plugins -rw-r--r-- 1 root root 5049 10月 21 17:54 pom.xml -rw-r--r-- 1 root root 2592 10月 21 17:54 README.md -rw-r--r-- 1 root root 455 10月 21 17:54 SECURITY.md drwxr-xr-x 3 root root 4096 10月 30 15:36 spark-client drwxr-xr-x 3 root root 4096 10月 30 16:05 spark-client-local -rw-r--r-- 1 root root 70884318 10月 30 16:04 spark-client.zip -rw-r--r-- 1 root root 1901 10月 21 17:54 .transifex.yml [root@yfw Spark-master]# cd spark-client-local/spark-client/distribution [root@yfw distribution]# ls -la 总用量 36 drwxr-xr-x 9 root root 4096 10月 30 15:38 . drwxr-xr-x 3 root root 4096 10月 30 16:05 .. drwxr-xr-x 2 root root 4096 10月 30 15:33 bin drwxr-xr-x 4 root root 4096 10月 21 17:54 documentation drwxr-xr-x 7 root root 4096 10月 21 17:54 lib drwxr-xr-x 2 root root 4096 10月 21 17:54 plugins drwxr-xr-x 3 root root 4096 10月 30 15:33 resources drwxr-xr-x 2 root root 4096 10月 30 15:38 security drwxr-xr-x 3 root root 4096 10月 30 15:33 xtra [root@yfw distribution]#
最新发布
10-31
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值