使用IDEA开发及测试Spark的环境搭建及简单测试

本文涉及的产品
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
简介: 一、安装JDK(具体安装省略) 二、安装Scala(具体安装省略) 三、安装IDEA   1、打开后会看到如下,然后点击OK  2、点击Next:Default plugins,进入以下页面:   3、点击Scala的Install安装(确保联网),等待完成后,出现    ...

一、安装JDK(具体安装省略)

二、安装Scala(具体安装省略)

三、安装IDEA

  1、打开后会看到如下,然后点击OK

 2、点击Next:Default plugins,进入以下页面:

  3、点击Scala的Install安装(确保联网),等待完成后,出现

 

  4、点击Create New Project进入主页面:打开后新建一个名为WordCount的工程(这个应该都知道吧File-->New-->Scala Project),建立完成后,再点击File-->Project Structure-->Libraries,然后点击+号,找到自己的spark包(spark-assembly-1.0.0-hadoop1.0.4.jar,然后点击OK)(这一步很重要)

  5、此时所有的包依赖都导入成功,然后新建一个Scala类,即可开发Spark

四、写程序

  下面给出史上最详细的程序:

  1、如果想要在本地上搞Spark的话:

 1 package com.df.spark
 2 import org.apache.spark.SparkConf
 3 import org.apache.spark.SparkContext
 4 import org.apache.spark.SparkContext._
 5 import org.apache.spark.rdd.RDD
 6 /**
 7  * 使用Scala开发集群运行的Spark WordCount程序
 8  * @author liuzhongfeng
 9  */
10 object WordCount_Cluster {
11   def main(args: Array[String]){
12     /**
13      * 第一步:创建Spark的配置对象SparkConf,设置Spark程序的运行时的配置信息
14      * 例如说通过setMaster来设置程序要链接的Spark集群的Master的URL,如果设置为local,
15      * 则代表Spark程序在本地运行,特别适合机器配置条件差的初学者。
16      */
17     val conf=new SparkConf()//创建SparkConf对象
18     conf.setAppName("My First Spark App!")//设置应用程序的名称,在程序运行的监控界面可以看到名称
19     conf.setMaster("spark://cMaster-spark:7077")//程序此时运行在Spark集群
20     
21     /**
22      * 第二步:创建SparkContext对象,
23      * SparkContext是Spark程序所有功能的唯一入口,无论是采用Scala、Java、Python、R等都必须有一个SparkContext
24      * SparkContext的核心作用:初始化Spark应用程序运行所需要的核心组件,包括DAGScheduler、TaskScheduler、SchedulerBacken
25      * 同时还会负责Spark程序往Master注册程序等
26      * SparkContext是整个Spark应用程序中至关重要的一个对象
27      */
28     val sc=new SparkContext(conf)//通过创建SparkContext对象,通过传入SparkConf实例来定制Spark运行的具体参数和配置信息
29     
30     /**
31      * 第三步:根据具体的数据来源(HDFS、HBase、Local FS、S3)通过SparkContext来创建RDD
32      * RDD的创建基本有三种方式:根据外部的数据来源(例如HDFS)、根据Scala集合、由其他的RDD操作
33      * 数据会被RDD划分称为一些列的Partitions,分配到每个Partition的数据属于一个Task的处理范畴
34      */
35    // val lines: RDD[String]=sc.textFile("H://下载//linux软件包//linux-spark的文件//spark//spark-1.0.0-bin-hadoop1//README.md", 1)
36     //读取本地文件并设置为一个Partition
37     //val lines=sc.textFile("H://下载//linux软件包//linux-spark的文件//spark//spark-1.0.0-bin-hadoop1//README.md", 1)
38     val lines=sc.textFile("/in", 1)
39     /**
40      * 第四步:对初始的RDD进行Transformation级别的处理,例如map、filter等高阶函数的编程,来进行具体的数据计算
41      * 第4.1步:将每一行的字符串拆分成单个的单词 
42      */
43     val words=lines.flatMap { line => line.split(" ")}//对每一行的字符串进行单词切分,并把所有行的切分结果通过flat合并成一个大的单词集合   
44     /**
45      * 第四步:对初始的RDD进行Transformation级别的处理,例如map、filter等高阶函数的编程,来进行具体的数据计算
46      * 第4.2步:在单词切分的基础上,对每个单词实例的计数为1,也就是word=>(word,1)
47      */
48     val pairs=words.map { word => (word,1) }
49     /**
50      * 第四步:对初始的RDD进行Transformation级别的处理,例如map、filter等高阶函数的编程,来进行具体的数据计算
51      * 第4.3步:在每个单词实例计数为1的基础之上统计每个单词在文件中出现的总次数
52      */
53     val wordCounts=pairs.reduceByKey(_+_)//对相同的Key,进行Value的累计(包括Local和Reducer级别同时Reduce)
54     wordCounts.collect.foreach(wordNumberPair=>println(wordNumberPair._1+" : "+wordNumberPair._2))
55     sc.stop()
56   }  
57 }
View Code

  通过点击右键,选择Run As-->Scala Application,然后出现运行结果:

