iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >怎么在HDFS中进行数据压缩
  • 218
分享到

怎么在HDFS中进行数据压缩

2023-06-02 20:06:37 218人浏览 八月长安
摘要

这篇文章主要讲解了“怎么在hdfs中进行数据压缩”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么在HDFS中进行数据压缩”吧!通过数据压缩实现高效存储数据压缩是文件处理的重要方面,在处理h

这篇文章主要讲解了“怎么在hdfs中进行数据压缩”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么在HDFS中进行数据压缩”吧!

通过数据压缩实现高效存储

数据压缩是文件处理的重要方面,在处理hadoop支持的数据大小时,这一点变得更加重要。大部分企业在使用Hadoop时,目标都是尽可能高效得进行数据处理,选择合适的压缩编解码器将使作业运行更快,并允许在集群中存储更多数据。

为数据选择正确的压缩编解码器

在HDFS上使用压缩并不像在ZFS等文件系统上那样透明,特别是在处理可拆分的压缩文件时(本章稍后将详细介绍)。使用Avro和SequenceFile等文件格式的优点是内置压缩支持,使压缩几乎对用户完全透明。但是在使用文本等格式时,就会失去这种支持。

问题

评估并确定用于数据压缩的最佳编解码器。

解决方案

谷歌的压缩编解码器Snappy提供压缩大小和读/写执行时间的最佳组合。但是,当使用必须支持可拆分性的大型压缩文件时,LZOP是最好的编解码器。

讨论

首先,快速浏览可用于Hadoop的压缩编解码器,如表4.1所示。

怎么在HDFS中进行数据压缩

表4.1压缩编解码器

要正确评估编解码器,首先需要确定评估标准,该标准应基于功能和性能特征。对于压缩,你的标准可能包括以下内容:

  • 空间/时间权衡——通常,计算成本越高的压缩编解码器可以产生更好的压缩比,从而产生更小的压缩输出。

  • 可拆分性——可以拆分压缩文件以供多个mapper使用。如果无法拆分压缩文件,则只能使用一个mapper。如果该文件跨越多个块,则会丢失数据局部性,因为map可能必须从远程Datanode读取块,从而导致网络I/O开销。

  • 本机压缩支持——是否存在执行压缩和解压缩的本地库?这通常胜过用Java编写的压缩编解码器,没有底层的本机库支持。

怎么在HDFS中进行数据压缩

表4.2 压缩编解码器比较

Native vs Java bzip2

Hadoop添加了对bzip2的原生支持(从版本2.0和1.1.0开始)。本机bzip2支持是默认的,但不支持可拆分性。如果需要可拆分性,就需要启用Java bzip2,可以通过将io.compression .codec.bzip2.library设置为java-builtin来指定。

