hadoop hdfs命令_hadooplinux命令

hadoop hdfs命令_hadooplinux命令概述所有的HDFS命令都调用bin/hdfs脚本文件,如果运行hdfs脚本没有带任何参数的话,则打印所有命令的描述。 使用:hdfs[SHELL_OPTIONS]COMMAND[GENERIC_OPTIONS][COMMAND_OPTIONS]Hadoop是一个参数解析框架,采用解析泛型选项以及运行类。命令参数 描述 –config–loglevel …

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

概述

所有的HDFS命令都调用bin/hdfs脚本文件,如果运行hdfs脚本没有带任何参数的话,则打印所有命令的描述。

 

使用: hdfs [SHELL_OPTIONS] COMMAND [GENERIC_OPTIONS] [COMMAND_OPTIONS]

Hadoop是一个参数解析框架,采用解析泛型选项以及运行类。

命令参数 描述
--config
--loglevel
指定一个默认的配置文件目录,默认值是: ${HADOOP_PREFIX}/conf.
重载Log级别。有效的日志级别包含:FATAL, ERROR, WARN, INFO, DEBUG, and TRACE。默认是INFO。
GENERIC_OPTIONS YARN支持表A的通用命令项。
COMMAND COMMAND_OPTIONS YARN分为用户命令和管理员命令。

表A:

 

 

 

通用项 Description
-archives <comma separated list of archives> 用逗号分隔计算中未归档的文件。 仅仅针对JOB。
-conf <configuration file> 制定应用程序的配置文件。
-D <property>=<value> 使用给定的属性值。
-files <comma separated list of files> 用逗号分隔的文件,拷贝到Map reduce机器,仅仅针对JOB
-jt <local> or <resourcemanager:port> 指定一个ResourceManager. 仅仅针对JOB。
-libjars <comma seperated list of jars> 将用逗号分隔的jar路径包含到classpath中去,仅仅针对JOB。

 

用户命令:

 

 

对于Hadoop集群用户很有用的命令:

dfs

使用: hdfs dfs [COMMAND [COMMAND_OPTIONS]]

在hadoop中运行支持文件系统的命令。各种[COMMAND_OPTIONS]命令可以查看Hadoop之文件系统Shell

fetchdt

使用: hdfs fetchdt [–webservice <namenode_http_addr>] <path>

 

命令参数 描述
--webservice https_address 使用HTTP端口代替RPC
fileName 存储token的文件名。

从NameNode获取DelegationToken授权标识

 

