 大数据集成与Hadoop - IBM复杂转换方面的限制 • 数据清理限制 • 数据库在执行某些流程时速 度较慢 优点 • 利用MapReduce MPP引擎 • 利用商业硬件和存储 • 释放数据库服务器上的容量 • 支持处理非结构化数据 • 利用Hadoop功能保留数据 (如更新和编写索引) • 实现低成本历史归档数据 缺点 • 可能需要复杂的编程工作 • MapReduce通常比并行数 据库或可扩展ETL工具速度 ,可以先将 数据保存到运行映射操作的节点,再进行随机选择和发送以减 少操作。 MapReduce包含多种设施,可将较小的引用数据结构迁 移至各映射节点,以便执行某些验证和增强操作。因此,会将 整个引用文件迁移至各映射节点,这使其更适合较小的引用 数据结构。如果进行手动编码,必须考虑这些处理流,因此 最好采用一些工具来生成代码,从而将数据集成逻辑下推到 MapReduce(也称为ETL 避免出于任何目的在任何位置进行手动编码 2. 整个企业采用一个数据集成和治理平台 3. 可在需要运行海量可扩展数据集成的任何位置提供该功能 4. 在企业间实施世界级数据治理 5. 在企业间实施强大的管理和操作控制 最佳实践1:避免出于任何目的在任何位置进行手动编码 在过去的二十年中,大型企业认识到使用商业数据集成工具 替换手动编码具有很多优势。手动代码与数据集成工具之争 早已平息,很多技术分析师纷纷总结采用世界级数据集成软0 码力 | 16 页 | 1.23 MB | 1 年前3 大数据集成与Hadoop - IBM复杂转换方面的限制 • 数据清理限制 • 数据库在执行某些流程时速 度较慢 优点 • 利用MapReduce MPP引擎 • 利用商业硬件和存储 • 释放数据库服务器上的容量 • 支持处理非结构化数据 • 利用Hadoop功能保留数据 (如更新和编写索引) • 实现低成本历史归档数据 缺点 • 可能需要复杂的编程工作 • MapReduce通常比并行数 据库或可扩展ETL工具速度 ,可以先将 数据保存到运行映射操作的节点,再进行随机选择和发送以减 少操作。 MapReduce包含多种设施,可将较小的引用数据结构迁 移至各映射节点,以便执行某些验证和增强操作。因此,会将 整个引用文件迁移至各映射节点,这使其更适合较小的引用 数据结构。如果进行手动编码,必须考虑这些处理流,因此 最好采用一些工具来生成代码,从而将数据集成逻辑下推到 MapReduce(也称为ETL 避免出于任何目的在任何位置进行手动编码 2. 整个企业采用一个数据集成和治理平台 3. 可在需要运行海量可扩展数据集成的任何位置提供该功能 4. 在企业间实施世界级数据治理 5. 在企业间实施强大的管理和操作控制 最佳实践1:避免出于任何目的在任何位置进行手动编码 在过去的二十年中,大型企业认识到使用商业数据集成工具 替换手动编码具有很多优势。手动代码与数据集成工具之争 早已平息,很多技术分析师纷纷总结采用世界级数据集成软0 码力 | 16 页 | 1.23 MB | 1 年前3
 大数据时代的Intel之Hadoop180,000 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 Exponential Growth 内容仓库– 海量/非结构化 传统非结构化数据 传统结构化数据 企业托管服务中的数据 Linear Growth Source: IDC, 2011 Worldwide Enterprise Storage Systems 速度 数据量 多样化 传统数据 大数据 GB -> TB TB -> PB以上 数据量稳定,增长不快 持续实时产生数据, 年增长率超过60% 主要为结构化数据 半结构化,非结构化, 多维数据 ―大数据‖ 挃数据集的大小超过了现有典型的数据库软件和工具的处理能力。不此同时,及时捕捉、 存储、聚合、管理这些大数据以及对数据的深度分析的新技术和新能力,正在快速增长,就像预 交互式数据仓库 Sqoop 1.4.1 关系数据ETL工具 Flume 1.1.0 日志收集工具 Intel Hadoop Manager 2.2 安装、部署、配置、监控、告警和访问控制 Zookeeper 3.4.4 分布式协作服务 Pig 0.9.2 数据流处理语言 Mahout 0.6 数据挖掘 HBase 0.94.1 实时、分布式、高维数据库0 码力 | 36 页 | 2.50 MB | 1 年前3 大数据时代的Intel之Hadoop180,000 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 Exponential Growth 内容仓库– 海量/非结构化 传统非结构化数据 传统结构化数据 企业托管服务中的数据 Linear Growth Source: IDC, 2011 Worldwide Enterprise Storage Systems 速度 数据量 多样化 传统数据 大数据 GB -> TB TB -> PB以上 数据量稳定,增长不快 持续实时产生数据, 年增长率超过60% 主要为结构化数据 半结构化,非结构化, 多维数据 ―大数据‖ 挃数据集的大小超过了现有典型的数据库软件和工具的处理能力。不此同时,及时捕捉、 存储、聚合、管理这些大数据以及对数据的深度分析的新技术和新能力,正在快速增长,就像预 交互式数据仓库 Sqoop 1.4.1 关系数据ETL工具 Flume 1.1.0 日志收集工具 Intel Hadoop Manager 2.2 安装、部署、配置、监控、告警和访问控制 Zookeeper 3.4.4 分布式协作服务 Pig 0.9.2 数据流处理语言 Mahout 0.6 数据挖掘 HBase 0.94.1 实时、分布式、高维数据库0 码力 | 36 页 | 2.50 MB | 1 年前3
 Hadoop 迁移到阿里云MaxCompute 技术方案的逻辑组件关系如下图所示: 这些逻辑组件包括:  数据源:数据源包括关系型数据库、日志文件、实时消息等。  数据存储:面向海量数据存储的分布式文件存储服务,支持 结构化数据和非结构数据数据存 储,我们也常称之为数据湖。如 HDFS、对象存储服务等。  批处理:由于大数据场景必须处理大规模的数据集,批处理往往需要从数据存储中读取大量 数据进 行长 时间 处理 分析 Streaming、Storm 等。  机器学习:满足机器学习工作负载的服务。如当前流行的 Spark MLib/ML、Tensorflow 等。  分析型数据存储:对数据进行处理加工后,面向应用场景,将数据以结构化的方式进行存储, 以便分析工具或分析应用能够获取数据。如利用 MPP 数据仓库、Spark SQL 等支持 BI 工具 访问,利用 Hbase 实现低延迟的在线服务等  分析与报表:对数据进行分析和展现以获取洞察。如 级别。同一个 MaxCompute 项目支持企业从创业团队发展到独角兽的 数据规模需求; 数据分布式存储,多副本冗余,数据存储对外仅开放表的 操作接口,不提供文件系统访问接口 自研数据存储结构,表数据列式存储,默认高度压缩,后 D k n e P y l w s o u ) ( ( f I w s A n t S B M / ) g p L K n T i Q w s0 码力 | 59 页 | 4.33 MB | 1 年前3 Hadoop 迁移到阿里云MaxCompute 技术方案的逻辑组件关系如下图所示: 这些逻辑组件包括:  数据源:数据源包括关系型数据库、日志文件、实时消息等。  数据存储:面向海量数据存储的分布式文件存储服务,支持 结构化数据和非结构数据数据存 储,我们也常称之为数据湖。如 HDFS、对象存储服务等。  批处理:由于大数据场景必须处理大规模的数据集,批处理往往需要从数据存储中读取大量 数据进 行长 时间 处理 分析 Streaming、Storm 等。  机器学习:满足机器学习工作负载的服务。如当前流行的 Spark MLib/ML、Tensorflow 等。  分析型数据存储:对数据进行处理加工后,面向应用场景,将数据以结构化的方式进行存储, 以便分析工具或分析应用能够获取数据。如利用 MPP 数据仓库、Spark SQL 等支持 BI 工具 访问,利用 Hbase 实现低延迟的在线服务等  分析与报表:对数据进行分析和展现以获取洞察。如 级别。同一个 MaxCompute 项目支持企业从创业团队发展到独角兽的 数据规模需求; 数据分布式存储,多副本冗余,数据存储对外仅开放表的 操作接口,不提供文件系统访问接口 自研数据存储结构,表数据列式存储,默认高度压缩,后 D k n e P y l w s o u ) ( ( f I w s A n t S B M / ) g p L K n T i Q w s0 码力 | 59 页 | 4.33 MB | 1 年前3
 Hadoop 概述以及分析。如果 你在使用 Hadoop 工作时期望数据库的体验并且怀念关系型环境中 的结构(见图 1-3),那么它或许是你的解决方案。记住,这不是与传 统的数据库或数据结构进行对比。它也不能取代现有的 RDBMS 环 Hadoop 大数据解决方案 8 境。Hive 提供了一种为数据赋予结构的渠道,并且通过一种名为 HiveQL 的类 SQL 语言进行数据查询。 Hive 了一个类似的生态系统。 Cloudera 为集成结构化和非结构化的数据创造了条件。通过使用平 台交付的统一服务,Cloudera 开启了处理和分析多种不同数据类型 的大门(见图 1-5)。 处理、分析和服务 安全 文件系统 (HDFS) 关系型 非结构化 批处理 流 搜索 统一服务 资源管理(YARN) 存储 结构化 集成 图 1-5 1.4.2 或者其他数据平台的解决方案无法在非 Windows 环境下运行。你应该细心检查现有的或者计划使用的环境 以决定最优解决方案。数据平台或者数据管理平台正如其名。它是 一个集中式计算系统,用于收集、集成和管理大型结构化和非结构 化数据集。 从理论上讲,无论 HortonWorks,还是 Cloudera,均是可供选 择的平台,包括用于与现有数据环境和 Hadoop 一起工作的 RDBMS 连接器。大多数供应0 码力 | 17 页 | 583.90 KB | 1 年前3 Hadoop 概述以及分析。如果 你在使用 Hadoop 工作时期望数据库的体验并且怀念关系型环境中 的结构(见图 1-3),那么它或许是你的解决方案。记住,这不是与传 统的数据库或数据结构进行对比。它也不能取代现有的 RDBMS 环 Hadoop 大数据解决方案 8 境。Hive 提供了一种为数据赋予结构的渠道,并且通过一种名为 HiveQL 的类 SQL 语言进行数据查询。 Hive 了一个类似的生态系统。 Cloudera 为集成结构化和非结构化的数据创造了条件。通过使用平 台交付的统一服务,Cloudera 开启了处理和分析多种不同数据类型 的大门(见图 1-5)。 处理、分析和服务 安全 文件系统 (HDFS) 关系型 非结构化 批处理 流 搜索 统一服务 资源管理(YARN) 存储 结构化 集成 图 1-5 1.4.2 或者其他数据平台的解决方案无法在非 Windows 环境下运行。你应该细心检查现有的或者计划使用的环境 以决定最优解决方案。数据平台或者数据管理平台正如其名。它是 一个集中式计算系统,用于收集、集成和管理大型结构化和非结构 化数据集。 从理论上讲,无论 HortonWorks,还是 Cloudera,均是可供选 择的平台,包括用于与现有数据环境和 Hadoop 一起工作的 RDBMS 连接器。大多数供应0 码力 | 17 页 | 583.90 KB | 1 年前3
 尚硅谷大数据技术之Hadoop(入门)架构概述 Hadoop Distributed File System,简称 HDFS,是一个分布式文件系统。 HDFS架构概述 1)NameNode(nn):存储文件的元数据,如文件名,文件目录结构,文件属性(生成时间、副本数、 文件权限),以及每个文件的块列表和块所在的DataNode等。 2)DataNode(dn):在本地文件系统存储文件块数据,以及块数据的校验和。 3)Secondary ss1505_wuma.a vi Container MapTask SecondaryNa meNode 1.6 大数据技术生态体系 大数据技术生态体系 数据库(结构化数据) 文件日志(半结构化数据) 视频、ppt等(非结构化数据) Sqoop数据传递 Flume日志收集 Kafka消息队列 HDFS文件存储 HBase非关系型数据库 YARN资源管理 MapReduce离线计算 Spark 作业(job)的工作流程调度管理系统。 7)Hbase:HBase 是一个分布式的、面向列的开源数据库。HBase 不同于一般的关系数据库, 它是一个适合于非结构化数据存储的数据库。 8)Hive:Hive 是基于 Hadoop 的一个数据仓库工具,可以将结构化的数据文件映射为一张 数据库表,并提供简单的 SQL 查询功能,可以将 SQL 语句转换为 MapReduce 任务进行运 行。其优点是学习成本低,可以通过类0 码力 | 35 页 | 1.70 MB | 1 年前3 尚硅谷大数据技术之Hadoop(入门)架构概述 Hadoop Distributed File System,简称 HDFS,是一个分布式文件系统。 HDFS架构概述 1)NameNode(nn):存储文件的元数据,如文件名,文件目录结构,文件属性(生成时间、副本数、 文件权限),以及每个文件的块列表和块所在的DataNode等。 2)DataNode(dn):在本地文件系统存储文件块数据,以及块数据的校验和。 3)Secondary ss1505_wuma.a vi Container MapTask SecondaryNa meNode 1.6 大数据技术生态体系 大数据技术生态体系 数据库(结构化数据) 文件日志(半结构化数据) 视频、ppt等(非结构化数据) Sqoop数据传递 Flume日志收集 Kafka消息队列 HDFS文件存储 HBase非关系型数据库 YARN资源管理 MapReduce离线计算 Spark 作业(job)的工作流程调度管理系统。 7)Hbase:HBase 是一个分布式的、面向列的开源数据库。HBase 不同于一般的关系数据库, 它是一个适合于非结构化数据存储的数据库。 8)Hive:Hive 是基于 Hadoop 的一个数据仓库工具,可以将结构化的数据文件映射为一张 数据库表,并提供简单的 SQL 查询功能,可以将 SQL 语句转换为 MapReduce 任务进行运 行。其优点是学习成本低,可以通过类0 码力 | 35 页 | 1.70 MB | 1 年前3
 MATLAB与Spark/Hadoop相集成:实现大数据的处理和价值挖