接下来,我们来了解编解码器在空间和时间上是如何平衡的。此处使用100 MB(10 ^ 8)的XML文件(来自Http://mattmahoney.net/dc/textdata.html的enwik8.zip)来比较编解码器运行时间及其压缩大小,具体测试结果见表4.3。

怎么在HDFS中进行数据压缩

表4.3 100 MB文本文件上压缩编解码器的性能比较

运行测试

当进行评估时,我建议使用自己的数据进行测试,最好是在类似于生产节点的主机上执行测试,这样就可以很好地理解编解码器的预期压缩和运行时间。

要确保集群已启用本机编解码器,你可以通过运行以下命令来检查:

$ hadoop checknative -a

空间和时间的结果说明了什么?如果将尽可能多的数据压入集群是首要任务,并且允许较长的压缩时间,那么bzip2可能是适合的编解码器。如果要压缩数据但要求在读取和写入压缩文件时引入最少的CPU开销,则应该考虑LZ4。任何寻求压缩和执行时间之间平衡的企业都不会考虑bzip2的Java版本。

拆分压缩文件很重要,但必须在bzip2和LZOP之间进行选择。原生bzip2编解码器不支持拆分,Java bzip2 time可能会让大多数人放弃。bzip2优于LZOP的唯一优势是其Hadoop集成比LZOP更容易使用。

怎么在HDFS中进行数据压缩

图4.4 单个100 MB文本文件的压缩大小(较小的值更好)

怎么在HDFS中进行数据压缩

图4.5单个100 MB文本文件的压缩和解压缩时间(较小的值更好)

虽然LZOP似乎看起来是最优的选择,但还是需要做一些改进,正如下文所述。

总结

最适合的编解码器取决于你的需求和标准。如果不关心拆分文件,LZ4是最有前途的编解码器,如果想要拆分文件,LZOP就是最应该关注的。

此外,我们还需要考虑数据是否需要长期存储。如果长时间保存数据,你可能希望最大限度地压缩文件,我建议使用基于zlib的编解码器(例如gzip)。但是,由于gzip不可拆分,因此将它与基于块的文件格式(如Avro或Parquet)结合使用是明智的,这样数据仍然可以拆分,或者调整输出大小使其在HDFS中占用一个块,这样就不需要考虑是否可拆分。

请记住,压缩大小将根据文件是文本还是二进制而有所不同,具体取决于其内容。要获得准确的数字,需要针对自己的数据运行类似的测试。

对HDFS中的数据进行压缩有许多好处,包括减小文件大小和更快的mapReduce作业运行时。许多压缩编解码器可用于Hadoop,我根据功能和性能对它们进行了评估。接下来,让我们看看如何压缩文件并通过MapReduce,Pig和Hive工具使用它们。

使用HDFS,MapReduce,Pig和Hive进行压缩

由于HDFS不提供内置的压缩支持,因此在Hadoop中使用压缩可能是一项挑战。此外,可拆分压缩不适合技术水平不高的初学者,因为它并不是Hadoop开箱即用的功能。如果正在处理压缩到接近HDFS块大小的中型文件,以下方法将是在Hadoop中压缩优势最明显和最简单的方法。

问题

希望在HDFS中读取和写入压缩文件,并将其与MapReduce,Pig和Hive一起使用。

解决方案

在MapReduce中使用压缩文件涉及更新MapReduce配置文件mapred-site.xml并注册正在使用的压缩编解码器。执行此操作后,在MapReduce中使用压缩输入文件不需要额外的步骤,并且生成压缩的MapReduce输出是设置mapred.output.compress和mapred.output.compression.codec MapReduce属性的问题。

讨论

第一步是弄清楚如何使用本章前面评估的编解码器来读取和写入文件。本章详细介绍的所有编解码器都与Hadoop捆绑在一起,但LZO / LZOP和Snappy除外,如果想使用这三种编解码器,需要自己下载并构建。

要使用压缩编解码器,首先需要知道它们的类名,如表4.4所示。

怎么在HDFS中进行数据压缩

表4.4 编解码器类

在HDFS中使用压缩

如何使用上表中提到的任何一种编解码器压缩HDFS中的现有文件?以下代码支持这样做:

怎么在HDFS中进行数据压缩

编解码器缓存使用压缩编解码器的一个开销是创建成本很高。当使用Hadoop ReflectionUtils类时,与创建实例相关的一些开销将缓存在ReflectionUtils中,这将加速后续创建编解码器。更好的选择是使用CompressionCodecFactory,它本身提供编解码器缓存。

读取此压缩文件就像编写一样简单:

怎么在HDFS中进行数据压缩

超级简单。既然可以创建压缩文件,那么让我们看看如何在MapReduce中使用。

在MapReduce中使用压缩

要在MapReduce中使用压缩文件,需要为作业设置一些配置选项。为简洁起见,我们假设在此示例中使用了identity mapper和reducer:

怎么在HDFS中进行数据压缩

使用未压缩I/O与压缩I/O的MapReduce作业之间的唯一区别是前面示例中的三个带注释的行。

不仅可以压缩作业的输入和输出,而且中间map输出也可以压缩,因为它首先输出到磁盘,最终通过网络输出到reducer。map输出的压缩有效性最终取决于发出的数据类型,但一般情况下,我们可以通过进行此更改来加速某些作业进程。

为什么不必在前面的代码中为输入文件指定压缩编解码器?默认情况下,FileInputFORMat类使用CompressionCodecFactory来确定输入文件扩展名是否与已注册的编解码器匹配。如果找到与该文件扩展名相关联的编解码器,会自动使用该编解码器解压缩输入文件。

MapReduce如何知道要使用哪些编解码器?需要在mapred-site.xml中指定编解码器。 以下代码显示了如何注册上述提到的所有编解码器。请记住,除了gzip,Deflate和bzip2之外,所有压缩编解码器都需要构建并在集群上可用,然后才能注册:

怎么在HDFS中进行数据压缩

现在,你已经使用MapReduce掌握了压缩,是时候了解Hadoop堆栈信息了。因为压缩也可以与Pig和Hive一起使用,让我们看看如何使用Pig和Hive镜像完成MapReduce压缩。

在Pig中使用压缩

如果你正在使用Pig,那么使用压缩输入文件不需要额外的工作,需要做的就是确保文件扩展名map到相应的压缩编解码器(参见表4.4)。以下示例是gzips本地加密文件加载到Pig,并转储用户名的过程:

怎么在HDFS中进行数据压缩

怎么在HDFS中进行数据压缩

写gzip压缩文件是一样的,都要确保指定压缩编解码器的扩展名。以下示例将Pig关系B的结果存储在HDFS文件中,然后将它们复制到本地文件系统以检查内容:

怎么在HDFS中进行数据压缩

在Hive中使用压缩

与Pig一样,我们需要做的就是在定义文件名时指定编解码器扩展:

怎么在HDFS中进行数据压缩

前面的示例将一个gzip压缩文件加载到Hive中。在这种情况下,Hive将正在加载的文件移动到数据仓库目录,并继续使用原始文件作为表的存储。

如果要创建另一个表并指定需要被压缩该怎么办?下面的示例通过一些Hive配置来启用MapReduce压缩实现这一点(因为将执行MapReduce作业以在最后一个语句中加载新表):

怎么在HDFS中进行数据压缩

我们可以通过在HDFS中查看来验证Hive是否确实压缩了新apachelog_backup表的存储:

怎么在HDFS中进行数据压缩

应该注意的是,Hive建议使用SequenceFile作为表的输出格式,因为SequenceFile块可以单独压缩。

总结

此技术提供了一种在Hadoop中运行压缩的快速简便方法,这适用于不太大的文件,因为它提供了一种相对透明的压缩方式。如果压缩文件远大于HDFS块大小,请考虑以下方法。

可拆分LZOP,带有MapReduce,Hive和Pig

如果你正在使用大型文本文件,即使在压缩时,这也会比HDFS块大小大很多倍。为避免让一个map任务处理整个大型压缩文件,你需要选择一个可支持拆分该文件的压缩编解码器。

LZOP符合要求,但使用它比上文示例更复杂,因为LZOP本身不可拆分。因为LZOP是基于块的,不可能随机搜索LZOP文件并确定下一个块的起点,这是该方法面临的挑战。

问题

希望使用压缩编解码器,以允许MapReduce在单个压缩文件上并行工作。

解决方案

在MapReduce中,拆分大型LZOP压缩输入文件需要使用LZOP特定的输入格式类,例如LzoInputFormat。在Pig和Hive中使用LZOP压缩的输入文件时,同样的原则也适用。

讨论

LZOP压缩编解码器是仅有的允许拆分压缩文件的两个编解码器之一,因此多个Reducer可并行处理。另一个编解码器bzip2受到压缩时间的影响导致运行很慢,可能会导致编解码器无法使用,LZOP提供了压缩和速度之间的良好权衡。

LZO和LZOP有什么区别?LZO和LZOP编解码器都可用于Hadoop。LZO是一个基于流的压缩存储,没有块或头的概念。LZOP具有块(已校验和)的概念,因此是要使用的编解码器,尤其是在希望压缩输出可拆分的情况下。令人困惑的是,Hadoop编解码器默认情况下将以.lzo扩展名结尾的文件处理为LZOP编码,以.lzo_deflate扩展名结尾的文件处理为LZO编码。此外,许多文档似乎可以互换使用LZO和LZOP。

不幸的是,由于许可原因,Hadoop并未不捆绑LZOP。在集群上编译和安装LZOP非常费力,要编译本文代码,还请先行安装配置LZOP。

在HDFS中读写LZOP文件

如果要使用LZOP读写压缩文件,我们需要在代码中指定LZOP编解码器:

怎么在HDFS中进行数据压缩

怎么在HDFS中进行数据压缩

代码4.3在HDFS中读写LZOP文件的方法

让我们编写并读取LZOP文件,确保LZOP实用程序可以使用生成的文件(将$ HADOOP_CONF_HOME替换为Hadoop配置目录的位置):

怎么在HDFS中进行数据压缩

以上代码将在HDFS中生成core-site.xml.lzo文件。

现在确保可以将此LZOP文件与lzop二进制文件一起使用。在主机上安装lzop二进制文件将LZOP文件从HDFS复制到本地磁盘,使用本机lzop二进制文件解压缩,并将其与原始文件进行比较:

怎么在HDFS中进行数据压缩

diff验证了使用LZOP编解码器压缩的文件可以使用lzop二进制文件解压缩。

既然已经拥有了LZOP文件,我们需要对其进行索引以便可以拆分。

为LZOP文件创建索引

LZOP文件本身不可拆分,虽然其具有块的概念,但缺少块分隔同步标记意味着无法随机搜索LZOP文件并开始读取。但是因为在内部确实使用了块,所以只需要做一些预处理即可,它可以生成一个包含块偏移的索引文件。

完整读取LZOP文件,并在读取发生时将块偏移写入索引文件。索引文件格式(如图4.6所示)是一个二进制文件,包含一系列连续的64-bit数字,表示LZOP文件中每个块的字节偏移量。

怎么在HDFS中进行数据压缩

你可以使用以下两种方式创建索引文件,如果要为单个LZOP文件创建索引文件,只需要进行一个简单的库调用即可,如下:

shell$ hadoop com.hadoop.compression.lzo.LzoIndexer core-site.xml.lzo

如果有大量LZOP文件并且需要更有效的方法来生成索引文件,索引器运行MapReduce作业以创建索引文件,支持文件和目录(以递归方式扫描LZOP文件):

怎么在HDFS中进行数据压缩

图4.6中描述的两种方法都将在与LZOP文件相同的目录中生成索引文件。索引文件名是以.index为后缀的原始LZOP文件名。运行以前的命令将生成文件名core-site.xml.lzo.index。

接下来,我们来看看如何在Java代码中使用LzoIndexer。以下代码(来自LzoIndexer的主方法)将导致同步创建索引文件:

怎么在HDFS中进行数据压缩

使用DistributedLzoIndexer,MapReduce作业将启动并运行N个mapper,每个.lzo文件一个。没有运行reducer,因此(identity)mapper通过自定义LzoSplitInputFormat和LzoIndexOutputFormat直接写入索引文件。

如果要从自己的Java代码运行MapReduce作业,可以使用DistributedLzoIndexer代码。

需要LZOP索引文件,以便可以在MapReduce,Pig和Hive作业中拆分LZOP文件。既然已经拥有了上述LZOP索引文件,让我们看一下如何将它们与MapReduce一起使用。

MapReduce和LZOP

在为LZOP文件创建索引文件之后,就可以开始将LZOP文件与MapReduce一起使用了。不幸的是,这给我们带来了下一个挑战:现有的基于Hadoop文件的内置输入格式都不适用于可拆分LZOP,因为它们需要专门的逻辑来处理使用LZOP索引文件的输入拆分。我们需要特定的输入格式类才能使用可拆分LZOP。

LZOP库为面向行的LZOP压缩文本文件提供了LzoTextInputFormat实现,并附带索引文件。

以下代码显示了配置MapReduce作业以使用LZOP所需的步骤。 我们将对具有文本LZOP输入和输出的MapReduce作业执行以下步骤:

怎么在HDFS中进行数据压缩

压缩中间map输出还将减少MapReduce作业的总体执行时间:

怎么在HDFS中进行数据压缩

可以通过编辑hdfs-site.xml轻松配置集群以始终压缩map输出:

怎么在HDFS中进行数据压缩

每个LZOP文件的拆分数量是文件占用的LZOP块数量的函数,而不是文件占用的HDFS块数量函数。

Pig和Hive

Elephant Bird,一个包含与LZOP一起工作的实用程序的Twitter项目,提供了许多有用的MapReduce和Pig类。Elephant Bird有一个LzoPigStorage类,可以在Pig中使用基于文本的LZOP压缩数据。

通过使用LZO库中的com.hadoop.mapred .DeprecatedLzoTextInputFormat输入格式类,Hive可以使用LZOP压缩的文本文件。

感谢各位的阅读,以上就是“怎么在HDFS中进行数据压缩”的内容了,经过本文的学习后,相信大家对怎么在HDFS中进行数据压缩这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: 怎么在HDFS中进行数据压缩

本文链接: https://www.lsjlt.com/news/231236.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎么在HDFS中进行数据压缩
    这篇文章主要讲解了“怎么在HDFS中进行数据压缩”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么在HDFS中进行数据压缩”吧!通过数据压缩实现高效存储数据压缩是文件处理的重要方面,在处理H...
    99+
    2023-06-02
  • 怎么在linux中对数据进行压缩
    这篇文章将为大家详细讲解有关怎么在linux中对数据进行压缩,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1,tar命令使用tar程序打出来的包我们常称为tar包,tar包文件的命令通常都是...
    99+
    2023-06-09
  • 怎么在Android中对视频进行压缩
    这篇文章将为大家详细讲解有关怎么在Android中对视频进行压缩,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。cmd = "-y -i /s...
    99+
    2023-05-30
    android
  • 怎么在sql server中通过脚本进行数据库压缩全备份
    本篇文章为大家展示了怎么在sql server中通过脚本进行数据库压缩全备份,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。解决方案:通过with compressi...
    99+
    2022-10-18
  • 利用Java怎么对文件进行压缩与解压缩
    今天就跟大家聊聊有关利用Java怎么对文件进行压缩与解压缩,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。用java压缩/解压文件: import java.io.*; im...
    99+
    2023-05-31
    java ava
  • 怎么在Linux中压缩及解压缩文件
    这篇文章主要讲解了“怎么在Linux中压缩及解压缩文件”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么在Linux中压缩及解压缩文件”吧!对文件进行压缩,可以通过使用较少的字节对文件中的数...
    99+
    2023-06-16
  • 如何在 ASP 中使用 http shell 对象进行数据压缩?
    ASP是一种常用的Web开发语言,其灵活性和易用性使其成为了许多开发者的首选。在ASP中,使用http shell对象进行数据压缩是一种非常常见的操作,本文将介绍如何在ASP中使用http shell对象进行数据压缩。 一、什么是http ...
    99+
    2023-06-02
    http shell 对象
  • 使用Java怎么对字符串进行压缩与解压缩
    本篇文章给大家分享的是有关使用Java怎么对字符串进行压缩与解压缩,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Java可以用来干什么Java主要应用于:1. web开发;2....
    99+
    2023-06-06
  • mysql中如何进行数据压缩性能对比
    这篇文章给大家分享的是有关mysql中如何进行数据压缩性能对比的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1. 测试环境1.1 软硬件一台 64位 2.6.18-92 内核Linux开发机,4G内存,4个280...
    99+
    2023-06-25
  • 怎么将PPT文件进行压缩
    这篇文章给大家分享的是有关怎么将PPT文件进行压缩的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。  操作步骤:  1.点击进入压缩页面,在跳转的页面有五个功能选项,点击选择PPT...
    99+
    2022-10-18
  • 怎么用Powerpoint进行视频压缩
    本篇内容主要讲解“怎么用Powerpoint进行视频压缩”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用Powerpoint进行视频压缩”吧!下面是详细步骤。 创建一个空的powerpoin...
    99+
    2023-06-04
  • 怎么在java中利用压缩流实现压缩与解压
    本篇文章给大家分享的是有关怎么在java中利用压缩流实现压缩与解压,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Java是什么Java是一门面向对象编程语言,可以编写桌面应用程...
    99+
    2023-06-14
  • java中怎么利用7zip对压缩包进行解压的
    java中怎么利用7zip对压缩包进行解压的?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。7zip命令行7z <command> [<switches&g...
    99+
    2023-05-31
    java ava 7zip
  • VB.NET中怎么实现数据库压缩
    VB.NET中怎么实现数据库压缩,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。当我们往数据库中添加数据,然后删除,如此反复,数据库就会变得很大,这样就需要对其进行压缩下面的...
    99+
    2023-06-17
  • android中gzip数据压缩与网络框架解压缩怎么实现
    这篇“android中gzip数据压缩与网络框架解压缩怎么实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“android中...
    99+
    2023-07-04
  • Android应用中怎么对图片进行压缩
    Android应用中怎么对图片进行压缩?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。为何要压缩体积的原因如果你的图片是要准备上传的,那动辄几M的大小肯定不行的,况且图片分辨率大...
    99+
    2023-05-31
    android roi
  • Python实现对二维码数据进行压缩
    目录前言一、二维码数据的压缩和写入1.读取二进制文件数据2.压缩二进制文件数据3.使用base64对压缩后的二进制文件数据进行编码4.将编码后的数据写入二维码二、读取压缩后的二维码数...
    99+
    2023-02-15
    Python二维码数据压缩 Python数据压缩 Python二维码数据
  • 怎么利用Node进行图片压缩
    怎么利用Node进行图片压缩?下面本篇文章以PNG图片为例给大家介绍一下进行图片压缩的方法,希望对大家有所帮助!最近要搞图像处理服务,其中一个是要实现图片压缩功能。以前前端开发的时候只要利用canvas现成的API处理下就能实现,后端可能也...
    99+
    2023-05-14
    图片压缩 Node.js
  • 利用java怎么对图片进行压缩与缩放
    这篇文章将为大家详细讲解有关利用java怎么对图片进行压缩与缩放,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。压缩public static boolean c...
    99+
    2023-05-31
    java ava
  • 怎么在java中压缩文件
    怎么在java中压缩文件?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Java是什么Java是一门面向对象编程语言,可以编写桌面应用程序、Web应用程序、分布式...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作