hdfs脚本支持fetchdt命令来获取DelegationToken(授权标识,并存储在本地文件系统的一个文件中。这样“非安全”的客户端可以使用该标识去访问受限的服务器(例如NameNode)。可以采用RPC或HTTPS(over Kerberos)方式获取该标示,在获取之前需要提交Kerberos凭证(运行kinit来获得凭证)。当你获得授权标识后,通过指定环境变量HADOOP_TOKEN_FILE_LOCATION为授权标识文件名,你就可以运行HDFS命令,而不需要Kerberros凭证了。

fsck

使用:

   hdfs fsck <path>
          [-list-corruptfileblocks |
          [-move | -delete | -openforwrite]
          [-files [-blocks [-locations | -racks]]]
          [-includeSnapshots]

 

命令选项 描述
path 指定诊断的路径(既可以是文件也可以是目录)
-delete 删除损坏的文件。
-files 打印被诊断的文件。
-files -blocks 打印被诊断的文件的块信息。
-files -blocks -locations 打印每个块的位置信息。
-files -blocks -racks 打印数据块的网络拓扑结构
-includeSnapshots 如果给定的路径包含快照的路径或者快照在该路径下,则包含快照的数据。
-list-corruptfileblocks 打印丢失的块列表以及块所属的文件。
-move 移动损坏的文件到/lost+found目录。
-openforwrite 打印正在被写入的文件。

诊断文件系统健康状态的工具,能够帮助发现丢失的文件或数据块。

示例:

 

[hadoop@hadoopcluster78 bin]$ hdfs fsck /test/fish -files -blocks
Connecting to namenode via http://hadoopcluster78:50070
FSCK started by hadoop (auth:SIMPLE) from /10.0.1.78 for path /test/fish at Fri Aug 14 12:01:50 CST 2015
/test/fish <dir>
/test/fish/box_log_20150721.txt 2018468864 bytes, 16 block(s):  OK
0. BP-701099497-10.0.1.78-1430101367576:blk_1073749326_8927 len=134217728 repl=3
1. BP-701099497-10.0.1.78-1430101367576:blk_1073749327_8928 len=134217728 repl=3
2. BP-701099497-10.0.1.78-1430101367576:blk_1073749328_8929 len=134217728 repl=3
3. BP-701099497-10.0.1.78-1430101367576:blk_1073749329_8930 len=134217728 repl=3
4. BP-701099497-10.0.1.78-1430101367576:blk_1073749330_8931 len=134217728 repl=3
5. BP-701099497-10.0.1.78-1430101367576:blk_1073749331_8932 len=134217728 repl=3
6. BP-701099497-10.0.1.78-1430101367576:blk_1073749332_8933 len=134217728 repl=3
7. BP-701099497-10.0.1.78-1430101367576:blk_1073749333_8934 len=134217728 repl=3
8. BP-701099497-10.0.1.78-1430101367576:blk_1073749334_8935 len=134217728 repl=3
9. BP-701099497-10.0.1.78-1430101367576:blk_1073749335_8936 len=134217728 repl=3
10. BP-701099497-10.0.1.78-1430101367576:blk_1073749336_8937 len=134217728 repl=3
11. BP-701099497-10.0.1.78-1430101367576:blk_1073749337_8938 len=134217728 repl=3
12. BP-701099497-10.0.1.78-1430101367576:blk_1073749338_8939 len=134217728 repl=3
13. BP-701099497-10.0.1.78-1430101367576:blk_1073749339_8940 len=134217728 repl=3
14. BP-701099497-10.0.1.78-1430101367576:blk_1073749340_8941 len=134217728 repl=3
15. BP-701099497-10.0.1.78-1430101367576:blk_1073749341_8942 len=5202944 repl=3

Status: HEALTHY
 Total size:    2018468864 B
 Total dirs:    1
 Total files:    1
 Total symlinks:        0
 Total blocks (validated):    16 (avg. block size 126154304 B)
 Minimally replicated blocks:    16 (100.0 %)
 Over-replicated blocks:    0 (0.0 %)
 Under-replicated blocks:    0 (0.0 %)
 Mis-replicated blocks:        0 (0.0 %)
 Default replication factor:    3
 Average block replication:    3.0
 Corrupt blocks:        0
 Missing replicas:        0 (0.0 %)
 Number of data-nodes:        4
 Number of racks:        1
FSCK ended at Fri Aug 14 12:01:50 CST 2015 in 1 milliseconds


The filesystem under path '/test/fish' is HEALTHY

 

getconf

使用:

   hdfs getconf -namenodes
   hdfs getconf -secondaryNameNodes
   hdfs getconf -backupNodes
   hdfs getconf -includeFile
   hdfs getconf -excludeFile
   hdfs getconf -nnRpcAddresses
   hdfs getconf -confKey [key]

 

命令选项 描述
-namenodes 在集群中获取NameNode列表。
-secondaryNameNodes 在集群中获取secondaryNameNode列表
-backupNodes 在集群中获取backup node节点列表。
-includeFile 获取dfs.hosts配置的值,该值定义了哪些DataNode加入到集群。
-excludeFile 获取dfs.hosts.exclude配置的值,该值定义了哪些DataNode排除在集群之外。
-nnRpcAddresses 获取Namenode的RPC地址
-confKey [key] 获取配置文件中的值。

从配置文件目录获取配置信息。

示例:

 

[hadoop@hadoopcluster78 bin]$ hdfs getconf -namenodes
hadoopcluster78 hadoopcluster79

[hadoop@hadoopcluster78 bin]$ hdfs getconf -nnRpcAddresses
hadoopcluster78:8020
hadoopcluster79:8020

[hadoop@hadoopcluster78 bin]$ hdfs getconf -confKey dfs.webhdfs.enabled
true

 

groups

使用: hdfs groups [username …]

返回给定的一个或多个用户组信息。

 

[hadoop@hadoopcluster78 bin]$ hdfs groups hadoop
hadoop : clustergroup  //hadoop属于clustergroup组

 

lsSnapshottableDir

使用: hdfs lsSnapshottableDir [-help]

命令选项 描述
-help 打印帮助

获取快照目录的列表。当这是运行在超级用户,它返回所有的snapshottable目录。否则它返回当前用户所拥有的目录。

jmxget

使用: hdfs jmxget [-localVM ConnectorURL | -port port | -server mbeanserver | -service service]

命令选项 描述
-help 打印帮助信息
-localVM ConnectorURL 连接到同一台机器上的虚拟机
-port mbean server port 指定的Mbean服务端口,如果找不到,则尝试连接本地的虚拟机。
-service 指定JMX服务,DataNode 或者 NameNode。

从服务中Dump JMX信息。

示例:

 

[hadoop@hadoopcluster78 bin]$ hdfs jmxget -service NameNode
init: server=localhost;port=;service=NameNode;localVMUrl=null

Domains:
	Domain = JMImplementation
	Domain = com.sun.management
	Domain = java.lang
	Domain = java.nio
	Domain = java.util.logging

MBeanServer default domain = DefaultDomain

MBean count = 22

Query MBeanServer MBeans:
List of all the available keys:
15/08/18 16:26:37 INFO util.ExitUtil: Exiting with status 0

oev

使用: hdfs oev [OPTIONS] -i INPUT_FILE -o OUTPUT_FILE

必选的命令行参数:

命令参数 描述
-i,--inputFile arg 需要处理的edits file。以xml扩展的就是xml格式的,其他的都是二进制格式的。
-o,--outputFile arg 输出文件的名字,如果指定的输出文件存在,则会被覆盖,文件的格式由-p选项定义。

可选的命令行参数:

命令参数 描述
-f,--fix-txids s
-h,--help 打印使用的帮助信息。
-r,--ecover 当读取二进制编辑日志时,使用recovery模式。这将给你机会跳过编辑日志的损坏部分。
-p,--processor arg      选择应用于image file处理器的类型,当前支持的处理有:binary (hadoop使用的二进制类型), xml (默认XML格式), stats (打印关于edits file的统计数据)
-v,--verbose 打印更相信的输出,包含输入和输出的文件名,处理器写入到文件,并打印在屏幕上。如果是大的image file文件,会大大的加大处理时间。(默认是false)

Hadoop edit文件离线查看器。

oiv

使用: hdfs oiv [OPTIONS] -i INPUT_FILE
hdfs oiv_legacy [OPTIONS] -i INPUT_FILE -o OUTPUT_FILE  该命令属于老版本,无法使用

必选的命令行参数:

命令参数 描述

-i,--inputFile arg

处理edits file,xml (区分大小写) ,二进制格式。

可选的命令行参数:

命令参数 描述

-h,--help

打印使用信息和退出。

-o,--outputFile arg

文件的输出名,如果指向的文件存在,将覆盖它,文件的格式由-p参数决定。

-p,--processor arg

选择应用于image file处理器的类型,当前支持的处理有:binary (hadoop使用的二进制类型), xml (默认XML格式),

stats (打印关于edits file的统计数据)

Hadoop新的离线Image文件查看器。

snapshotDiff

使用: hdfs snapshotDiff <path> <fromSnapshot> <toSnapshot>

确认两个HDFS快照版本的差异。

 

管理员命令

 

 

下列这些命令对hadoop集群的管理员是非常有用的。

balancer

使用:

    hdfs balancer
          [-threshold <threshold>]
          [-policy <policy>]
          [-exclude [-f <hosts-file> | <comma-separated list of hosts>]]
          [-include [-f <hosts-file> | <comma-separated list of hosts>]]
          [-idleiterations <idleiterations>]

 

命令选项 描述
-policy <policy> datanode (default) :如果集群每个DataNode节点是平衡的,运行该命令将各个DataNode均衡。
blockpool: 在每个DataNode的每个Block Pool是均衡的,集群也会均衡。
-threshold <threshold> 硬盘容量的百分比,默认的阀值会被覆盖。
-exclude -f <hosts-file> | <comma-separated list of hosts> balancer不包括指定的数据节点,用逗号分隔
-include -f <hosts-file> | <comma-separated list of hosts> balancer指定的数据节点,用逗号分隔
-idleiterations <iterations> 退出前的最大空闲迭代次数,默认值是5。

balance工具通常用于平衡hadoop集群中各datanode中的文件块分布,以避免出现部分datanode磁盘占用率高的问题 。管理员可以按Ctrl-C停止Balancer进程。

请注意,blockpool策略比datanode策略更严格。

cacheadmin

使用: hdfs cacheadmin -addDirective -path <path> -pool <pool-name> [-force] [-replication <replication>] [-ttl <time-to-live>]

datanode

使用: hdfs datanode [-regular | -rollback | -rollingupgrace rollback]

 

命令选项 描述
-regular 正常的DataNode启动(默认)
-rollback 回滚datanode到上一个版本。.
-rollingupgrade rollback 回滚更新操作。

dfsadmin

使用:

    hdfs dfsadmin [GENERIC_OPTIONS]
          [-report [-live] [-dead] [-decommissioning]]
          [-safemode enter | leave | get | wait]
          [-saveNamespace]
          [-rollEdits]
          [-restoreFailedStorage true |false |check]
          [-refreshNodes]
          [-setQuota <quota> <dirname>...<dirname>]
          [-clrQuota <dirname>...<dirname>]
          [-setSpaceQuota <quota> <dirname>...<dirname>]
          [-clrSpaceQuota <dirname>...<dirname>]
          [-setStoragePolicy <path> <policyName>]
          [-getStoragePolicy <path>]
          [-finalizeUpgrade]
          [-rollingUpgrade [<query> |<prepare> |<finalize>]]
          [-metasave filename]
          [-refreshServiceAcl]
          [-refreshUserToGroupsMappings]
          [-refreshSuperUserGroupsConfiguration]
          [-refreshCallQueue]
          [-refresh <host:ipc_port> <key> [arg1..argn]]
          [-reconfig <datanode |...> <host:ipc_port> <start |status>]
          [-printTopology]
          [-refreshNamenodes datanodehost:port]
          [-deleteBlockPool datanode-host:port blockpoolId [force]]
          [-setBalancerBandwidth <bandwidth in bytes per second>]
          [-allowSnapshot <snapshotDir>]
          [-disallowSnapshot <snapshotDir>]
          [-fetchImage <local directory>]
          [-shutdownDatanode <datanode_host:ipc_port> [upgrade]]
          [-getDatanodeInfo <datanode_host:ipc_port>]
          [-triggerBlockReport [-incremental] <datanode_host:ipc_port>]
          [-help [cmd]]

 

COMMAND_OPTION Description
-report [-live] [-dead] [-decommissioning] 报告文件系统的信息和统计,其他的选项可以用来过滤节点。
-safemode enter|leave|get|wait 安全模式维护命令。NameNode安全模式: 
1. 不接受更改命名空间(只读)
2. 不复制和删除块。
安全模式在NameNode启动的时候自动进入,也会自动退出,详情请看:Hadoop之机房down机后… 

安全模式可以手动进入,但是也只能手动退出。

-saveNamespace

将当前命名空间保存到存储目录和重置编辑日志。需要安全模式。

-rollEdits 在活动的NameNode中,Roll EditLog文件。
-restoreFailedStorage true|false|check 这个选项打开或关闭自动尝试存储失败的副本。
-refreshNodes 重新读取在Namenode中,哪些DataNode是包含或者是排除在外的。哪些是应该退役的或者是重新启动。
-setQuota <quota> <dirname>…<dirname>  
-clrQuota <dirname>…<dirname>  
-setSpaceQuota <quota> <dirname>…<dirname>  
-clrSpaceQuota <dirname>…<dirname>  
-setStoragePolicy <path> <policyName> 对一个文件或者目录设置存储策略。
-getStoragePolicy <path> 从一个文件或者目录中获取存储策略。
-finalizeUpgrade 完成升级的HDFS。Datanode将删除前一个版本的工作目录。接下来NameNode也一样。这个升级就完成了。
-rollingUpgrade [<query>|<prepare>|<finalize>]  
-metasave filename 保存NameNode主数据结构到filename中,目录是由hadoop.log.dir property配置参数指定的,filename如果存在会被覆盖。包含下列信息:
1。DataNode和NameNode的心跳。
2。等待复制的块
3。目前正在复制的块
4。等待被删除的块
-refreshServiceAcl 新装入服务级别的授权策略文件。
-refreshUserToGroupsMappings 刷新用户和组的对应关系。
-refreshSuperUserGroupsConfiguration 刷新超级用户代理组的对应关系。
-refreshCallQueue 从配置中加载Call Queue。
-refresh <host:ipc_port> <key> [arg1..argn] 触发在指定的<host:ipc_port>上指定的<key>上做运行时刷新。
-reconfig <datanode |…> <host:ipc_port> <start|status> 开始重新加载配置或者获取重新加载配置的状态。第二个参数是指定节点的类型。
-printTopology 打印哪些有在Namenode报告的节点的网络拓扑结构。
-refreshNamenodes datanodehost:port 对于给定的节点,重新加载配置文件,停止服务删除块池和启动服务新块池。
-deleteBlockPool datanode-host:port blockpoolId [force]  
-setBalancerBandwidth <bandwidth in bytes per second> 在块平衡期间,使用这个命令可以改变每个DataNode的网路带宽。<bandwidth>定义了DataNode的每秒的流量。
-allowSnapshot <snapshotDir> 允许在一个目录创建快照,如果操作成功完成,这个目录将变成快照目录。
-disallowSnapshot <snapshotDir> 取消被创建的快照目录,所有的快照目录都会被删除。
-fetchImage <local directory> 下载最新的fsimage,保存在本地的目录中。
-shutdownDatanode <datanode_host:ipc_port> [upgrade] 对给定的DataNode提交一个关闭请求。
-getDatanodeInfo <datanode_host:ipc_port> 获得给定的DataNode的信息
-triggerBlockReport [-incremental] <datanode_host:ipc_port> 触发一个给定的DataNode块报告,如果带了-incremental参数,则将是一个完整的块报表。
-help [cmd] 如果没有带参数,则打印所有命令参数的说明。

示例:

 

[hadoop@hadoopcluster78 bin]$ hdfs dfsadmin -printTopology
Rack: /default-rack
   10.0.1.80:50010 (hadoopcluster80)
   10.0.1.82:50010 (hadoopcluster82)
   10.0.1.83:50010 (hadoopcluster83)
   10.0.1.84:50010 (hadoopcluster84)

 

journalnode

使用: hdfs journalnode

做NameNode高可用,使用该命令启动journalnode。

namenode

使用:

  hdfs namenode [-backup] |
          [-checkpoint] |
          [-format [-clusterid cid ] [-force] [-nonInteractive] ] |
          [-upgrade [-clusterid cid] [-renameReserved<k-v pairs>] ] |
          [-upgradeOnly [-clusterid cid] [-renameReserved<k-v pairs>] ] |
          [-rollback] |
          [-rollingUpgrade <downgrade |rollback> ] |
          [-finalize] |
          [-importCheckpoint] |
          [-initializeSharedEdits] |
          [-bootstrapStandby] |
          [-recover [-force] ] |
          [-metadataVersion ]

 

命令选项 描述
-backup 启动BackNode
-checkpoint 启动checkpoint node.
-format [-clusterid cid] [-force] [-nonInteractive] 格式化指定的NameNode。它是先启动NameNode,格式化,然后关闭Namenode。-force 选项即使name目录存在也会强行格式化。 -nonInteractive选项表示如果name目录存在,则终止操作。
-upgrade [-clusterid cid] [-renameReserved <k-v pairs>] .
-upgradeOnly [-clusterid cid] [-renameReserved <k-v pairs>] 升级指定的NameNode,然后关闭它。
-rollback 回滚NameNode到前一个版本。但是必须在集群停止后,并且部署了老的hadoop版本。
-rollingUpgrade <downgrade|rollback|started> 回滚升级。
-finalize 删除文件系统的前一个状态,当前升级的版本将变成永久的。使用了这个命令,Rollback没有任何作用。finalize之后NameNode将被关闭。
-importCheckpoint 从checkpoint 目录加载Image。Checkpoint目录从fs.checkpoint.dir 配置中读取。
-initializeSharedEdits namenode通过initializeSharedEdits命令来初始化journalnode,把edits文件共享到journalnode上,以至于standby NameNode能够启动。
-bootstrapStandby 在配置了高可用集群的情况下,允许standby NameNode在引导的时候从active NameNode拷贝最新的命名空间快照。
-recover [-force] 恢复损坏的文件系统上的元数据
-metadataVersion 验证配置目录是否存在,并且打印metadata的软件版本和image。

运行NameNode。

实例:

 

[hadoop@hadoopcluster78 bin]$ hdfs namenode -metadataVersion
15/08/18 19:16:46 INFO namenode.NameNode: STARTUP_MSG: 
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG:   host = hadoopcluster78/10.0.1.78
STARTUP_MSG:   args = [-metadataVersion]
STARTUP_MSG:   version = 2.4.1
STARTUP_MSG:   classpath = /home/hadoop/apache/hadoop-2.4.1。。。省略

 

 

nfs3

Usage: hdfs nfs3

和网络文件系统有关的命令。

portmap

使用: hdfs portmap

和网络文件系统有关的命令。

secondarynamenode

使用: hdfs secondarynamenode [-checkpoint [force]] | [-format] | [-geteditsize]

命令选项 描述
-checkpoint [force] 如果EditLog size >= fs.checkpoint.size,在SecondaryNameNode中Checkpoint。如果带了-force参数就不用管EditLog size大小了。
-format 在启动时格式化本地存储
-geteditsize 在NameNode打印没有checkpoint事务的数量。

运行HDFS的secondary namenode。

 

zkfc

使用: hdfs zkfc [-formatZK [-force] [-nonInteractive]]

命令选项 描述
-formatZK 格式化Zookeeper实例。
-h 打印帮助

该命令在启动Zookeeper高可用的时候使用。

hadoop hdfs命令_hadooplinux命令

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/185955.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 图像识别与卷积神经网络

    图像识别与卷积神经网络卷积神经网络是除了全连接神经网络以外另一个常用的网络结果,其在图像识别方面表现十分突出。本文结合Tensorflow:实战Google深度学习框架,讲述卷积神经网络常用数据集,介绍卷积网络的结构思想,以及通过TensorFlow实现其设计。1图像识别数据集MNIST手写体识别数据集解决是一个相对简单的问题,而对于更加复杂的类别,可以用到CIFAR数据集。比如CIFAR10数据集收集了来自10…

  • Android项目文件夹结构分析

    Android项目文件夹结构分析

    2021年11月13日
  • 关于 jQuery delegate , undelegate

    关于 jQuery delegate , undelegate没啥好说的,看代码吧!jQuery版本:1.71浏览器版本:chrome211<body>23<ulclass=”a-list”>4<li><ahref=”javascript:;”>test1</a></li>5&…

  • js中通过map的value找key

    js中通过map的value找key1.解决ie浏览器的兼容性问题 //通过map的value找key(ps:obj是js中的map对象value就是map中的value) functionfindKey(obj,value,compare){ //匿名函数解决ie不兼容问题 varcompare=(function(a,b){ returna===b; }); //匿名函数解决ie不兼容问题 returnObject.keys(obj).filter

  • Python入门教程完整版(懂中文就能学会)

    今天本宝宝给大家带来了干货,Python入门教程完整版,完整版啊!完整版!言归正传,我来给大家介绍一下这套教程,希望每个小伙伴都沉迷学习,无法自拔!本套教程学习时间15天1-3天内容:为Linux基础命令4-13天内容:为Python基础教程14-15天内容:为飞机大战项目演练第一阶段(1-3天):该阶段首先通过介绍不同领域的三种操作系统,操作系统的发展简史以及…

  • Android组件系列—-ContentProvider内容提供商【5】

    Android组件系列—-ContentProvider内容提供商【5】

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号