当前位置: 首页 > news >正文

我想开个网站如室室内设计官网

我想开个网站,如室室内设计官网,app设计欣赏网站,商城网站项目工作的流程系列文章目录 从零开始了解大数据(一)#xff1a;数据分析入门篇-CSDN博客 从零开始了解大数据(二)#xff1a;Hadoop篇-CSDN博客 从零开始了解大数据(三)#xff1a;HDFS分布式文件系统篇-CSDN博客 从零开始了解大数据(四)#xff1a;MapReduce篇-CSDN博客 从零开始了解大… 系列文章目录 从零开始了解大数据(一)数据分析入门篇-CSDN博客 从零开始了解大数据(二)Hadoop篇-CSDN博客 从零开始了解大数据(三)HDFS分布式文件系统篇-CSDN博客 从零开始了解大数据(四)MapReduce篇-CSDN博客 从零开始了解大数据(五)YARN篇-CSDN博客 从零开始了解大数据(六)数据仓库Hive篇-CSDN博客 目录 系列文章目录 前言 一、数据分析 1.企业数据分析方向 2.数据分析基本步骤 3.大数据5V特征 4.分布式与集群 二、Linux操作系统 1.常用操作命令 2.常用系统命令 3.vi / vim 文本编辑器 三、Apache Hadoop 1.Hadoop集群整体概述 2.Hadoop集群启停命令、web UI 四、HDFS分布式文件系统基础 1.数据、元数据 2.分布式存储系统核心属性 3.HDFS设计目标 4.HDFS重要特性 五、HDFS shell操作 1.HDFS shell命令行解释说明 2.HDFS shell命令行常用操作 六、HDFS工作流程与机制 1.HDFS集群角色与职责 2.HDFS写数据流程上传文件 3.HDFS读数据流程下载文件 七、Hadoop MapReduce 1.MapReduce思想 2.Hadoop MapReduce设计构思 3.Hadoop MapReduce介绍 4.Map阶段执行流程 5.Reduce阶段执行流程 6.Shuffle机制 八、Hadoop YARN 1.Hadoop YARN介绍 2.Hadoop YARN架构、组件 3.程序提交YARN交互流程 4.YARN资源调度器Scheduler 九、数据仓库基础与Apache Hive入门 1.数据仓库基本概念 2.Apache Hive入门 3.Apache Hive安装部署 4.Hive SQL语言DDL建库、建表 十、Apache Hive DML语句与函数使用 1.Hive SQL DML语法之加载数据 2.Hive SQL DML语法之查询数据 3.Hive SQL Join关联查询 4.Hive 常用函数入门 总结 前言 本文将对本专栏之前的几篇从零开始了解大数据的文章进行总结。 一、数据分析 1.企业数据分析方向 原因分析 离线分析Batch Processing 面向过去面向历史分析已有的数据 在时间维度明显成批次性变化。一周一分析T7一天一分析T1所以也叫做批处理。 现状分析 实时分析Real Time Processing | Streaming 面向当下分析实时产生的数据 所谓的实时是指数据产生到数据分析到数据应用的时间间隔很短可细分秒级、毫秒级。 预测分析 机器学习Machine Learning 基于历史数据和当下产生的实时数据预测未来发生的事情 侧重于数学算法的运用如分类、聚类、关联、预测。 2.数据分析基本步骤 明确分析目的和思路 数据收集 数据预处理主要包括 数据清洗、数据转化、数据提取、数据计算 数据分析 数据展现数据可视化 报告撰写 3.大数据5V特征 Volume数据体量大 Variety种类、来源多样化 Value低价值密度 Velocity速度快 Veracity数据的质量 4.分布式与集群 分布式多台机器每台机器上部署不同组件 集群多台机器每台机器上部署相同组件 二、Linux操作系统 特殊符号 . 目录或文件名以 . 开始表示隐藏的文件路径以 . 开始表示当前路径 .. 当前目录的上一级目录 ~ 当前用户的home目录 / 根目录 快捷方式 Tab键自动补全和提示 history命令显示历史执行记录 1.常用操作命令 显示目录内容 lslist files命令显示指定工作目录下的内容列出目前工作目录所含文件及子目录 -a显示所有文件及目录 -l显示文件名称、文件类型、权限、拥有者、文件大小等ls -l ll 切换目录 cdchange directory命令用于切换当前工作目录 ~表示home目录 .表示目前所在目录 ..表示目前目录位置的上一层目录 创建、删除 mkdirmake directory命令用于创建目录 -p确保父目录名称存在不存在则创建 touch命令创建一个空文件 rmremove命令用于删除一个文件或目录 -f强制直接删除无需用户确认 -r将目录及以下所有递归逐一删除 复制、移动 cpcopy file命令用于复制文件或目录 -r若给出的源文件是一个目录文件此时将复制该目录下所有的子目录和文件 mvmove file命令用于文件或目录改名或将文件或目录移入其它位置 文件内容查看 catconcatenate命令用于连接文件并打印到标准输出设备上适合小文件内容查看 more命令类似cat命令会以一页一页的形式显示翻页结束自动退出适合大文件查看按space键翻下一页按b往回上一页 tail命令用于查看文件的结尾部分内容 -n用于显示行数默认为10即显示10行的内容 -f用于实时显示文件动态追加的内容。会把文件里的最尾部的内容显示在屏幕上并不断刷新只要文件有更新就可以看到最新的文件内容 其他 | 管道命令将前一个命令执行的结果作为内容交给下一个命令处理可以形成多级管道操作 命令1 | 命令2将命令1的结果通过命令2做进一步的处理 echo命令用于内容的输出将内容输出到console控制台上 输出重定向覆盖命令 command file 执行command然后将输出的内容存入filefile内已经存在的内容将被新内容覆盖替换 输出重定向追加命令 command file 执行command然后将输出的内容存入file新内容追加在文件末尾 解压缩命令 打包、解包 tartape archive命令常用于备份文件是用来建立、还原备份文件的工具程序可以加入、解开备份文件内的文件 -c 或 - -create 建立新的备份文件 -x 或 - -extract 或- -get 从备份文件中还原文件 -v 或- -verbose 显示指令执行过程 -f 备份文件 或 - -file备份文件 指定备份文件 打包压缩、解包解压缩 在打包备份或者解包的过程中可以通过指定压缩算法对打包的文件进行压缩解压的时候也需要指定相应的算法 -z 或 - -gzip 或 - -ungzip 通过gzip指令处理备份文件 最重要的搭配tar -zxvf xxxxx.tar.gz 2.常用系统命令 时间、日期查看 date命令用来显示或设定系统的日期与时间格式设定为一个加号后接数个标记 calcalendar命令用于显示当前或指定日期的公历 内存、磁盘使用率查看 free命令用于显示内存状态。会显示内存的使用情况包括实体内存虚拟的交换文件内存共享内存区段以及系统核心使用的缓冲区等 dfdisk free命令用于显示目前在linux系统上的文件系统磁盘使用情况统计 进程查看 psprocess status命令用于显示当前进程的状态 jps命令JDK自带的命令用于查看本机运行的Java进程情况 3.vi / vim 文本编辑器 打开与新建文件 vim / path / file 如果文件不存在则新建文件编辑器左下角提示 new file 如果文件存在则打开文件进入命令模式 vim编辑器3种工作模式 命令模式Command mode 所敲的按键编辑器都理解为命令以命令驱动执行不同的功能 不能自由进行文本编辑 输入模式Insert mode 编辑模式、插入模式 可以对文件内容进行自由编辑 底线命令模式Last line mode 以 : 开始通常用于文件的保存、退出 命令模式- -输入模式 i 进入到编辑输入模式后定位到当前光标前面 o 进入到编辑输入模式后在当前行的后面添加一行空行 输入模式下按ESC退回到命令模式 命令模式- -底线命令模式 在命令模式下输入 : 进入底线命令模式 常用的底线命令 : q 退出 : w 保存 : wq 保存退出 : wq! 强制保存退出 命令模式下按shift zz 可以实现快速的保存退出 vim基本操作命令 光标移动 方向键控制移动 翻页 pageup pagedown 行首home 或 0 行尾end 或 $ 跳到文件最后一行 G 跳到文件第一行 gg 复制粘贴 复制 yy复制光标当前所在行内容 nyy复制当前行往下 n 行 粘贴 p当前行的下一行粘贴 P当前行的上一行粘贴 删除、撤销 删除 dd删除光标所在当前行内容 ndd删除当前行往下 n 行 撤销、反撤销 u撤销上一步的操作 ctrl r反撤销 三、Apache Hadoop 1.Hadoop集群整体概述 Hadoop集群包括两个集群HDFS集群、YARN集群 两个集群逻辑上分离通常物理上在一起 两个集群都是标准的主从架构集群 HDFS集群分布式存储 主角色NameNode 从角色DataNode 主角色辅助角色SecondaryNameNode YARN集群资源管理、调度 主角色ResourceManager 从角色NodeManager 2.Hadoop集群启停命令、web UI 手动逐个进程启停 每台机器上每次手动启动关闭一个角色进程可以精准控制每个进程启停避免群起群停 HDFS集群 ​ YARN集群 ​ shell脚本一键启停 在node1上使用软件自带的shell脚本一键启动前提配置好机器之间的SSH免密登录和workers文件 HDFS集群 start-dfs.sh stop-dfs.sh YARN集群 start-yarn.sh stop-yarn.sh Hadoop集群 start-all.sh stop-all.sh 进程状态、日志查看 启动完毕后可使用 jps 命令查看进程是否启动成功 Hadoop启动日志路径/export/server/hadoop-3.3.0/logs/ HDFS集群 地址http://namenode_host:9870 其中namenode_host是namenode运行所在机器的主机名或ip 如果使用主机名访问需要在windows配置hosts YARN集群 地址http://resourcemanager_host:8080 其中resourcemanager_host是resourcemanager运行所在机器的主机名或ip 如果使用主机名访问需要在windows配置hosts 四、HDFS分布式文件系统基础 1.数据、元数据 数据 指存储的内容本身如文件、视频、图片等 元数据 元数据metadata又称为解释性数据记录数据的数据 文件系统元数据一般指文件大小、最后修改时间、底层存储位置、属性、所属用户、权限等信息 2.分布式存储系统核心属性 分布式存储 元数据记录 分块存储 副本机制 3.HDFS设计目标 大部分HDFS应用对文件要求的是write-one-read-many访问模型一个文件一旦创建、写入、关闭之后就不需要修改了 移动计算的代价比移动数据的代价低 HDFS被设计为可从一个平台轻松移植到另一个平台 4.HDFS重要特性 主从架构 HDFS集群是标准的master/slave主从架构集群 一般一个HDFS集群由一个Namenode和一定数目的Datanode组成 Namenode是HDFS主节点Datanode是HDFS从节点两种角色各司其职、共同协调完成分布式的文件存储服务 官方架构图中是一主五从模式其中五个从角色位于两个机架Rack的不同服务器上 分块存储 HDFS中的文件在物理上是分块存储block的默认大小为128M不足128M则本身为一块 块的大小可以通过配置参数来规定参数位于hdfs-default.xml中dfs.blocksize 副本机制 文件的所有block都会有副本。副本系数可以在文件创建的时候指定也可以在之后通过命令改变 副本数由参数dfs.replication控制默认值是3即会额外再复制2份连同本身总共3份副本 元数据管理 在HDFS中Namenode管理的元数据具有两种类型 文件自身属性信息 文件名称、权限、修改时间、文件大小、复制因子、数据块大小 文件块位置映射信息 记录文件快和DataNode之间的映射信息即哪个块位于哪个节点上 namespace HDFS支持传统的层次型文件组织结构。用户可以创建目录然后将文件保存在这些目录里。文件系统名字空间的层次结构和大多数现有的文件系统类似用户可以创建、删除、移动或重命名文件 Namenode负责维护文件系统的namespace名称空间任何对文件系统名称空间或属性的修改都将被Namenode记录下来 HDFS会给客户端提供一个统一的抽象目录树客户端通过路径来访问文件 五、HDFS shell操作 1.HDFS shell命令行解释说明 命令行界面command-line interface缩写CLI指用户通过键盘输入指令计算机接收到指令后予以执行一种人际交互方式 Hadoop提供了以文件系统的shell命令客户端hadoop fs [generic options] 文件系统协议 HDFS Shell CLI支持操作多种文件系统包括本地文件系统(file:///)、分布式文件系统(hdfs://nn:8020)等 具体操作的是什么文件系统取决于命令中文件路径URL中的前缀协议 如果没有前缀协议则将会读取环境变量中的fs.defaultFS属性以该属性值作为默认文件系统 ​ 2.HDFS shell命令行常用操作 创建文件夹 hadoop fs -mkdir [-p] path … path待创建的目录 -p沿着路径创建父目录 查看指定目录下的内容 hadoop fs -ls [-h] [-R] [path …] path指定目录路径 -h人性化显示文件size -R递归查看指定目录及其子目录 上传文件到HDFS指定目录下 hadoop fs -put [-f] [-p] localsrc … dst -f覆盖目标文件 -p保留访问时间、修改时间、所有权和权限 localsrc本地文件系统客户端所在机器 dst目标文件系统HDFS 查看HDFS文件内容 hadoop fs -cat src … 读取指定文件全部内容显示在标准输出控制台 注意大文件内容读取慎用 下载HDFS文件 Hadoop fs -get [-f] [-p] src … localdst 下载文件到本地文件系统指定目录localdst必须是目录 -f覆盖目标文件 -p保留访问时间、修改时间、所有权和权限 拷贝HDFS文件 hadoop fs -cp [-f] src … dst -f覆盖目标文件 追加数据到HDFS文件中 hadoop fs -appendToFile localsrc … dst 将所有给定本地文件的内容追加到给定dst文件 dst如果文件不存在将创建该文件 如果localsrc为-则输入为从标准输入中读取 HDFS数据移动操作 hadoop fs -mv src … dst 移动文件到指定文件夹下 可以使用该命令移动数据重命名文件的名称 六、HDFS工作流程与机制 1.HDFS集群角色与职责 主角色namenode NameNode是Hadoop分布式文件系统的核心架构中的主角色 NameNode维护和管理文件系统元数据包括名称空间目录树结构、文件和块的位置信息、访问权限等信息 NameNode是访问HDFS的唯一入口 NameNode内部通过内存和磁盘文件两种方式管理元数据 其中磁盘上的元数据文件包括Fsimage内存元数据镜像文件和edits logJournal编辑日志 从角色datanode DataNode是Hadoop HDFS中的从角色负责具体的数据块存储 DataNode的数量决定了HDFS集群的整体数据存储能力通过和NameNode配合维护着数据块 主角色辅助角色 secondarynamenode SecondaryNameNode充当NameNode的辅助节点但不能替代NameNode 主要是帮助主角色进行元数据文件的合并动作 namenode职责 NameNode仅存储HDFS的元数据文件系统中所有文件的目录树并跟踪整个集群中的文件不存储实际数据 NameNode知道HDFS中任何给定文件的块列表及其位置使用此信息NameNode知道如何从块中构建文件 NameNode不持久化存储每个文件中各个块所在的datanode的位置信息这些信息会在系统启动时从DataNode 重建 NameNode是Hadoop集群中的单点故障 NameNode所在机器通常会配置有大量内存RAM datanode职责 DataNode负责最终数据块block的存储是集群的从角色也称为Slave DataNode启动时会将自己注册到NameNode并汇报自己负责持有的块列表 当某个DataNode关闭时不会影响数据的可用性 NameNode将安排由其他DataNode管理的块进行副本复制 DataNode所在机器通常配置有大量的硬盘空间因为实际数据存储在DataNode中 2.HDFS写数据流程上传文件 写数据完整流程图 ​ Pipeline管道 Pipeline管道是HDFS在上传文件写数据过程中采用的一种数据传输方式 客户端将数据块写入第一个数据节点第一个数据节点保存数据之后再将块复制到第二个数据节点后者保存后将其复制到第三个数据节点 数据以管道的方式顺序的沿着一个方向传输这样能够充分利用每个机器的带宽避免网络瓶颈和高延迟时的连接最小化推送所有数据的延时 在线性推送模式下每台机器所有的出口宽带都用于以最快的速度传输数据而不是在多个接受者之间分配宽带 ACK应答响应 ACK (Acknowledge character即确认字符在数据通信中接收方发给发送方的一种传输类控制字符。表示发来的数据已确认接收无误 在HDFS pipeline管道传输数据的过程中传输的反方向会进行ACK校验确保数据传输安全 默认3副本存储策略 默认副本存储策略是由BlockPlacementPolicyDefault指定 第一块副本优先客户端本地否则随机 第二块副本不同于第一块副本的不同机架 第三块副本第二块副本相同机架不同机器 完整流程 HDFS客户端创建对象实例DistributedFileSystem 该对象中封装了与HDFS文件系统操作的相关方法 调用DistributedFileSystem对象的create()方法通过RPC请求NameNode创建文件。 NameNode执行各种检查判断目标文件是否存在、父目录是否存在、客户端是否具有创建该文件的权限。检查通过NameNode就会为本次请求记下一条记录返回FSDataOutputStream输出流对象给客户端用于写数据 客户端通过FSDataOutputStream输出流开始写入数据 客户端写入数据时将数据分成一个个数据包packet 默认64k, 内部组件DataStreamer请求NameNode挑选出适合存储数据副本的一组DataNode地址默认是3副本存储。DataStreamer将数据包流式传输到pipeline的第一个DataNode该DataNode存储数据包并将它发送到pipeline的第二个DataNode。同样第二个DataNode存储数据包并且发送给第三个也是最后一个DataNode 传输的反方向上会通过ACK机制校验数据包传输是否成功 客户端完成数据写入后在FSDataOutputStream输出流上调用close()方法关闭 DistributedFileSystem联系NameNode告知其文件写入完成等待NameNode确认。 因为namenode已经知道文件由哪些块组成DataStream请求分配数据块因此仅需等待最小复制块即可成功返回。最小复制是由参数dfs.namenode.replication.min指定默认是1 3.HDFS读数据流程下载文件 读数据完整流程图 ​ 完整流程 HDFS客户端创建对象实例DistributedFileSystem 调用该对象的open()方法来打开希望读取的文件 DistributedFileSystem使用RPC调用namenode来确定文件中前几个块的块位置分批次读取信息。 对于每个块namenode返回具有该块所有副本的datanode位置地址列表并且该地址列表是排序好的与客户端的网络拓扑距离近的排序靠前 DistributedFileSystem将FSDataInputStream输入流返回到客户端以供其读取数据 客户端在FSDataInputStream输入流上调用read()方法。然后已存储DataNode地址的InputStream连接到文件中第一个块的最近的DataNode。数据从DataNode流回客户端结果客户端可以在流上重复调用read 当该块结束时FSDataInputStream将关闭与DataNode的连接然后寻找下一个block块的最佳datanode位置。这些操作对用户来说是透明的。所以用户感觉起来它一直在读取一个连续的流 一旦客户端完成读取就对FSDataInputStream调用close()方法 七、Hadoop MapReduce 1.MapReduce思想 MapReduce的思想核心是“先分再合分而治之”即把一个复杂的问题按照一定的“分解”方法分为等价的规模较小的若干部分然后逐个解决分别找出各部分的结果然后把各部分的结果组成整个问题的最终结果 Map表示第一阶段负责“拆分”即把复杂的任务分解为若干个“简单的子任务”来并行处理。可以进行拆分的前提是这些小任务可以并行计算彼此间几乎没有依赖关系 Reduce表示第二阶段负责“合并”即对map阶段的结果进行全局汇总 2.Hadoop MapReduce设计构思 如何对付大数据处理场景 对相互间不具有计算依赖关系的大数据计算任务实现并行最自然的办法就是采取MapReduce分而治之的策略 首先Map阶段进行拆分把大数据拆分成若干份小数据多个程序同时并行计算产生中间结果然后是Reduce聚合阶段通过程序对并行的结果进行最终的汇总计算得出最终的结果 不可拆分的计算任务或相互间有依赖关系的数据无法进行并行计算 构建抽象编程模型 MapReduce借鉴了函数式语言中的思想用Map和Reduce两个函数提供了高层的并行编程抽象模型 map: 对一组数据元素进行某种重复式的处理 reduce: 对Map的中间结果进行某种进一步的结果整理 MapReduce中定义了如下的Map和Reduce两个抽象的编程接口由用户去编程实现 map: (k1; v1) → (k2; v2) reduce: (k2; [v2]) → (k3; v3) MapReduce处理的数据类型是key,value键值对 统一架构、隐藏底层细节 3.Hadoop MapReduce介绍 MapReduce特点 易于编程 Mapreduce框架提供了用于二次开发的接口简单地实现一些接口就可以完成一个分布式程序。任务计算交给计算框架去处理将分布式程序部署到hadoop集群上运行集群节点可以扩展到成百上千个等 良好的扩展性 当计算机资源不能得到满足的时候可以通过增加机器来扩展它的计算能力。基于MapReduce的分布式计算的特点可以随节点数目增长保持近似于线性的增长这个特点是MapReduce处理海量数据的关键通过将计算节点增至几百或者几千可以很容易地处理数百TB甚至PB级别的离线数据 高容错性 Hadoop集群是分布式搭建和部署的任何单一机器节点宕机了它可以把上面的计算任务转移到另一个节点上运行不影响整个作业任务得完成过程完全是由Hadoop内部完成的 适合海量数据的离线处理 可以处理GB、TB和PB级别的数据量 MapReduce局限性 实时计算性能差 MapReduce主要应用于离线作业无法做到秒级或者是亚秒级的数据响应 不能进行流式计算 流式计算特点是数据是源源不断的计算并且数据是动态的而MapReduce作为一个离线计算框架主要是针对静态数据集的数据是不能动态变化的 MapReduce实例进程 一个完整的MapReduce程序在分布式运行时有三类 MRAppMaster负责整个MR程序的过程调度及状态协调 MapTask负责map阶段的整个数据处理流程 ReduceTask负责reduce阶段的整个数据处理流程 阶段组成 一个MapReduce编程模型中只能包含一个Map阶段和一个Reduce阶段或者只有Map阶段 不能有诸如多个map阶段、多个reduce阶段的情景出现 如果用户的业务逻辑非常复杂那就只能多个MapReduce程序串行运行 MapReduce数据类型 整个MapReduce程序中数据都是以kv键值对的形式流转的 4.Map阶段执行流程 MapReduce整体执行流程图 ​ Map阶段执行过程 第一阶段把输入目录下文件按照一定的标准逐个进行逻辑切片形成切片规划默认Split size Block size128M每一个切片由一个MapTask处理getSplits 第二阶段对切片中的数据按照一定的规则读取解析返回对默认是按行读取数据key是每一行的起始位置偏移量value是本行的文本内容TextInputFormat 第三阶段调用Mapper类中的map方法处理数据每读取解析出来的一个 调用一次map方法 第四阶段按照一定的规则对Map输出的键值对进行分区partition默认不分区因为只有一个reducetask分区的数量就是reducetask运行的数量 第五阶段Map输出数据写入内存缓冲区达到比例溢出到磁盘上溢出spill的时候根据key进行排序sort默认根据key字典序排序 第六阶段对所有溢出文件进行最终的merge合并成为一个文件 5.Reduce阶段执行流程 Reduce阶段执行过程 第一阶段ReduceTask会主动从MapTask复制拉取属于需要自己处理的数据 第二阶段把拉取来的数据全部进行合并merge即把分散的数据合并成一个大的数据再对合并后的数据排序 第三阶段对排序后的键值对调用reduce方法键相等的键值对调用一次reduce方法最后把这些输出的键值对写入到HDFS文件中 6.Shuffle机制 shuffle概念 在MapReduce中Shuffle指的是将map端的无规则输出按指定的规则“打乱”成具有一定规则的数据以便reduce端接收处理 一般把从Map产生输出开始到Reduce取得数据作为输入之前的过程称作shuffle ​ Map端Shuffle Collect阶段将MapTask的结果收集输出到默认大小为100M的环形缓冲区保存之前会对key进行分区的计算默认Hash分区 Spill阶段当内存中的数据量达到一定的阀值的时候就会将数据写入本地磁盘在将数据写入磁盘之前需要对数据进行一次排序的操作如果配置了combiner还会将有相同分区号和key的数据进行排序 Merge阶段把所有溢出的临时文件进行一次合并操作以确保一个MapTask最终只产生一个中间数据文件 ​ Reducer端shuffle: Copy阶段 ReduceTask启动Fetcher线程到已经完成MapTask的节点上复制一份属于自己的数据 Merge阶段在ReduceTask远程复制数据的同时会在后台开启两个线程对内存到本地的数据文件进行合并操作 Sort阶段在对数据进行合并的同时会进行排序操作由于MapTask阶段已经对数据进行了局部的排序ReduceTask只需保证Copy的数据的最终整体有效性即可 ​ 八、Hadoop YARN 1.Hadoop YARN介绍 YARN简介 Apache Hadoop YARN Yet Another Resource Negotiator是一种新的Hadoop资源管理器 YARN是一个通用资源管理系统和调度平台可为上层应用提供统一的资源管理和调度 YARN功能说明 资源管理系统集群的硬件资源和程序运行相关比如内存、CPU等 调度平台多个程序同时申请计算资源如何分配调度的规则算法 通用理论上支持各种计算程序 2.Hadoop YARN架构、组件 YARN官方架构图 ​ YARN三大组件 集群物理层面 ResourceManagerRM YARN集群中的主角色决定系统中所有应用程序之间资源分配的最终权限即最终仲裁者 接收用户的作业提交并通过NM分配、管理各个机器上的计算资源 NodeManagerNM YARN中的从角色一台机器上一个负责管理本机器上的计算资源 根据RM命令启动Container容器、监视容器的资源使用情况并且向RM主角色汇报资源使用情况 App层面 ApplicationMasterAM 用户提交的每个应用程序均包含一个AM 应用程序内的“老大”负责程序内部各阶段的资源申请监督程序的执行情况 3.程序提交YARN交互流程 核心交互流程 MR作业提交 Client--RM 资源的申请 MrAppMaster--RM MR作业状态汇报 ContainerMap|Reduce Task--ContainerMrAppMaster 节点的状态汇报 NM--RM 整体概述 当用户向 YARN 中提交一个应用程序后 YARN将分两个阶段运行该应用程序 第一个阶段是客户端申请资源启动运行本次程序的ApplicationMaster 第二个阶段是由ApplicationMaster根据本次程序内部具体情况为它申请资源并监控它的整个运行过程直到运行完成 MR提交YARN交互流程 用户通过客户端向YARN中ResourceManager提交应用程序比如hadoop jar提交MR程序 ResourceManager为该应用程序分配第一个Container容器并与对应的NodeManager通信要求它在这个Container中启动这个应用程序的ApplicationMaster ApplicationMaster启动成功之后首先向ResourceManager注册并保持通信这样用户可以直接通过ResourceManage查看应用程序的运行状态 AM为本次程序内部的各个Task任务向RM申请资源并监控它的运行状态 一旦 ApplicationMaster 申请到资源后便与对应的 NodeManager 通信要求它启动任务 NodeManager 为任务设置好运行环境后将任务启动命令写到一个脚本中并通过运行该脚本启动任务 各个任务通过某个 RPC 协议向 ApplicationMaster 汇报自己的状态和进度以让 ApplicationMaster 随时掌握各个任务的运行状态从而可以在任务失败时重新启动任务。在应用程序运行过程中用户可随时通过 RPC 向 ApplicationMaster 查询应用程序的当前运行状态 应用程序运行完成后ApplicationMaster 向 ResourceManager 注销并关闭自己 4.YARN资源调度器Scheduler 调度器策略 三种调度器 FIFO Scheduler先进先出调度器、Capacity Scheduler容量调度器、Fair Scheduler公平调度器 Apache版本YARN默认使用Capacity Scheduler 如果需要使用其他的调度器可以在yarn-site.xml中的yarn.resourcemanager.scheduler.class进行配置 FIFO Scheduler 概述 FIFO Scheduler是Hadoop1.x中JobTracker原有的调度器实现此调度器在YARN中保留了下来 FIFO Scheduler是一个先进先出的思想即先提交的应用先运行调度工作不考虑优先级和范围适用于负载较低的小规模集群当使用大型共享集群时它的效率较低且会导致一些问题 FIFO Scheduler拥有一个控制全局的队列queue默认queue名称为default该调度器会获取当前集群上所有的资源信息作用于这个全局的queue 优势、劣势 优势 无需配置、先到先得、易于执行 劣势 任务的优先级不会变高因此高优先级的作业需要等待 不适合共享集群 Capacity Scheduler 概述 Capacity Scheduler容量调度是Apache Hadoop3.x默认调度策略。该策略允许多个组织共享整个集群资源每个组织可以获得集群的一部分计算能力。通过为每个组织分配专门的队列然后再为每个队列分配一定的集群资源这样整个集群就可以通过设置多个队列的方式给多个组织提供服务了 Capacity可以理解成一个个的资源队列这个资源队列是用户自己去分配的。队列内部又可以垂直划分这样一个组织内部的多个成员就可以共享这个队列资源了在一个队列内部资源的调度是采用的是先进先出(FIFO)策略 资源队列划分 Capacity Scheduler调度器以队列为单位划分资源简单通俗点来说就是一个个队列有独立的资源队列的结构和资源是可以进行配置的 特性优势 层次化的队列设计Hierarchical Queues 层次化的管理可以更容易、更合理分配和限制资源的使用 容量保证Capacity Guarantees 每个队列上都可以设置一个资源的占比保证每个队列都不会占用整个集群的资源 安全Security 每个队列有严格的访问控制。用户只能向自己的队列里面提交任务而且不能修改或者访问其他队列的任务 弹性分配Elasticity 空闲的资源可以被分配给任何队列 当多个队列出现争用的时候则会按照权重比例进行平衡 Fair Scheduler 概述 Fair Scheduler叫做公平调度提供了YARN应用程序公平地共享大型集群中资源的另一种方式使所有应用在平均情况下随着时间的流逝可以获得相等的资源份额 Fair Scheduler设计目标是为所有的应用分配公平的资源对公平的定义通过参数来设置 公平调度可以在多个队列间工作允许资源共享和抢占 特性优势 分层队列队列可以按层次结构排列以划分资源并可以配置权重以按特定比例共享集群 基于用户或组的队列映射可以根据提交任务的用户名或组来分配队列。如果任务指定了一个队列则在该队列中提交任务 资源抢占根据应用的配置抢占和分配资源可以是友好的或是强制的默认不启用资源抢占 保证最小配额可以设置队列最小资源允许将保证的最小份额分配给队列保证用户可以启动任务。当队列不能满足最小资源时可以从其它队列抢占。当队列资源使用不完时可以给其它队列使用。这对于确保某些用户、组或生产应用始终获得足够的资源 允许资源共享即当一个应用运行时如果其它队列没有任务执行则可以使用其它队列当其它队列有应用需要资源时再将占用的队列释放出来。所有的应用都从资源队列中分配资源 默认不限制每个队列和用户可以同时运行应用的数量可以配置来限制队列和用户并行执行的应用数量限制并行执行应用数量不会导致任务提交失败超出的应用会在队列中等待 九、数据仓库基础与Apache Hive入门 1.数据仓库基本概念 数仓概念: 数据仓库Data Warehouse简称数仓、DW是一个用于存储、分析、报告的数据系统 数据仓库的目的是构建面向分析的集成化数据环境分析结果为企业提供决策支持Decision Support 数仓专注分析 数据仓库不“生产”任何数据其数据来源于不同外部系统 数据仓库不“消费”任何数据其结果开放给各个外部应用使用 数仓主要特征 面向主题性Subject-Oriented 主题是一个抽象的概念是较高层次上企业信息系统中的数据综合、归类并进行分析利用的抽象。在逻辑意义上它是对应企业中某一宏观分析领域所涉及的分析对象 传统OLTP系统对数据的划分并不适用于决策分析而基于主题组织的数据则不同它们被划分为各自独立的领域每个领域有各自的逻辑内涵但互不交叉在抽象层次上对数据进行完整、一致和准确的描述 集成性Integrated 主题相关的数据通常会分布在多个操作型系统中彼此分散、独立、异构 因此在数据进入数据仓库之前必然要经过统一与综合对数据进行抽取、清理、转换和汇总这一步是数据仓库建设中最关键、最复杂的一步所要完成的工作有1.统一源数据中所有矛盾之处2.数据综合和计算 非易失性、非异变性Non-Volatile 数据仓库是分析数据的平台而不是创造数据的平台。我们是通过数仓去分析数据中的规律而不是去创造修改其中的规律因此数据进入数据仓库后它便稳定且不会改变 数据仓库的数据反映的是一段相当长的时间内历史数据的内容数据仓库的用户对数据的操作大多是数据查询或比较复杂的挖掘一旦数据进入数据仓库以后一般情况下被较长时间保留 数据仓库中一般有大量的查询操作但修改和删除操作很少 时变性Time-Variant 数据仓库包含各种粒度的历史数据数据可能与某个特定日期、星期、月份、季度或者年份有关 当业务变化后会失去时效性因此数据仓库的数据需要随着时间更新以适应决策的需要 数据仓库主流开发语言SQL SQL语言介绍 结构化查询语言Structured Query Language简称SQL是一种数据库查询和程序设计语言用于存取数据以及查询、更新和管理数据 结构化数据 结构化数据也称作行数据是由二维表结构来逻辑表达和实现的数据严格地遵循数据格式与长度规范主要通过关系型数据库进行存储和管理 SQL语法分类 SQL主要语法分为两个部分数据定义语言 (DDL)和数据操纵语言 (DML) DDL语法使我们有能力创建或删除表以及数据库、索引等各种对象但是不涉及表中具体数据操作 CREATE DATABASE - 创建新数据库 CREATE TABLE - 创建新表 DML语法是我们有能力针对表中的数据进行插入、更新、删除、查询操作 SELECT - 从数据库表中获取数据 UPDATE - 更新数据库表中的数据 DELETE - 从数据库表中删除数据 INSERT - 向数据库表中插入数据 2.Apache Hive入门 Apache Hive概述 Apache Hive是一款建立在Hadoop之上的开源数据仓库系统可以将存储在Hadoop文件中的结构化、半结构化数据文件映射为一张数据库表基于表提供了一种类似SQL的查询模型称为Hive查询语言HQL用于访问和分析存储在Hadoop文件中的大型数据集 Hive核心是将HQL转换为MapReduce程序然后将程序提交到Hadoop群集执行 Hive利用HDFS存储数据利用MapReduce查询分析数据 Apache Hive架构、组件 Hive架构图 ​ Hive组件 用户接口 包括 CLI、JDBC/ODBC、WebGUI。其中CLI(command line interface)为shell命令行Hive中的Thrift服务器允许外部客户端通过网络与Hive进行交互类似于JDBC或ODBC协议WebGUI是通过浏览器访问Hive 元数据存储 通常是存储在关系数据库如 mysql/derby中。Hive 中的元数据包括表的名字表的列和分区及其属性表的属性是否为外部表等表的数据所在目录等 Driver驱动程序包括语法解析器、计划编译器、优化器、执行器 完成 HQL 查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在 HDFS 中并在随后有执行引擎调用执行 执行引擎 Hive本身并不直接处理数据文件而是通过执行引擎处理。当下Hive支持MapReduce、Tez、Spark3种执行引擎 3.Apache Hive安装部署 Apache Hive安装部署 Hive Metadata Hive Metadata即Hive的元数据 包含用Hive创建的database、table、表的位置、类型、属性字段顺序类型等元信息 元数据存储在关系型数据库中如hive内置的Derby、或者第三方如MySQL等 Hive Metastore Metastore即元数据服务。Metastore服务的作用是管理metadata元数据对外暴露服务地址让各种客户端通过连接metastore服务由metastore再去连接MySQL数据库来存取元数据 有了metastore服务就可以有多个客户端同时连接而且这些客户端不需要知道MySQL数据库的用户名和密码只需要连接metastore 服务即可。某种程度上也保证了hive元数据的安全 metastore配置方式 metastore服务配置有3种模式内嵌模式、本地模式、远程模式 ​ metastore远程模式 在生产环境中建议用远程模式来配置Hive Metastore。在这种情况下其他依赖hive的软件都可以通过Metastore访问hive还可以完全屏蔽数据库层带来了更好的可管理性和安全性 Apache Hive部署实战 安装前准备 由于Apache Hive是一款基于Hadoop的数据仓库软件通常部署运行在Linux系统之上。因此不管使用何种方式配置Hive Metastore必须要先保证服务器的基础环境正常Hadoop集群健康可用 服务器基础环境 集群时间同步、防火墙关闭、主机Host映射、免密登录、JDK安装 Hadoop集群健康可用 启动Hive之前必须先启动Hadoop集群。特别要注意需等待HDFS安全模式关闭之后再启动运行Hive Hive不是分布式安装运行的软件其分布式的特性主要借由Hadoop完成包括分布式存储、分布式计算 Hadoop与Hive整合 因为Hive需要把数据存储在HDFS上并且通过MapReduce作为执行引擎处理数据因此需要在Hadoop中添加相关配置属性以满足Hive在Hadoop上运行 修改Hadoop中core-site.xml并且Hadoop集群同步配置文件重启生效 ​ Step1MySQL安装 MySQL只需要在一台机器安装并且需要授权远程访问 Step2上传解压Hive安装包node1安装即可 ​ Step3修改hive-env.sh ​ Step4新增hive-site.xml ​ ​ Step5添加驱动、初始化 上传MySQL JDBC驱动到Hive安装包lib路径下 mysql-connector-java-5.1.32.jar 初始化Hive的元数据 ​ metastore服务启动方式 前台启动进程会一直占据终端ctrl c结束进程服务关闭。可以根据需求添加参数开启debug日志获取详细日志信息便于排错 #前台启动 关闭ctrlc /export/server/apache-hive-3.1.2-bin/bin/hive --service metastore#前台启动开启debug日志 /export/server/apache-hive-3.1.2-bin/bin/hive --service metastore --hiveconf hive.root.loggerDEBUG,console 后台启动输出日志信息在/root目录下nohup.out #后台启动 进程挂起 关闭使用jps kill -9 nohup /export/server/apache-hive-3.1.2-bin/bin/hive --service metastore Apache Hive客户端使用 Hive自带客户端 bin/hive、bin/beeline 第一代客户端deprecated不推荐使用$HIVE_HOME/bin/hive, 是一个 shellUtil。主要功能一是可用于以交互或批处理模式运行Hive查询二是用于Hive相关服务的启动比如metastore服务 第二代客户端recommended 推荐使用$HIVE_HOME/bin/beeline是一个JDBC客户端是官方强烈推荐使用的Hive命令行工具和第一代客户端相比性能加强安全性提高 关系梳理 HiveServer2通过Metastore服务读写元数据。所以在远程模式下启动HiveServer2之前必须先首先启动metastore服务 远程模式下Beeline客户端只能通过HiveServer2服务访问Hive而bin/hive是通过Metastore服务访问的 Hive客户端和服务的关系图 ​ bin/beeline客户端使用 在hive安装的服务器上首先启动metastore服务然后启动hiveserver2服务 #先启动metastore服务然后启动hiveserver2服务 nohup /export/server/apache-hive-3.1.2-bin/bin/hive --service metastore nohup /export/server/apache-hive-3.1.2-bin/bin/hive --service hiveserver2 hiveserver2服务启动之后需要稍等一会才可以对外提供服务 Beeline是JDBC的客户端通过JDBC协议和Hiveserver2服务进行通信协议的地址是jdbc:hive2://node1:10000 4.Hive SQL语言DDL建库、建表 Hive SQL之数据库与建库 SQL中DDL语法的作用 数据定义语言 (Data Definition Language, DDL)是SQL语言集中对数据库内部的对象结构进行创建删除修改等的操作语言这些数据库对象包括database、table等 DDL核心语法由CREATE、ALTER与DROP三个所组成DDL并不涉及表内部数据的操作 数据库database 在Hive中默认的数据库叫做default存储数据位置位于HDFS的/user/hive/warehouse下 用户自己创建的数据库存储位置是/user/hive/warehouse/database_name.db下 create database create database用于创建新的数据库 COMMENT数据库的注释说明语句 LOCATION指定数据库在HDFS存储位置默认/user/hive/warehouse/dbname.db WITH DBPROPERTIES用于指定一些数据库的属性配置 ​ use database 选择特定的数据库 drop database 删除数据库 默认行为是RESTRICT这意味着仅在数据库为空时才删除它 要删除带有表的数据库不为空的数据库我们可以使用CASCADE ​ Hive SQL之表与建表 建表语法 CREATE TABLE [IF NOT EXISTS] [db_name.]table_name (col_name data_type [COMMENT col_comment], ... ) [COMMENT table_comment] [ROW FORMAT DELIMITED …]; 注意事项 [ ]中括号的语法表示可选 建表语句中的语法顺序要和语法中顺序保持一致 分隔符指定语法 ROW FORMAT DELIMITED语法用于指定字段之间等相关的分隔符 LazySimpleSerDe是Hive默认的包含4种子语法分别用于指定字段之间、集合元素之间、map映射 kv之间、换行的分隔符号 ​ Hive默认分隔符: Hive建表时如果没有row format语法指定分隔符则采用默认分隔符 默认的分割符是 \001 是一种特殊的字符使用的是ASCII编码的值键盘打不出来 在vim编辑器中连续按下Ctrlv/Ctrla即可输入\001 显示^A 在一些文本编辑器中将以SOH的形式显示 十、Apache Hive DML语句与函数使用 1.Hive SQL DML语法之加载数据 Hive SQL-DML-Load加载数据 Load语法功能 将数据文件移动到与Hive表对应的位置移动时是纯复制、移动操作 纯复制、移动指在数据load加载到表中时Hive不会对表中的数据内容进行任何转换任何操作 Load语法规则 LOAD DATA [LOCAL] INPATH filepath [OVERWRITE] INTO TABLE tablename; 语法规则之filepath filepath表示待移动数据的路径。可以指向文件在这种情况下Hive将文件移动到表中也可以指向目录在这种情况下Hive将把该目录中的所有文件移动到表中 filepath文件路径支持下面三种形式要结合LOCAL关键字一起考虑 1.相对路径例如project/data1 2.绝对路径例如/user/hive/project/data1 3.具有schema的完整URI例如hdfs://namenode:9000/user/hive/project/data1 语法规则之LOCAL 指定LOCAL将在本地文件系统中查找文件路径 若指定相对路径将相对于用户的当前工作目录进行解释 用户也可以为本地文件指定完整的URI例如file:///user/hive/project/data1 没有指定LOCAL关键字 如果filepath指向的是一个完整的URI会直接使用这个URI 如果没有指定schemaHive会使用在hadoop配置文件中参数fs.default.name指定的 LOCAL本地 本地文件系统指的是Hiveserver2服务所在机器的本地Linux文件系统不是Hive客户端所在的本地文件系统 Hive SQL -DML -Insert插入数据 Insert语法功能 Hive官方推荐加载数据的方式清洗数据成为结构化文件再使用Load语法加载数据到表中 也可以使用insert语法把数据插入到指定的表中最常用的配合是把查询返回的结果插入到另一张表中 insertselect insertselect表示将后面查询返回的结果作为内容插入到指定表中 需要保证查询结果列的数目和需要插入数据表格的列数目一致 如果查询出来的数据类型和插入表格对应的列数据类型不一致将会进行转换但是不能保证转换一定成功转换失败的数据将会为NULL INSERT INTO TABLE tablename select_statement1 FROM from_statement; 2.Hive SQL DML语法之查询数据 Hive SQL select语法 Select语法 SELECT [ALL | DISTINCT] select_expr, select_expr, ... FROM table_reference [WHERE where_condition] [GROUP BY col_list] [ORDER BY col_list] [LIMIT [offset,] rows]; select_expr select_expr表示检索查询返回的列必须至少有一个select_expr ALL 、DISTINCT 用于指定查询返回结果中重复的行如何处理 1.如果没有给出这些选项则默认值为ALL返回所有匹配的行 2.DISTINCT指定从结果集中删除重复的行 WHERE WHERE后面是一个布尔表达式结果要么为true要么为false用于查询过滤当布尔表达式为true时返回select后面expr表达式的结果否则返回空 在WHERE表达式中可以使用Hive支持的任何函数和运算符但聚合函数除外 聚合操作 SQL中拥有很多可用于计数和计算的内建函数其使用的语法是SELECT function(列) FROM 表 聚合函数的最大特点是不管原始数据有多少行记录经过聚合操作只返回一条数据这一条数据就是聚合的结果 常见的聚合操作函数 ​ GROUP BY 概念 GROUP BY语句用于结合聚合函数根据一个或多个列对结果集进行分组 如果没有group by语法则表中的所有行数据当成一组 语法限制 出现在GROUP BY中select_expr的字段要么是GROUP BY分组的字段要么是被聚合函数应用的字段避免出现一个字段多个值的歧义 HAVING 在SQL中增加HAVING子句原因是WHERE关键字无法与聚合函数一起使用 HAVING子句可以让我们筛选分组后的各组数据,并且可以在Having中使用聚合函数因为此时wheregroup by已经执行结束结果集已经确定 HAVING与WHERE区别 having是在分组后对数据进行过滤where是在分组前对数据进行过滤 having后面可以使用聚合函数where后面不可以使用聚合函数 ORDER BY ORDER BY 语句用于根据指定的列对结果集进行排序 ORDER BY 语句默认按照升序ASC对记录进行排序如果希望按照降序对记录进行排序可以使用DESC关键字 LIMIT LIMIT用于限制SELECT语句返回的行数 LIMIT接受一个或两个数字参数这两个参数都必须是非负整数常量 第一个参数指定要返回的第一行的偏移量从 Hive 2.0.0开始第二个参数指定要返回的最大行数当给出单个参数时它代表最大行数并且偏移量默认为0 执行顺序 在查询过程中执行顺序from where group含聚合 having order select 聚合语句(sum,min,max,avg,count)要比having子句优先执行 where子句在查询过程中执行优先级别优先于聚合语句(sum,min,max,avg,count) 3.Hive SQL Join关联查询 Hive Join语法规则 在Hive中使用最多最重要的两种join分别是inner join内连接、left join左连接 语法 -- 内连接 join_table: table_reference [INNER] JOIN table_factor [join_condition]-- 左连接 join_table: table_reference {LEFT} [OUTER] JOIN table_reference join_condition table_reference是join查询中使用的表名 table_factor与table_reference相同是联接查询中使用的表名 join_conditionjoin查询关联的条件如果在两个以上的表上需要连接则使用AND关键字 join_condition: ON expression inner join 内连接 inner join join 只有进行连接的两个表中都存在与连接条件相匹配的数据才会被留下来 left join 左连接 left join中文为左外连接(Left Outer Join)或者左连接其中outer可以省略 join时以左表的全部数据为准右边与之关联左表数据全部返回右表关联上的显示返回关联不上的显示null返回 4.Hive 常用函数入门 Hive 函数概述及分类标准 Hive内建了不少函数用于满足用户不同使用需求提高SQL编写效率 使用show functions查看当下可用的所有函数 通过describe function extended funcname来查看函数的使用方式 分类标准 Hive的函数分为两大类内置函数Built-in Functions、用户定义函数UDFUser-Defined Functions 内置函数可分为数值类型函数、日期类型函数、字符串类型函数、集合函数、条件函数等 用户定义函数根据输入输出的行数可分为3类UDF、UDAF、UDTF 用户定义函数UDF分类标准 根据函数输入输出的行数 UDFUser-Defined-Function普通函数一进一出 UDAFUser-Defined Aggregation Function聚合函数多进一出 UDTFUser-Defined Table-Generating Functions表生成函数一进多出 UDF分类标准扩大化 UDF分类标准可以扩大到Hive的所有函数中包括内置函数和用户自定义函数 Hive 常用的内置函数 String Functions 字符串函数 ​ ​ Date Functions 日期函数 ​ Mathematical Functions 数学函数 ​ Conditional Functions 条件函数 主要用于条件判断、逻辑判断转换这样的场合 ​ 总结 本文对本专栏之前的几篇从零开始了解大数据的文章进行了总结希望对大家有所帮助。
http://www.w-s-a.com/news/451257/

