我的编程空间,编程开发者的网络收藏夹
学习永远不晚

怎么在HDFS中进行数据压缩

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

怎么在HDFS中进行数据压缩

这篇文章主要讲解了“怎么在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中进行数据压缩这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

怎么在HDFS中进行数据压缩

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

下载Word文档

猜你喜欢

怎么在HDFS中进行数据压缩

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

怎么在linux中对数据进行压缩

这篇文章将为大家详细讲解有关怎么在linux中对数据进行压缩,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1,tar命令使用tar程序打出来的包我们常称为tar包,tar包文件的命令通常都是
2023-06-09

怎么在Android中对视频进行压缩

这篇文章将为大家详细讲解有关怎么在Android中对视频进行压缩,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。cmd = "-y -i /storage/emulated/0/coollan
2023-05-30

mysql中如何进行数据压缩性能对比

这篇文章给大家分享的是有关mysql中如何进行数据压缩性能对比的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1. 测试环境1.1 软硬件一台 64位 2.6.18-92 内核Linux开发机,4G内存,4个280
2023-06-25

利用Java怎么对文件进行压缩与解压缩

今天就跟大家聊聊有关利用Java怎么对文件进行压缩与解压缩,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。用java压缩/解压文件: import java.io.*; import
2023-05-31

怎么用Powerpoint进行视频压缩

本篇内容主要讲解“怎么用Powerpoint进行视频压缩”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用Powerpoint进行视频压缩”吧!下面是详细步骤。1. 创建一个空的powerpo
2023-06-04

如何在Teradata中进行数据分区和压缩以优化性能

在Teradata中,数据分区和数据压缩是两种常见的优化性能技术。数据分区可以帮助提高查询性能,减少查询数据量,而数据压缩可以减少磁盘空间占用和提高查询性能。以下是在Teradata中进行数据分区和压缩的一般步骤:数据分区:数据分区可以根据
如何在Teradata中进行数据分区和压缩以优化性能
2024-04-09

java中怎么利用7zip对压缩包进行解压的

java中怎么利用7zip对压缩包进行解压的?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。7zip命令行7z [...]
2023-05-31

怎么在Linux中压缩及解压缩文件

这篇文章主要讲解了“怎么在Linux中压缩及解压缩文件”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么在Linux中压缩及解压缩文件”吧!对文件进行压缩,可以通过使用较少的字节对文件中的数
2023-06-16

变量在Oracle数据压缩与解压缩中的作用

在Oracle数据库中,数据压缩和解压缩是一种节省存储空间的技术行压缩(Row Compression):行压缩是Oracle 10g引入的一种针对表数据的压缩技术。通过使用行压缩,可以有效地减少存储空间的需求,提高查询性能。在行压缩中,变
变量在Oracle数据压缩与解压缩中的作用
2024-08-27

使用Java怎么对字符串进行压缩与解压缩

本篇文章给大家分享的是有关使用Java怎么对字符串进行压缩与解压缩,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Java可以用来干什么Java主要应用于:1. web开发;2.
2023-06-06

Python实现对二维码数据进行压缩

当前二维码的应用越来越广泛,包括疫情时期的健康码也是应用二维码的典型案例。本文的目标很明确,就是使用python,实现一张二维码显示更多信息,代码简单实用,感兴趣的可以了解一下
2023-02-15

Android应用中怎么对图片进行压缩

Android应用中怎么对图片进行压缩?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。为何要压缩1、体积的原因如果你的图片是要准备上传的,那动辄几M的大小肯定不行的,况且图片分辨
2023-05-31

如何在Android中对字符串进行压缩

这期内容当中小编将会给大家带来有关如何在Android中对字符串进行压缩,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。使用到的类库GZIPOutputStream代码示例import java.io.By
2023-05-30

MyBatis视图在数据备份恢复中的数据压缩与解压缩

MyBatis 视图本身并不直接涉及数据备份恢复中的数据压缩与解压缩,因为 MyBatis 是一个 Java 持久层框架,主要用于数据库操作,而视图(View)通常指的是数据库中的预定义查询。不过,MyBatis 可以与 MyBatis-P
MyBatis视图在数据备份恢复中的数据压缩与解压缩
2024-10-15

怎么利用Node进行图片压缩

怎么利用Node进行图片压缩?下面本篇文章以PNG图片为例给大家介绍一下进行图片压缩的方法,希望对大家有所帮助!
2023-05-14

Redis怎么实现数据的压缩和解压缩

Redis可以通过以下方式实现数据的压缩和解压缩:使用Redis的压缩功能:Redis可以通过配置选项来启用对数据的压缩功能。通过配置redis.conf文件中的rdbcompression选项为yes,可以启用RDB文件的压缩功能,从而减
Redis怎么实现数据的压缩和解压缩
2024-05-07

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录