EMR Serverless Spark:一站式全托管湖仓分析利器
本文根据2024云栖大会实录整理而成,演讲信息如下:
演讲人:
李钰(绝顶) | 阿里云智能集团资深技术专家,阿里云 EMR 团队负责人
活动:
2024 云栖大会 AI - 开源大数据专场
数据平台技术演变
追溯数据处理软件及平台的演进历程,每一次大的架构升级与变迁都是由全球范围的新兴应用出现和落地触发的。具体来说,20世纪60-70年代数据库技术出现,数据库技术的普及和落地与个人计算机(PC)兴起的浪潮息息相关。直至21世纪初互联网应用爆发前,单机数据库技术在数据处理领域一直占据着统治地位。
进入21世纪,国外以Google的搜索引擎、Facebook的社交网络、Amazon的电子商务为标志,国内以百度、腾讯、阿里等为领军,标志着互联网应用开始大范围普及。互联网应用的普及,逐渐反映出传统单机数据库系统在处理能力与扩展性上存在的局限性难以支撑新兴业务的高速增长。Google在2003年发布了Google File System、2004年发布了MapReduce论文,标志着大数据技术时代的到来,引领了以Hadoop、HBase、Hive等为代表的开源大数据技术的兴起与发展。
随后,2007年iPhone的问世引领了智能手机时代的到来,推动移动互联网的兴起与应用多元化,进一步催生了计算引擎的发展。大约从2010年开始,以Apache Spark为代表的批处理引擎、以Apache Flink为代表的流处理引擎、以Presto为代表的OLAP分析引擎,逐渐成为数据处理领域的主流技术,满足了复杂多变的计算需求。
至2017年左右,随着直播与短视频等多媒体内容的爆发,数据形态趋向多模态,对数据处理框架的灵活性提出了更高要求。这一背景下,数据湖技术应运而生,旨在应对数据多样性带来的挑战。而2022年大语言模型的登场,揭开了人工智能应用时代的序幕,AI生成内容(AIGC)的飞速发展,不仅促使数据规模呈指数级增长,还进一步提升了非结构化、多模态数据的占比,对数据处理技术提出了全新的挑战与机遇。
面对这些新兴挑战,传统数据架构显得力不从心,亟需向更适应当前需求的方向演进。传统数据仓库具备高度结构化的特点,开箱即用,然而其高昂的存储成本、较低的数据开放性和灵活性成为了主要痛点。尤其是在需要多场景使用时,如同时支持离线和实时分析的情况下,必须通过数据同步来导入导出,进一步增加了复杂度。随着多媒体数据的增长以及对数据灵活性的要求越来越高,基于对象存储的数据湖架构应运而生,这类架构以其低成本存储和高灵活性著称,同时也采用了更加开放的数据格式。但是,它们在事务支持方面相对较弱,性能上也无法完全取代数据仓库。
鉴于上述情况,往往需要采用混合策略:将相对成熟且价值较高的数据业务应用在数据仓库中进行,而相对新兴对灵活性要求较高的数据业务应用则基于数据湖部署。这种混合策略虽然能够在一定程度上满足需求,但不可避免地带来了额外的数据一致性维护成本以及数据冗余问题,增加了系统的整体复杂性。在AI应用即将普及的新时代背景下,可以预见未来几年内应用领域的变化将会异常迅速,继续沿用旧模式将不再可行,因为这会导致极高的成本支出及难以应对的业务复杂度增长。
因此,我们认为,融合了数据湖与数据仓库优点的数据湖仓一体架构Lakehouse是发展的必然趋势。该架构在数据湖的基础上进一步优化,同时具备数据仓库的能力。具体而言,从架构层面看,数据湖仓可分为三层:
-
底层是湖仓存储层:负责解决数据事务性、一致性与存储有效性。
-
中间层是湖仓管理层:专注于结构化、半结构化和非结构化数据统一元数据管理,解决数据治理及安全问题。
-
最上层是湖仓分析层:由多种计算引擎构成,其中Apache Spark是开源领域经过多年发展的明星项目。
在海外,Databricks已经提供了基于Spark构建的成熟的全托管产品,但在国内市场上仍缺乏相应的产品。为此,阿里云推出了EMR Serverless Spark,旨在填补这一空白,提供一个全面整合的数据湖仓解决方案。
EMR Serverless Spark 功能特性
接下来,我将介绍 EMR Serverless Spark 的主要功能与特性。正如前面提到的,在数据湖仓分析层,我们主要关注两个核心问题。首先,是业务易用性。所谓业务易用性,指的是能否通过一款湖仓分析产品,既能进行大数据处理,又能进行AI、数据科学处理。其次,性能也是一个至关重要的考量因素,在数据湖的基础上,其性能是否可以与传统数仓媲美。除易用性和性能之外,开放性也是不可忽视的一个因素。鉴于数据湖本身强调的是开放性和灵活性,因此EMR Serverless Spark设计时充分考虑了对开源Spark生态系统的全面兼容性。最后,云原生也是需要关注的因素。下面,我将从上述方面进一步展开。
一站式数据开发
首先,从平台能力角度来看,EMR Serverless Spark提供了作业开发、调试、发布、调度等一站式数据开发体验。无论是传统的ETL、交互式数据分析、或者基于Python的数据科学数据业务,都可以基于 EMR Serverless Spark 进行开发。开发之后可以进行版本管理和生产上线,生产上线后,EMR Serverless Spark内置工作流可以进行任务调度,并对任务和工作流进行有效监控,资源使用情况方面也会全面关注。
数据开发-内置SQL编辑器
在数据开发层面,EMR Serverless Spark 内置了一个SQL编辑器。支持用户编写 Interactive Query 和 ETLQuery,并支持将不同类型的 Query 提交到不同的资源队列中运行,从而实现对计算资源的有效管理和分配。我们的资源管理体系提供了队列与会话两种形式,便于用户根据需求区分开发环境与生产环境中的工作负载。同时,SQL editor 还支持元数据视图。用户可以看到元数据库表情况,并对这些库表进行增删改查等操作。
数据分析 – Notebook 交互式环境
除了内置 SQL 编辑器之外,EMR Serverless Spark还提供了交互式的Notebook环境。在Notebook中,用户不仅能够编写和执行SQL语句,还能用Python 进行开发,并且可以根据需求灵活地安装各种Python库,例如Pandas。此外,我们还提供了一套完善的运行环境管理。用户可以通过Notebook界面轻松开发大数据AI一体化应用。
工作流调度
通过SQL编辑器或Notebook完成任务开发后,无论是单个SQL作业还是由多个脚本组成的Notebook作业,都可以通过EMR Serverless Spark 内置工作流进行调度。支持查看工作流运行情况,不同的工作流拓扑,还提供以拖拉拽方式便捷构建工作流的能力。
指标大盘
在工作流和任务调度启动后,EMR Serverless Spark支持通过指标大盘查看任务运行状态。提供 Spark 任务实例的 CPU、Memory、JVM、Driver scheduler、Executor – IO、Executor – Shuffle 等指标的可视化展示,还支持通过查看和分析作业CPU时、内存时等聚合性指标,识别性能瓶颈和异常情况,并进行优化和故障排查。
资源观测
此外,EMR Serverless Spark 提供完善的资源观测。用户可以根据部门或业务需求灵活地拆分资源队列。基于这些队列的资源使用情况,可以清晰地了解各个部门及业务线所占用的具体资源量。此外,针对不同队列之间的Quota限制,也支持动态调整。
监控诊断
最后,考虑到作业调优本身是一个相当复杂的过程,所以EMR Serverless Spark 还提供针对单个作业进行一键诊断的能力。能够智能化分析作业是否存在数据倾斜、垃圾回收等方面的异常,并基于诊断结果提供明确建议,以帮助用户更高效地优化作业。
极致性能 - 自研 Fusion 引擎
除了强大的平台能力,EMR Serverless Spark 还提供自主研发的企业级内核—Fusion Engine。这款引擎在两个方面做了极致的性能优化:
-
面向CPU密集型业务:提供基于C++语言实现的 Native 向量化 SQL 引擎,充分利用SIMD指令集加速运算过程,显著降低CPU和内存开销。
-
面向I/O密集型业务:基于我们贡献给Apache社区的开源Celeborn项目,我们内置了Remote Shuffle Service,支持多租户和资源隔离,同时提供极致弹性,实现I/O密集型业务加速。
根据TPC-DS基准测试结果表明,在10TB规模下,相较于Apache Spark,EMR Serverless Spark能够实现5倍左右的性能提升;而在更大规模(如100TB)的数据量上,相比TPCDS榜首暨 DataBricks 在2021年提交的成绩,EMR Serverless Spark 则实现了44%左右的性能增长,同时性价比提升3倍。由此可见,EMR Serverless Spark 自研 Fusion 引擎的极致性能。
全方位生态兼容
最后值得一提的是,EMR Serverless Spark还具备全方位生态兼容性。它不仅可以无缝对接阿里云 DLF 2.0元数据管理系统和全托管存储解决方案,同时也支持与Hive Metastore等开源元数据管理系统集成,确保使用 HMS + OSS 进行元数据管理和数据存储的场景也能很好的支持。此外,在数据提交方面,EMR Serverless Spark也提供了多种接入方式,包括但不限于Livy Gateway、Thrift Server以及JDBC接口。针对工作流调度,EMR Serverless Spark 基于 OpenAPI 提供官方的 Airflow 和 DolphinScheduler Operator。最后还支持以 Spark_submit 命令提交任务,兼容开源提交方式。通过上述措施,EMR Serverless Spark 致力于打造一个全方位兼容Spark生态系统的数据湖仓分析平台,为广大用户提供更加便携高效的使用体验。
客户案例
接下来,我将向大家介绍两个已经在生产环境中使用 EMR Serverless Spark 的客户案例。
客户案例-美的
美的集团的数据湖仓架构完全基于 EMR Serverless Spark 构建。首先它利用Spark Streaming技术将工业设备数据源中数据流式写入到基于Hudi格式的数据湖仓当中。尽管我们在OpenLake框架内推荐使用Paimon作为首选湖格式,但 EMR Serverless Spark 产品全面支持包括Iceberg、Hudi及Delta Lake在内的多种流行湖存储方案。无论采用何种湖格式,均需进行Compaction 以提升查询效率。在此过程中,美的则充分利用了EMR Serverless Spark提供的资源来进行Compaction。此外,美的使用EMR Serverless Spark 进行数据清洗。从原始的ODS层,基于 EMR Serverless Spark 进行 ETL,然后生成明细数据,再结合业务特点对明细层的数据做进一步抽取,生成更高维的指标供业务使用。在AI应用场景下,美的同样依赖于 EMR Serverless Spark的强大支持。借助 EMR Serverless Spark Notebook能力,开发人员可以安装自定义Python库,结合自研算法,对数据进行聚合与分析。最终,无论是数仓链路产生的数据,还是AI相关的基础数据,都将被统一导出至StarRocks中,以便于企业内部进行 BI 报表分析。综上所述,美的基于 EMR Serverless Spark 进行一站式数据湖仓分析,促进了数字化转型进程中的效率提升与创新实践。
客户案例-鹰角网络
第二个案例是知名游戏公司上海鹰角网络科技,鹰角采用基于 EMR Serverless Spark 的开源兼容解决方案。首先,鹰角使用 Flink CDC 进行数据同步与入湖,采用的是Paion数据湖格式。完成数据入湖之后,整个数仓的数据处理链路则完全基于 EMR Serverless Spark进行数据清洗和提取。值得注意的是,在工作流调度方面,鹰角同时部署了Airflow与DolphinScheduler两种不同的调度框架。对于编码能力较强的数据工程师而言,Airflow 提供了更为灵活且强大的能力以支持构建高度定制化的工作流程;而针对编码能力相对较弱的数据分析师,则可以通过 DolphinScheduler 提供的图形化界面轻松创建并管理相对简单的作业调度计划。无论采用Airflow还是DolphinScheduler进行调度,通过 EMR Serverless Spark 提供的 Operator,都能够无缝接入 EMR Serverless Spark 服务,确保了资源利用效率的最大化以及运维成本的有效控制。鹰角同样选用 StarRocks 作为实时OLAP分析的核心组件;数据展示则是使用Superset。此外,EMR Serverless Spark 也支持海外服务,鹰角海外Region已经开始使用EMR Serverless Spark。
通过以上两个案例可以发现,无论是一站式湖仓分析或大规模离线计算,EMR Serverless Spark 在实际生产环境中都得到了很好的应用。
DEMO
接下来我们以汽车销售场景为例,演示如何利用 EMR Serverless Spark平台,结合 DLF2.0 和 Paimon 构建Lakehouse,完成数据加载、ETL处理、数据可视化和预测分析的全过程。
视频链接:https://cloud.video.taobao.com/vod/nXtj_Ip2TqouF9By57OthZIsoOaWMzgWQaFu0iWyUSc.mp4
阿里云 EMR Serverless Spark 版已于2024年9月14日正式商业化售卖,欢迎体验!
如果您在使用 EMR Serverless Spark 版的过程中遇到任何疑问,可加入钉钉群(群号:58570004119)咨询。
为了助力 LakeHouse 架构在企业中的实践与落地,阿里云 EMR 技术团队联合 Apache Paimon 社区,联合举办“ Apache Spark & Paimon,助力 LakeHouse 架构生产落地”线下 Meetup,邀请阿里云、VIVO、美团等众多业内大咖分享 LakeHouse 架构的核心技术和最佳实践经验,为大数据从业者提供一个开放的分享与交流平台。
点击下方链接或扫描二维码立即报名:https://x.sm.cn/4mJeCkB
相关文章:
EMR Serverless Spark:一站式全托管湖仓分析利器
本文根据2024云栖大会实录整理而成,演讲信息如下: 演讲人: 李钰(绝顶) | 阿里云智能集团资深技术专家,阿里云 EMR 团队负责人 活动: 2024 云栖大会 AI - 开源大数据专场 数据平台技术演变 …...
Linux find 匹配文件内容
在Linux中,你可以使用find命令结合-exec或者-execgrep来查找匹配特定内容的文件。以下是一些示例: 查找当前目录及其子目录下所有文件内容中包含"exampleText"的文件: find . -type f -exec grep -l "exampleText" {} \…...
【Redis优化——如何优雅的设计key,优化BigKey,Pipeline批处理Key】
Redis优化——如何优雅的设计key,优化BigKey,Pipeline批处理Key 一、Key的设计1. 命名规范2. 长度限制在44字节以内 二、BigKey优化1. 查找bigkey2. 删除BigKey3. 优化BigKey 三、Pipeline批处理Key1. 单节点的Pipeline2. 集群下的Pipeline 一、Key的设计…...
数据结构与算法分析:你真的理解图算法吗——深度优先搜索(代码详解+万字长文)
一、前言 图是计算机科学中用来表示复杂结构信息的一种基本结构。本章我们会讨论一些通用的围表示法,以及一些频繁使用的图算法。本质上来说,一个图包含一个元素集合(也就是顶点),以及元素两两之间的关系(也就是边),由于应用范围所限,本章我们仅仅讨论简单图,简单围并不会如(a…...
LinkedList 分析
LinkedList 简介 LinkedList 是一个基于双向链表实现的集合类,经常被拿来和 ArrayList 做比较。关于 LinkedList 和ArrayList的详细对比,我们 Java 集合常见面试题总结(上)有详细介绍到。 双向链表 不过,我们在项目中一般是不会使用到 Link…...
【C/C++】模拟实现strlen
学习目标: 使用代码模拟实现strlen。 逻辑: strlen 需要输入一个字符串数组类型的变量,并且返回一个整型类型的数据。strlen 需要计算字符串数组有多少个元素。 代码1:使用计数器 #define _CRT_SECURE_NO_WARNINGS 1 #include&…...
mybatis从浅入深一步步演变分析
mybatis从浅入深一步步演变分析 版本一:不使用代理(非spring) package com.yimeng.domain;public class User {private int id;private String username;private String password;public int getId() {return id;}public void setId(int id…...
Java阶段三02
第3章-第2节 一、知识点 面向接口编程、什么是spring、什么是IOC、IOC的使用、依赖注入 二、目标 了解什么是spring 理解IOC的思想和使用 了解IOC的bean的生命周期 理解什么是依赖注入 三、内容分析 重点 了解什么是spring 理解IOC的思想 掌握IOC的使用 难点 理解IO…...
【Linux】掌握库的艺术:我的动静态库封装之旅
🌈个人主页:Yui_ 🌈Linux专栏:Linux 🌈C语言笔记专栏:C语言笔记 🌈数据结构专栏:数据结构 🌈C专栏:C 文章目录 1.什么是库1.2 认识动静态库1.2.1 动态库1.2.2…...
UE5动画控制 基础
素材 mixamo先去选择一个character 点击下载 就这个下载下来 然后选几个animation, 记得勾选 把动作下载了 without skin就是只要动作 然后把他们放在一个文件夹里先 UE里导入 找一个文件夹,直接拖拽进来那个character的fbx,默认配置就…...
流畅!HTMLCSS打造网格方块加载动画
效果演示 这个动画的效果是五个方块在网格中上下移动,模拟了一个连续的加载过程。每个方块的动画都是独立的,但是它们的时间间隔和路径被设计为相互协调,以创建出流畅的动画效果。 HTML <div class"loadingspinner"><…...
linux命令之top(Linux Command Top)
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 本人主要分享计算机核心技…...
数据结构-希尔排序(ShellSort)笔记
看动画理解 【数据结构】八大排序(超详解附动图源码)_数据结构排序-CSDN博客 一 基本思想 先选定一个整数gap,把待排序文件中所有记录分成gap个组,所有距离为gap的记录分在同一组内,并对每一组内的元素进行排序。 然后将gap逐渐减小重复上…...
Junit + Mockito保姆级集成测试实践
一、做好单测,慢即是快 对于单元测试的看法,业界同仁理解多有不同,尤其是在业务变化快速的互联网行业,通常的问题主要有,必须要做吗?做到多少合适?现在没做不也挺好的吗?甚至一些大…...
软件项目管理要点
一.项目管理 1.盈亏平衡分析 销售额固定成本可变成本税费利润 当利润为0的时候就是盈亏平衡点。 2.范围管理 范围定义的输入包括:项目章程、项目范围管理计划、组织过程资产、批准的变更申请。 3.时间管理 项目时间管理中的过程包括活动定义、活动排序、活动的资…...
ESP8266 连接 MQTT 服务器EMQX 连接MQTTX
目录 1.先用有一台自己的云服务器 2. 使用FinalShell连接阿里云云服务器ECS 3.安装宝塔 4.在云服务器打开8888端口 5.使用外网面板地址打开宝塔面板 6.安装Docker 7.下载emqx 8.打开emqxWeb 界面 9.下载MQTTX 10.EMQX加一个客户端 11.开始通信 12.加入单片机ESP8266 …...
Python中如何处理异常情况?
1、Python中如何处理异常情况? 在Python中,处理异常情况通常使用try/except语句。try语句块包含可能会引发异常的代码,而except语句块包含处理异常的代码。如果try块中的代码引发了异常,控制流将立即转到相应的except块。 以下是…...
openpnp - 在openpnp中单独测试相机
文章目录 openpnp - 在openpnp中单独测试相机概述笔记END openpnp - 在openpnp中单独测试相机 概述 底部相机的位置不合适, 重新做了零件,准备先确定一下相机和吸嘴的距离是多少才合适。 如果在设备上直接实验,那么拆装调整相机挺麻烦的。 准备直接在电…...
Spark窗口函数
1、 Spark中的窗口函数 窗口就是单纯在行后面加一个列 可以套多个窗口函数,但彼此之间不能相互引用,是独立的 窗口函数会产生shuffle over就是用来划分窗口的 (1) 分组聚合里面的函数,基…...
Idea、VS Code 如何安装Fitten Code插件使用
博主主页:【南鸢1.0】 本文专栏:JAVA 目录 编辑 简介 所用工具 1、Idea如何安装插件 1.idea下载插件 2.需要从外部下载然后在安装, 2、VS Code如何安装插件 总结 简介 Fitten Code是由非十大模型驱动的AI编程助手,它可以自动生成代…...
elasticsearch7.x在k8s中的部署
一、说明 二、思路 三、部署 1、建nfs服务器 2、建持久卷 3、部署elasticsearch 四、附件 ?pv.yaml内容 elasticsearch.yaml内容 一、说明 本文章内容主要的参考来源是https://www.cnblogs.com/javashop-docs/p/12410845.html,但参考文献中的elasticsearc…...
校园社团信息管理平台:Spring Boot技术实战指南
3系统分析 3.1可行性分析 通过对本校园社团信息管理系统实行的目的初步调查和分析,提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本校园社团信息管理系统采用SSM框架,JAVA作…...
【Linux】从内核角度理解 TCP 的 全连接队列(以及什么是 TCP 抓包)
文章目录 概念引入理解全连接队列内核方面理解Tcp抓包方法注意事项 概念引入 我们知道,TCP的三次握手是由TCP协议 自动处理的,建立连接的过程与用户是否进行accept无关,accept()的作用主要是为当前连接创建一个套接字,用于进行后…...
太速科技-712-6U VPX飞腾处理器刀片计算机
6U VPX飞腾处理器刀片计算机 一、产品概述 该产品是一款基于国产飞腾FT-2000四核处理器或D2000八核处理器的高性能6U VPX刀片式计算机。产品提供了可支持全网状交换的高速数据通道,其中P1、P2均支持1个PCIe x16 Gen3或2个PCIe x8 Gen3或4个PCIe x4 Gen3总…...
深度学习(八) TensorFlow、PyTorch、Keras框架大比拼(8/10)
一、深度学习框架概述 深度学习框架在当今人工智能和机器学习领域中占据着至关重要的地位。其中,TensorFlow 由 Google 开发,自 2015 年发布以来,凭借其灵活的计算图、自动微分功能以及跨平台支持等特点,迅速成为主流深度学习框架…...
thinkphp中命令行工具think使用,可用于快速生成控制器,模型,中间件等
在使用tp框架的时候tp内置了一个think的命令行工具, 这个工具可以帮助我们快速的生成控制器,模型,中间件的代码。 这个工具就和laravel中的 artisan 的作用都差不多,只是名称不同而已。 tp中常用的命令行工具: 1. 快…...
Discourse 是否支持手机注册
Discourse 能不能使用手机进行注册? 功能总结 简答来说,Discourse 不能使用手机注册,Discourse 也没有提供这个功能。 这个功能多是需要 SSO 来实现。 比如说华为的那个社区,他们自己做了一个自己的用户管理 SSO,然…...
软件测试学习笔记丨Flask框架-请求与响应
本文转自测试人社区,原文链接:https://ceshiren.com/t/topic/23408 请求方法 from flask import Flaskapp Flask(__name__)app.route("/cases", methods["get"]) def get_case():return {"code": 0, "msg": &…...
【C++笔记】list结构剖析及其模拟实现
【C笔记】list结构剖析及其模拟实现 🔥个人主页:大白的编程日记 🔥专栏:C笔记 文章目录 【C笔记】list结构剖析及其模拟实现前言一 .list的结构及其介绍1.1list的结构1.2list的使用1.3迭代器划分 二.list的模拟实现2.1 list结构…...
C#进阶1
C#进阶1 本文章主要介绍C#的进阶知识,如反射,特性.... 参考视频链接 原码 文章目录 C#进阶1反射步骤泛型反射调用方法 获取属性 特性特性的定义步骤扩展枚举练习 反射 在 C# 中,反射(Reflection)是一种强大的机制&a…...
泊头那家做网站/优化关键词有哪些方法
一、数值类型 1、整型 整数类型:TINYINT SMALLINT MEDIUMINT INT BIGINT 我们完全没必要为整数类型指定显示宽度,使用默认的就可以了 默认的显示宽度,都是在最大值的基础上加1 2、浮点型 浮点型:FLOAT DOUBLE 定点数:D…...
做网站需要竞品分析么/厦门百度推广怎么做
今天项目中要获取本周、本月、本季、本年的第一天,发现网上的方法或多或少都有问题,于是自己写了一个,亲测可用。同时回顾了一下js日期对象的知识,做个总结先上代码:1 /**2 * 获取指定日期的周的第一天、月的第一天、季…...
商城网站建设哪家好/优化网络推广外包
linux中通过date命令获取昨天或明天时间的方法date命令可以获取当前的时间,通过man,可以看到date有很多参数可以用,很容易做到格式化date "%F"输出格式:2011-12-31 date "%F %H:%M:%S"输出格式:20…...
网站关键字优化地点/百度广告推广电话
从选择Java GPL许可方式开源,到扩展X86产品线,到现在的股票代码由“SUNW”改变为“JAVA”,施瓦兹正在向我们展现一个全新的、灵活的而不是食古不化的Sun。IT 需要的是创新、创新、再创新,任何固执己见的家伙注定要被淘汰。在大家都…...
一级门户网站建设费用/网站营销推广有哪些
原文出处:http://blog.csdn.net/lhw1204/article/details/8439229 Window--Preferences--"General"--"Content Types",右边有个树形的text,展开找到"JSP",最底下有个"Default encoding",里面默认的是…...
网络品牌推广方法有哪些/seo优化排名公司
1:ajax的概念全称:AsynchronousJavascriptAndXmlAJAX不是一种新的编程语言,而是一种用于创建更快更好以及交互性更强的WEB应用程序技术,该技术在98年前后得到了应用。通过AJAX,你的JS可以通过JS的XMLHttpRequest对象在…...