相关文章:

  • 课程分销的网站怎么做北京企业网站建设方案
  • 吴兴区建设局网站湖北企业网站建设
  • 网页与网站的区别是什么2023年8月份新冠
  • 唐山网站建设外包公司安卓手机怎么搭建网页
  • 国内做网站最大的公司计量检测网站平台建设方案
  • 重庆沛宣网站建设网页制作初学者
  • php网站漂浮广告代码网络营销跟网站推广有啥区别
  • wordpress调用图片优化型网站建设的基本要求
  • 郑州模板网站建设策划公司做网站怎么赚钱滑县电
  • 东昌府聊城网站优化秦皇岛市妇幼保健院
  • 做网站能赚钱吗网页升级访问通知天天更新
  • 做网站使用什么软件的免费招聘网
  • 宁波网站建设公司推荐哪家淄博网站制作公司服务
  • 做网站网页挣钱不免费主题wordpress
  • 如何提高你的网站的粘性手机网站整站模板下载
  • 学校网站建设制度网站相关推荐怎么做
  • 昌图网站wordpress 视频外链
  • 企业网站要怎么建设重庆住房城乡建设部网站
  • html5网站特点seo教程培训班
  • 深圳网站建设哪个最好网站 多语
  • 互联网工具型网站创意网络广告
  • 影视公司网站建设网页界面设计分辨率是多少dpi
  • 免费的做微博的网站模板wordpress 页面 首页
  • 摄影图片网站网站辅导运营与托管公司
  • 做课件的网站长春免费建站模板
  • 响应式网站模板下载免费wordpress 小工具移动
  • 网站标签title在线app制作平台
  • 做电器推广的网站简洁大方的网站模板
  • 网站开发的平台100个详情页设计图
  • wordpress淘宝客建站教程视频知名的设计公司网站