大数据的”4V”特征: ▪ Volumes - 数据规模,数据规模巨大 互联网、社交网络的普及,全社会的数字化转型,数据规模向PB级发展 ▪ Variety - 数据种类 ,数据种类繁多 结构化数据,半结构化数据,非结构化数据 ▪ Value - 数据价值,数据价值密度低 价值密度的高低与数据总量的大小成反比 ▪ Velocity - 数据处理速度,数据处理速度需要快速 数据处理速度是决定大数据应用的关键0 码力 | 17 页 | 1.64 MB | 1 年前3 MATLAB与Spark/Hadoop相集成:实现大数据的处理和价值挖
大数据的”4V”特征: ▪ Volumes - 数据规模,数据规模巨大 互联网、社交网络的普及,全社会的数字化转型,数据规模向PB级发展 ▪ Variety - 数据种类 ,数据种类繁多 结构化数据,半结构化数据,非结构化数据 ▪ Value - 数据价值,数据价值密度低 价值密度的高低与数据总量的大小成反比 ▪ Velocity - 数据处理速度,数据处理速度需要快速 数据处理速度是决定大数据应用的关键0 码力 | 17 页 | 1.64 MB | 1 年前3
 Hadoop开发指南再尝试执⾏。 1. 在 在UHost上安装 上安装Hadoop客户端 客户端 出于安全性考虑,⼀般建议⽤⼾在⾮UHadoop集群机器上安装客⼾端进⾏任务提交与相关操作 1.1 控制台安装 控制台安装 可通过控制台⼀键安装,参考:客⼾端安装。 1.2 ⾃⾏安装 ⾃⾏安装 针对部分存量已⾃⾏安装⽤⼾,可根据选择按照以下⽅式⾃⾏安装。 1.2.1 利⽤安装脚本部署 利⽤安装脚本部署 在任⼀master节点下的都有 hadoop-yarn-resourcemanager restart 重启NodeManager:service hadoop-yarn-nodemanager restart 重启整个Hadoop服务:请通过UCloud控制台集群服务管理⻚⾯操作 2.5.2 查看 查看HDFS状态,节点信息 状态,节点信息 hdfs dfsadmin -report 2.5.3 修改 修改HDFS⽂件副本数量 ⽂件副本数量 hdfs0 码力 | 12 页 | 135.94 KB | 1 年前3 Hadoop开发指南再尝试执⾏。 1. 在 在UHost上安装 上安装Hadoop客户端 客户端 出于安全性考虑,⼀般建议⽤⼾在⾮UHadoop集群机器上安装客⼾端进⾏任务提交与相关操作 1.1 控制台安装 控制台安装 可通过控制台⼀键安装,参考:客⼾端安装。 1.2 ⾃⾏安装 ⾃⾏安装 针对部分存量已⾃⾏安装⽤⼾,可根据选择按照以下⽅式⾃⾏安装。 1.2.1 利⽤安装脚本部署 利⽤安装脚本部署 在任⼀master节点下的都有 hadoop-yarn-resourcemanager restart 重启NodeManager:service hadoop-yarn-nodemanager restart 重启整个Hadoop服务:请通过UCloud控制台集群服务管理⻚⾯操作 2.5.2 查看 查看HDFS状态,节点信息 状态,节点信息 hdfs dfsadmin -report 2.5.3 修改 修改HDFS⽂件副本数量 ⽂件副本数量 hdfs0 码力 | 12 页 | 135.94 KB | 1 年前3
 Spark 简介以及与 Hadoop 的对比容错 在 RDD 计算,通过 checkpint 进行容错,做 checkpoint 有两种方式,一个是 checkpoint data,一个是 logging the updates。用户可以控制采用哪种方式来实现容错,默认是 logging the updates 方式,通过记录跟踪所有生成 RDD 的转换(transformations)也就是记录每 个 RDD 的 lineage(血统)来重新计算生成丢失的分区数据。 2. 这些多种多样的数据集操作类型,给给开发上层应用的用户提供了方便。各个处理节点 之间的通信模型不再像 Hadoop 那样就是唯一的 Data Shuffle 一种模式。用户可以命名, 物化,控制中间结果的存储、分区等。可以说编程模型比 Hadoop 更灵活。 3. 由于 RDD 的特性,Spark 不适用那种异步细粒度更新状态的应用,例如 web 服务的存 储或者是增量的 web 2.3 容错性 在RDD计算,通过checkpoint进行容错,做checkpoint有两种方式,一个是checkpoint data,一个是 logging the updates。用户可以控制采用哪种方式来实现容错,默认是 logging the updates 方式,通过记录跟踪所有生成 RDD 的转换(transformations)也就是记录每 个 RDD 的 lineage(血统)来重新计算生成丢失的分区数据。0 码力 | 3 页 | 172.14 KB | 1 年前3 Spark 简介以及与 Hadoop 的对比容错 在 RDD 计算,通过 checkpint 进行容错,做 checkpoint 有两种方式,一个是 checkpoint data,一个是 logging the updates。用户可以控制采用哪种方式来实现容错,默认是 logging the updates 方式,通过记录跟踪所有生成 RDD 的转换(transformations)也就是记录每 个 RDD 的 lineage(血统)来重新计算生成丢失的分区数据。 2. 这些多种多样的数据集操作类型,给给开发上层应用的用户提供了方便。各个处理节点 之间的通信模型不再像 Hadoop 那样就是唯一的 Data Shuffle 一种模式。用户可以命名, 物化,控制中间结果的存储、分区等。可以说编程模型比 Hadoop 更灵活。 3. 由于 RDD 的特性,Spark 不适用那种异步细粒度更新状态的应用,例如 web 服务的存 储或者是增量的 web 2.3 容错性 在RDD计算,通过checkpoint进行容错,做checkpoint有两种方式,一个是checkpoint data,一个是 logging the updates。用户可以控制采用哪种方式来实现容错,默认是 logging the updates 方式,通过记录跟踪所有生成 RDD 的转换(transformations)也就是记录每 个 RDD 的 lineage(血统)来重新计算生成丢失的分区数据。0 码力 | 3 页 | 172.14 KB | 1 年前3
 尚硅谷大数据技术之Hadoop(生产调优手册)可以根据128m数据对应1G内存原则提高该内存。 8)mapreduce.map.cpu.vcores 默认MapTask的CPU核数1。计算密集型任 务可以增加CPU核数 7)mapreduce.map.java.opts:控制MapTask堆内存大小。(如果内存不够, 报:java.lang.OutOfMemoryError) 尚硅谷大数据技术之 Hadoop(生产调优手册) completedmaps当MapTask完成的比 例达到该值后才会为ReduceTask申请资源。默认是0.05。 10)如果可以不用Reduce,尽可能不用 5)mapreduce.reduce.java.opts:控制ReduceTask堆内存大小。(如果内 存不够,报:java.lang.OutOfMemoryError) 8.3 MapReduce 数据倾斜问题 1)数据倾斜现象 数据频率倾斜— jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input /output2 (2)观察控制台 2021-02-14 16:13:50,607 INFO mapreduce.Job: Job job_1613281510851_0002 running in uber mode : false0 码力 | 41 页 | 2.32 MB | 1 年前3 尚硅谷大数据技术之Hadoop(生产调优手册)可以根据128m数据对应1G内存原则提高该内存。 8)mapreduce.map.cpu.vcores 默认MapTask的CPU核数1。计算密集型任 务可以增加CPU核数 7)mapreduce.map.java.opts:控制MapTask堆内存大小。(如果内存不够, 报:java.lang.OutOfMemoryError) 尚硅谷大数据技术之 Hadoop(生产调优手册) completedmaps当MapTask完成的比 例达到该值后才会为ReduceTask申请资源。默认是0.05。 10)如果可以不用Reduce,尽可能不用 5)mapreduce.reduce.java.opts:控制ReduceTask堆内存大小。(如果内 存不够,报:java.lang.OutOfMemoryError) 8.3 MapReduce 数据倾斜问题 1)数据倾斜现象 数据频率倾斜— jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input /output2 (2)观察控制台 2021-02-14 16:13:50,607 INFO mapreduce.Job: Job job_1613281510851_0002 running in uber mode : false0 码力 | 41 页 | 2.32 MB | 1 年前3
 通过Oracle 并行处理集成 Hadoop 数据Hadoop 数据 图 2. 利用表函数进行并行处理 由于表函数可以并行运行,Hadoop 流作业也可以不同程度地并行运行,并且后者不受 Oracle 查询协调器的控制,这种情况下,队列能提供负载平衡。 4 Oracle 白皮书 — 通过 Oracle 并行处理集成 Hadoop 数据 利用表函数的示例 下面我们将以一个实际示例展示图 机制。首个插入胜出,作为此进程的查询协调器 (QC)。请注意,QC 表函数调用同时也承担 着处理角色。 在第 2 步中,该表函数调用 (QC) 使用 dbms_scheduler(图 3 中的作业控制器)启动一个异步 作业,该作业接着在 Hadoop 集群上运行同步 bash 脚本。这个 bash 脚本就是图 3 中的启动程 序 (launcher),它在 Hadoop 集群上启动 mapper 并行处理集成 Hadoop 数据 END; END; / Bash 脚本 下面这个简短的脚本是图 3 的第 3 步和第 4 步所示的数据库外控制器。只要 Hadoop mapper 保持运行,系统就会持续执行这个同步步骤。 #!/bin/bash cd –HADOOP_HOME- A="/net/scratch/java/jdk10 码力 | 21 页 | 1.03 MB | 1 年前3 通过Oracle 并行处理集成 Hadoop 数据Hadoop 数据 图 2. 利用表函数进行并行处理 由于表函数可以并行运行,Hadoop 流作业也可以不同程度地并行运行,并且后者不受 Oracle 查询协调器的控制,这种情况下,队列能提供负载平衡。 4 Oracle 白皮书 — 通过 Oracle 并行处理集成 Hadoop 数据 利用表函数的示例 下面我们将以一个实际示例展示图 机制。首个插入胜出,作为此进程的查询协调器 (QC)。请注意,QC 表函数调用同时也承担 着处理角色。 在第 2 步中,该表函数调用 (QC) 使用 dbms_scheduler(图 3 中的作业控制器)启动一个异步 作业,该作业接着在 Hadoop 集群上运行同步 bash 脚本。这个 bash 脚本就是图 3 中的启动程 序 (launcher),它在 Hadoop 集群上启动 mapper 并行处理集成 Hadoop 数据 END; END; / Bash 脚本 下面这个简短的脚本是图 3 的第 3 步和第 4 步所示的数据库外控制器。只要 Hadoop mapper 保持运行,系统就会持续执行这个同步步骤。 #!/bin/bash cd –HADOOP_HOME- A="/net/scratch/java/jdk10 码力 | 21 页 | 1.03 MB | 1 年前3
共 11 条
- 1
- 2