16/01/27 16:55:27 INFO SecurityManager: Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties
16/01/27 16:55:27 INFO SecurityManager: Changing view acls to: liuzhongfeng
16/01/27 16:55:27 INFO SecurityManager: SecurityManager: authentication disabled; ui acls disabled; users with view permissions: Set(liuzhongfeng)
16/01/27 16:55:28 INFO Slf4jLogger: Slf4jLogger started
16/01/27 16:55:28 INFO Remoting: Starting remoting
16/01/27 16:55:28 INFO Remoting: Remoting started; listening on addresses :[akka.tcp://spark@Frank:38059]
16/01/27 16:55:28 INFO Remoting: Remoting now listens on addresses: [akka.tcp://spark@Frank:38059]
16/01/27 16:55:28 INFO SparkEnv: Registering MapOutputTracker
16/01/27 16:55:28 INFO SparkEnv: Registering BlockManagerMaster
16/01/27 16:55:28 INFO DiskBlockManager: Created local directory at C:\Users\LIUZHO~1\AppData\Local\Temp\spark-local-20160127165528-81e4
16/01/27 16:55:28 INFO MemoryStore: MemoryStore started with capacity 1068.9 MB.
16/01/27 16:55:28 INFO ConnectionManager: Bound socket to port 38062 with id = ConnectionManagerId(Frank,38062)
16/01/27 16:55:28 INFO BlockManagerMaster: Trying to register BlockManager
16/01/27 16:55:28 INFO BlockManagerInfo: Registering block manager Frank:38062 with 1068.9 MB RAM
16/01/27 16:55:28 INFO BlockManagerMaster: Registered BlockManager
16/01/27 16:55:28 INFO HttpServer: Starting HTTP Server
16/01/27 16:55:28 INFO HttpBroadcast: Broadcast server started at http://192.168.1.107:38063
16/01/27 16:55:28 INFO HttpFileServer: HTTP File server directory is C:\Users\LIUZHO~1\AppData\Local\Temp\spark-59ecde39-31f6-4f84-ac49-e86194415dec
16/01/27 16:55:28 INFO HttpServer: Starting HTTP Server
16/01/27 16:55:28 INFO SparkUI: Started SparkUI at http://Frank:4040
16/01/27 16:55:29 INFO MemoryStore: ensureFreeSpace(32816) called with curMem=0, maxMem=1120822886
16/01/27 16:55:29 INFO MemoryStore: Block broadcast_0 stored as values to memory (estimated size 32.0 KB, free 1068.9 MB)
16/01/27 16:55:29 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
16/01/27 16:55:29 WARN LoadSnappy: Snappy native library not loaded
16/01/27 16:55:29 INFO FileInputFormat: Total input paths to process : 1
16/01/27 16:55:29 INFO SparkContext: Starting job: foreach at WordCount.scala:53
16/01/27 16:55:29 INFO DAGScheduler: Registering RDD 4 (reduceByKey at WordCount.scala:52)
16/01/27 16:55:29 INFO DAGScheduler: Got job 0 (foreach at WordCount.scala:53) with 1 output partitions (allowLocal=false)
16/01/27 16:55:29 INFO DAGScheduler: Final stage: Stage 0(foreach at WordCount.scala:53)
16/01/27 16:55:29 INFO DAGScheduler: Parents of final stage: List(Stage 1)
16/01/27 16:55:29 INFO DAGScheduler: Missing parents: List(Stage 1)
16/01/27 16:55:29 INFO DAGScheduler: Submitting Stage 1 (MapPartitionsRDD[4] at reduceByKey at WordCount.scala:52), which has no missing parents
16/01/27 16:55:29 INFO DAGScheduler: Submitting 1 missing tasks from Stage 1 (MapPartitionsRDD[4] at reduceByKey at WordCount.scala:52)
16/01/27 16:55:29 INFO TaskSchedulerImpl: Adding task set 1.0 with 1 tasks
16/01/27 16:55:29 INFO TaskSetManager: Starting task 1.0:0 as TID 0 on executor localhost: localhost (PROCESS_LOCAL)
16/01/27 16:55:29 INFO TaskSetManager: Serialized task 1.0:0 as 2172 bytes in 2 ms
16/01/27 16:55:29 INFO Executor: Running task ID 0
16/01/27 16:55:29 INFO BlockManager: Found block broadcast_0 locally
16/01/27 16:55:29 INFO HadoopRDD: Input split: file:/H:/下载/linux软件包/linux-spark的文件/spark/spark-1.0.0-bin-hadoop1/README.md:0+4221
16/01/27 16:55:29 INFO Executor: Serialized size of result for 0 is 775
16/01/27 16:55:29 INFO Executor: Sending result for 0 directly to driver
16/01/27 16:55:29 INFO Executor: Finished task ID 0
16/01/27 16:55:29 INFO TaskSetManager: Finished TID 0 in 231 ms on localhost (progress: 1/1)
16/01/27 16:55:29 INFO DAGScheduler: Completed ShuffleMapTask(1, 0)
16/01/27 16:55:29 INFO TaskSchedulerImpl: Removed TaskSet 1.0, whose tasks have all completed, from pool 
16/01/27 16:55:29 INFO DAGScheduler: Stage 1 (reduceByKey at WordCount.scala:52) finished in 0.240 s
16/01/27 16:55:29 INFO DAGScheduler: looking for newly runnable stages
16/01/27 16:55:29 INFO DAGScheduler: running: Set()
16/01/27 16:55:29 INFO DAGScheduler: waiting: Set(Stage 0)
16/01/27 16:55:29 INFO DAGScheduler: failed: Set()
16/01/27 16:55:29 INFO DAGScheduler: Missing parents for Stage 0: List()
16/01/27 16:55:29 INFO DAGScheduler: Submitting Stage 0 (MapPartitionsRDD[6] at reduceByKey at WordCount.scala:52), which is now runnable
16/01/27 16:55:29 INFO DAGScheduler: Submitting 1 missing tasks from Stage 0 (MapPartitionsRDD[6] at reduceByKey at WordCount.scala:52)
16/01/27 16:55:29 INFO TaskSchedulerImpl: Adding task set 0.0 with 1 tasks
16/01/27 16:55:29 INFO TaskSetManager: Starting task 0.0:0 as TID 1 on executor localhost: localhost (PROCESS_LOCAL)
16/01/27 16:55:29 INFO TaskSetManager: Serialized task 0.0:0 as 2003 bytes in 1 ms
16/01/27 16:55:29 INFO Executor: Running task ID 1
16/01/27 16:55:29 INFO BlockManager: Found block broadcast_0 locally
16/01/27 16:55:29 INFO BlockFetcherIterator$BasicBlockFetcherIterator: maxBytesInFlight: 50331648, targetRequestSize: 10066329
16/01/27 16:55:29 INFO BlockFetcherIterator$BasicBlockFetcherIterator: Getting 1 non-empty blocks out of 1 blocks
16/01/27 16:55:29 INFO BlockFetcherIterator$BasicBlockFetcherIterator: Started 0 remote fetches in 6 ms
For : 5
Programs : 1
gladly : 1
Because : 1
The : 1
agree : 1
cluster. : 1
webpage : 1
its : 1
under : 2
legal : 1
1.x, : 1
have : 2
Try : 1
MRv1, : 1
add : 2
through : 1
several : 1
This : 2
Whether : 1
"yarn-cluster" : 1
% : 2
storage : 1
To : 2
setting : 1
any : 2
Once : 1
application : 1
explicitly, : 1
use: : 1
prefer : 1
SparkPi : 2
version : 3
file : 1
documentation, : 1
Along : 1
the : 28
entry : 1
author. : 1
are : 2
systems. : 1
params : 1
not : 2
different : 1
refer : 1
Interactive : 2
given. : 1
if : 5
file's : 1
build : 3
when : 2
be : 2
Tests : 1
Apache : 6
./bin/run-example : 2
programs, : 1
including : 1
<http://spark.apache.org/documentation.html>. : 1
Spark. : 2
2.0.5-alpha : 1
package. : 1
1000).count() : 1
project's : 3
Versions : 1
HDFS : 1
license : 3
email, : 1
<artifactId>hadoop-client</artifactId> : 1
>>> : 1
"org.apache.hadoop" : 1
<version>1.2.1</version> : 1
programming : 1
Testing : 1
run: : 1
environment : 2
pull : 3
1000: : 2
v2 : 1
<groupId>org.apache.hadoop</groupId> : 1
Please : 1
is : 6
run : 7
URL, : 1
SPARK_HADOOP_VERSION=2.2.0 : 1
threads. : 1
same : 1
MASTER=spark://host:7077 : 1
on : 4
built : 2
against : 1
tests : 1
examples : 2
at : 1
usage : 1
using : 3
Maven, : 1
talk : 1
submitting : 1
Shell : 2
class : 2
adding : 1
abbreviated : 1
directory. : 1
README : 1
overview : 1
dependencies. : 1
`examples` : 2
example: : 1
## : 9
N : 1
set : 2
use : 3
Hadoop-supported : 1
running : 1
find : 1
via : 2
contains : 1
project : 3
SPARK_HADOOP_VERSION=2.0.5-alpha : 1
Pi : 1
need : 1
request, : 1
or : 5
</dependency> : 1
<class> : 1
uses : 1
"hadoop-client" : 2
Hadoop, : 1
(You : 1
requires : 1
Contributions : 1
SPARK_HADOOP_VERSION=1.2.1 : 1
Documentation : 1
of : 3
cluster : 1
using: : 1
accepted : 1
must : 1
"1.2.1" : 1
1.2.1 : 2
built, : 1
Hadoop : 11
means : 1
Spark : 12
this : 4
Python : 2
original : 2
YARN, : 3
2.1.X, : 1
pre-built : 1
[Configuration : 1
locally. : 1
./bin/pyspark : 1
A : 1
locally : 2
# : 6
sc.parallelize(1 : 1
only : 1
library : 1
Configuration : 1
basic : 1
MapReduce : 2
documentation : 1
first : 1
which : 2
following : 2
changed : 1
also : 4
Cloudera : 4
without : 1
should : 2
for : 1
"yarn-client" : 1
[params]`. : 1
`SPARK_YARN=true`: : 1
setup : 1
mesos:// : 1
<http://spark.apache.org/> : 1
GitHub : 1
requests : 1
latest : 1
your : 6
test : 1
MASTER : 1
example : 3
authority : 1
SPARK_YARN=true : 3
scala> : 1
guide](http://spark.apache.org/docs/latest/configuration.html) : 1
configure : 1
artifact : 1
can : 7
About : 1
you're : 1
instructions. : 1
do : 3
2.0.X, : 1
easiest : 1
no : 1
When : 1
how : 1
newer : 1
`./bin/run-example : 1
source : 2
copyrighted : 1
material : 2
Note : 1
2.10. : 1
by : 3
please : 1
Lightning-Fast : 1
spark:// : 1
so. : 1
Scala : 3
Alternatively, : 1
If : 1
Cluster : 1
variable : 1
submit : 1
an : 2
thread, : 1
them, : 1
2.2.X : 1
And : 1
application, : 1
return : 2
developing : 1
./bin/spark-shell : 1
`<dependencies>` : 1
warrant : 1
"local" : 1
start : 1
You : 4
<dependency> : 1
Spark](#building-spark). : 1
one : 2
help : 1
with : 8
print : 1
CDH : 4
2.2.X, : 1
$ : 5
SPARK_HADOOP_VERSION=2.0.0-mr1-cdh4.2.0 : 1
in : 4
Contributing : 1
downloaded : 1
versions : 4
online : 1
`libraryDependencies`: : 1
- : 1
section: : 1
4.2.0 : 2
comes : 1
[building : 1
Python, : 1
0.23.x, : 1
`SPARK_HADOOP_VERSION` : 1
Many : 1
other : 4
Running : 1
sbt/sbt : 5
building : 1
way : 1
SBT, : 1
Online : 1
change : 1
MRv2, : 1
contribution : 1
from : 1
Example : 1
POM : 1
open : 2
sc.parallelize(range(1000)).count() : 1
you : 8
runs. : 1
Building : 1
protocols : 1
that : 4
a : 5
their : 1
guide, : 1
name : 1
example, : 1
state : 2
work : 2
will : 1
instance: : 1
to : 19
v1 : 1
core : 1
 : 149
license. : 1
"local[N]" : 1
programs : 2
package.) : 1
shell: : 2
./sbt/sbt : 2
assembly : 6
specify : 1
and : 9
Computing : 1
command, : 2
SPARK_HADOOP_VERSION=2.0.0-cdh4.2.0 : 1
sample : 1
requests, : 1
16/01/27 16:55:29 INFO Executor: Serialized size of result for 1 is 825
16/01/27 16:55:29 INFO Executor: Sending result for 1 directly to driver
16/01/27 16:55:29 INFO Executor: Finished task ID 1
16/01/27 16:55:29 INFO DAGScheduler: Completed ResultTask(0, 0)
16/01/27 16:55:29 INFO DAGScheduler: Stage 0 (foreach at WordCount.scala:53) finished in 0.126 s
16/01/27 16:55:29 INFO TaskSetManager: Finished TID 1 in 123 ms on localhost (progress: 1/1)
16/01/27 16:55:29 INFO TaskSchedulerImpl: Removed TaskSet 0.0, whose tasks have all completed, from pool 
16/01/27 16:55:29 INFO SparkContext: Job finished: foreach at WordCount.scala:53, took 0.521885349 s
16/01/27 16:55:29 INFO SparkUI: Stopped Spark web UI at http://Frank:4040
16/01/27 16:55:29 INFO DAGScheduler: Stopping DAGScheduler
16/01/27 16:55:31 INFO MapOutputTrackerMasterActor: MapOutputTrackerActor stopped!
16/01/27 16:55:31 INFO ConnectionManager: Selector thread was interrupted!
16/01/27 16:55:31 INFO ConnectionManager: ConnectionManager stopped
16/01/27 16:55:31 INFO MemoryStore: MemoryStore cleared
16/01/27 16:55:31 INFO BlockManager: BlockManager stopped
16/01/27 16:55:31 INFO BlockManagerMasterActor: Stopping BlockManagerMaster
16/01/27 16:55:31 INFO BlockManagerMaster: BlockManagerMaster stopped
16/01/27 16:55:31 INFO SparkContext: Successfully stopped SparkContext
16/01/27 16:55:31 INFO RemoteActorRefProvider$RemotingTerminator: Shutting down remote daemon.
16/01/27 16:55:31 INFO RemoteActorRefProvider$RemotingTerminator: Remote daemon shut down; proceeding with flushing remote transports.
View Code

  2、如果想要在集群上搞Spark的话:

 1 package com.df.spark
 2 import org.apache.spark.SparkConf
 3 import org.apache.spark.SparkContext
 4 import org.apache.spark.SparkContext._
 5 import org.apache.spark.rdd.RDD
 6 /**
 7  * 使用Scala开发集群运行的Spark WordCount程序
 8  * @author liuzhongfeng
 9  */
10 object WordCount_Cluster {
11   def main(args: Array[String]){
12     /**
13      * 第一步:创建Spark的配置对象SparkConf,设置Spark程序的运行时的配置信息
14      * 例如说通过setMaster来设置程序要链接的Spark集群的Master的URL,如果设置为local,
15      * 则代表Spark程序在本地运行,特别适合机器配置条件差的初学者。
16      */
17     val conf=new SparkConf()//创建SparkConf对象
18     conf.setAppName("My First Spark App!")//设置应用程序的名称,在程序运行的监控界面可以看到名称
19     conf.setMaster("spark://cMaster-spark:7077")//程序此时运行在Spark集群
20     
21     /**
22      * 第二步:创建SparkContext对象,
23      * SparkContext是Spark程序所有功能的唯一入口,无论是采用Scala、Java、Python、R等都必须有一个SparkContext
24      * SparkContext的核心作用:初始化Spark应用程序运行所需要的核心组件,包括DAGScheduler、TaskScheduler、SchedulerBacken
25      * 同时还会负责Spark程序往Master注册程序等
26      * SparkContext是整个Spark应用程序中至关重要的一个对象
27      */
28     val sc=new SparkContext(conf)//通过创建SparkContext对象,通过传入SparkConf实例来定制Spark运行的具体参数和配置信息
29     
30     /**
31      * 第三步:根据具体的数据来源(HDFS、HBase、Local FS、S3)通过SparkContext来创建RDD
32      * RDD的创建基本有三种方式:根据外部的数据来源(例如HDFS)、根据Scala集合、由其他的RDD操作
33      * 数据会被RDD划分称为一些列的Partitions,分配到每个Partition的数据属于一个Task的处理范畴
34      */
35    
36     val lines=sc.textFile("/in", 1)//导入你的hdfs上的文件
37     /**
38      * 第四步:对初始的RDD进行Transformation级别的处理,例如map、filter等高阶函数的编程,来进行具体的数据计算
39      * 第4.1步:将每一行的字符串拆分成单个的单词 
40      */
41     val words=lines.flatMap { line => line.split(" ")}//对每一行的字符串进行单词切分,并把所有行的切分结果通过flat合并成一个大的单词集合   
42     /**
43      * 第四步:对初始的RDD进行Transformation级别的处理,例如map、filter等高阶函数的编程,来进行具体的数据计算
44      * 第4.2步:在单词切分的基础上,对每个单词实例的计数为1,也就是word=>(word,1)
45      */
46     val pairs=words.map { word => (word,1) }
47     /**
48      * 第四步:对初始的RDD进行Transformation级别的处理,例如map、filter等高阶函数的编程,来进行具体的数据计算
49      * 第4.3步:在每个单词实例计数为1的基础之上统计每个单词在文件中出现的总次数
50      */
51     val wordCounts=pairs.reduceByKey(_+_)//对相同的Key,进行Value的累计(包括Local和Reducer级别同时Reduce)
52     wordCounts.collect.foreach(wordNumberPair=>println(wordNumberPair._1+" : "+wordNumberPair._2))
53     sc.stop()
54   }  
55 }
View Code

  (1)将你的程序打包到你的linux,运行Spark集群。具体操作为:File-->Project Structure-->Artifacts-->JAR-->From Moudle With Dependencies,注意此时要把和Spark与Scala相关的JAR去掉。

  (2)然后点击OK即可。

  注意:问为什么不能直接在IDEA中发到spark集群呢?

    1)、内存和cores的限制,默认值spark的driver会在提交spark的机器上,需要很强大的环境。

    2)、Driver要指挥workers工作,如果spark在生产环境下一定会通过写自动化shell脚本来提交程序的,如果与IDEA不在同一个网络下回出现任务丢失等问题。

    3)、安全性较差。

  (3)、通过打开spark后,执行

当神已无能为力,那便是魔渡众生
相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps&nbsp;
目录
相关文章
|
1月前
|
测试技术 网络安全
什么是软件测试? 软件测试都有什么岗位 ?软件测试和调试的区别? 软件测试和开发的区别? 一位优秀的测试人员应该具备哪些素质? 软件测试等相关概念入门篇
文章全面介绍了软件测试的基本概念、目的、岗位分类、与开发和调试的区别,并阐述了成为优秀测试人员应具备的素质和技能。
201 1
什么是软件测试? 软件测试都有什么岗位 ?软件测试和调试的区别? 软件测试和开发的区别? 一位优秀的测试人员应该具备哪些素质? 软件测试等相关概念入门篇
|
11天前
|
安全 测试技术 持续交付
云计算时代的软件开发与测试:高效、灵活、可扩展
云计算时代的软件开发与测试:高效、灵活、可扩展
|
1月前
|
人工智能 监控 测试技术
云应用开发平台测试
云应用开发平台测试
52 2
|
1月前
|
人工智能 Java 数据库连接
IDEA开发 常用代码规范插件 常用辅助类插件
IDEA开发 常用代码规范插件 常用辅助类插件
50 0
|
1月前
|
敏捷开发 测试技术
开发模型(瀑布、螺旋、scrum) 和 测试模型(V、W)、增量和迭代、敏捷(思想)及敏捷开发 scrum
文章详细介绍了软件开发过程中的不同开发模型(瀑布、螺旋、Scrum)和测试模型(V模型、W模型),以及增量和迭代的概念,最后阐述了敏捷思想及其在敏捷开发(如Scrum)中的应用。
74 0
开发模型(瀑布、螺旋、scrum) 和 测试模型(V、W)、增量和迭代、敏捷(思想)及敏捷开发 scrum
|
2月前
|
测试技术 持续交付 UED
软件测试的艺术与科学:平衡创新与质量的探索在软件开发的波澜壮阔中,软件测试如同灯塔,指引着产品质量的方向。本文旨在深入探讨软件测试的核心价值,通过分析其在现代软件工程中的应用,揭示其背后的艺术性与科学性,并探讨如何在追求技术创新的同时确保产品的高质量标准。
软件测试不仅仅是技术活动,它融合了创造力和方法论,是软件开发过程中不可或缺的一环。本文首先概述了软件测试的重要性及其在项目生命周期中的角色,随后详细讨论了测试用例设计的创新方法、自动化测试的策略与挑战,以及如何通过持续集成/持续部署(CI/CD)流程优化产品质量。最后,文章强调了团队间沟通在确保测试有效性中的关键作用,并通过案例分析展示了这些原则在实践中的应用。
78 1
|
2月前
|
测试技术 UED 开发者
软件测试的艺术:从代码审查到用户反馈的全景探索在软件开发的宇宙中,测试是那颗确保星系正常运转的暗物质。它或许不总是站在聚光灯下,但无疑是支撑整个系统稳定性与可靠性的基石。《软件测试的艺术:从代码审查到用户反馈的全景探索》一文,旨在揭开软件测试这一神秘面纱,通过深入浅出的方式,引领读者穿梭于测试的各个环节,从细微处着眼,至宏观视角俯瞰,全方位解析如何打造无懈可击的软件产品。
本文以“软件测试的艺术”为核心,创新性地将技术深度与通俗易懂的语言风格相结合,绘制了一幅从代码审查到用户反馈全过程的测试蓝图。不同于常规摘要的枯燥概述,这里更像是一段旅程的预告片,承诺带领读者经历一场从微观世界到宏观视野的探索之旅,揭示每一个测试环节背后的哲学与实践智慧,让即便是非专业人士也能领略到软件测试的魅力所在,并从中获取实用的启示。
|
5月前
|
Java 编译器 Maven
使用intellij idea搭建SSM架构的maven项目 详细
使用intellij idea搭建SSM架构的maven项目 详细
97 4
|
4月前
|
IDE Oracle Java
day4:JDK、IntelliJ IDEA的安装和环境变量配置
【7月更文挑战第4天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
223 0
|
4月前
|
网络协议 安全 Linux
在IntelliJ IDEA中使用固定公网地址远程SSH连接服务器环境进行开发
在IntelliJ IDEA中使用固定公网地址远程SSH连接服务器环境进行开发
106 2
下一篇
无影云桌面