Spark详解(03) - Spark3.0.0运行环境安装

Spark运行模式

Spark常见部署模式:

Local模式:在本地部署单个Spark服务

所谓的Local模式,就是不需要其他任何节点资源就可以在本地执行Spark代码的环境,一般用于教学,调试,演示等。

在IDEA中运行代码的环境称之为开发环境,和Local模式还是有区别的。

Standalone模式:Spark自带的任务调度模式。(国内常用)

YARN模式:Spark使用Hadoop的YARN组件进行资源与任务调度。(国内常用)

Windows模式:为了方便在学习测试spark程序,Spark提供了可以在windows系统下启动本地集群的方式,这样,在不使用虚拟机或服务器的情况下,也能满足Spark的基本使用。

Mesos & K8S模式:(了解)。

Mesos是Apache下的开源分布式资源管理框架,它被称为是分布式系统的内核,在Twitter得到广泛使用,管理着Twitter超过30,0000台服务器上的应用部署,但是在国内,依然使用着传统的Hadoop大数据框架,所以国内使用Mesos框架的并不多,但是原理都差不多。

容器化部署是目前业界很流行的一项技术,基于Docker镜像运行能够让用户更加方便地对应用进行管理和运维。容器管理工具中最为流行的就是Kubernetes(k8s),而Spark也在最近的版本中支持了k8s部署模式。详情参考官网地址:https://spark.apache.org/docs/latest/running-on-kubernetes.html

Spark安装地址

官网地址:http://spark.apache.org/

文档查看地址:https://spark.apache.org/docs/3.0.0/

官网下载地址:https://spark.apache.org/downloads.html

镜像历史版本下载地址:https://archive.apache.org/dist/spark/

本文使用的版本下载地址:https://archive.apache.org/dist/spark/spark-3.0.0/spark-3.0.0-bin-hadoop3.2.tgz

Local模式安装(测试环境)

Local模式就是运行在一台计算机上的模式,通常就是用于测试环境。

安装

Local模式的安装非常简单,直接将安装包上传到服务器并解压即可使用,具体操作步骤如下

上传安装包park-3.0.0-bin-hadoop3.2.tgz到服务器

解压安装包

[root@hadoop102 software]# tar -zxvf spark-3.0.0-bin-hadoop3.2.tgz -C /opt/module/

[root@hadoop102 software]# cd /opt/module/

[root@hadoop102 module]# mv spark-3.0.0-bin-hadoop3.2/ spark-local

使用

官方求PI案例验证安装结果

[root@hadoop102 spark-local]# bin/spark-submit --class org.apache.spark.examples.SparkPi --master local[2] ./examples/jars/spark-examples_2.12-3.0.0.jar 10

运行结果展示

提交命令参数说明

--class:表示要执行程序的主类;

--master local[2]

(1)local: 没有指定线程数,则所有计算都运行在一个线程当中,没有任何并行计算

(2)local[K]:指定使用K个Core来运行计算,比如local[2]就是运行2个Core来执行

(3)local[*]:默认模式。自动按照CPU最多核来设置线程数。比如CPU有8核,Spark自动设置8个线程计算。

spark-examples_2.12-3.0.0.jar:要运行的程序jar包名称;

10:要运行程序的输入参数(这里表示计算圆周率π的次数,计算次数越多,准确率越高);

可以查看spark-submit所有参数:

[root@hadoop102 spark-local]# bin/spark-submit

官方WordCount案例

1)需求:读取多个输入文件,统计每个单词出现的总次数。

2)需求分析:

代码实现:

(1)准备文件

mkdir input

在input下创建2个文件1.txt和2.txt,并输入内容

echo "hello hadoop" >> 1.txt

echo "hello spark" >> 1.txt

echo "hello hadoop" >> 2.txt

echo "hello spark" >> 2.txt

(2)使用bin/spark-shell命令启动spark-shell

注意:sc是SparkCore程序的入口;spark是SparkSQL程序入口;master = local[*]表示本地模式运行。

Spark context Web UI available at http://192.168.194.102:4040

Spark context available as 'sc' (master = local[*], app id = local-1646410143774).

再开启一个hadoop102远程连接窗口,使用jps查看SparkSubmit进程

[root@hadoop102 ~]# jps

1370 Jps

1276 SparkSubmit

运行任务方式说明:

spark-submit,是将jar上传到集群,执行Spark任务;

spark-shell,相当于命令行工具,本身也是一个Application。

(3)登录hadoop102:4040,查看程序运行情况(注意:spark-shell窗口关闭掉,则hadoop102:4040页面关闭)

说明:本地模式下,默认的调度器为FIFO。

(5)运行WordCount程序

scala> sc.textFile("/opt/module/spark-local/input").flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).collect

res0: Array[(String, Int)] = Array((hello,4), (spark,2), (hadoop,2))

注意:只有collect开始执行时,才会加载数据。

登录hadoop102:4040查看程序运行结果

Standalone(独立)模式

Standalone模式(也称独立模式)是Spark自带的资源调动引擎,构建一个由Master + Slave构成的Spark集群,Spark运行在集群中。

这个要和Hadoop中的Standalone区别开来。这里的Standalone是指只用Spark来搭建一个集群,不需要借助Hadoop的Yarn和Mesos等其他框架。

安装

Hadoop102: Master, Worker

Hadoop103:Worker

Hadoop104:Worker

安装jdk环境

配置hosts文件

ssh免密登录

生成key

ssh-keygen

四个回车

将key拷贝到其他机器

ssh-copy-id hadoop102

ssh-copy-id hadoop103

ssh-copy-id hadoop104

关闭防火墙

[root@hadoop102 module]# tar -zxvf spark-3.0.0-bin-hadoop3.2.tgz -C /opt/module/

[root@hadoop102 module]# cd /opt/module/

[root@hadoop102 module]# mv spark-3.0.0-bin-hadoop3.2/ spark-standlone

[root@hadoop102 module]# cd spark-standlone/conf/

[root@hadoop102 conf]# mv slaves.template slaves

[root@hadoop102 conf]# vi slaves

清空原来内容,添加如下内容

hadoop102

hadoop103

hadoop104

[root@hadoop102 conf]# mv spark-env.sh.template spark-env.sh

[root@hadoop102 conf]# vi spark-env.sh

在文件末尾添加如下内容

SPARK_MASTER_HOST=hadoop102

SPARK_MASTER_PORT=7077

[root@hadoop102 spark-standlone]# cd ../

[root@hadoop102 spark-standlone]# vi /opt/module/spark-standlone/sbin/spark-config.sh

在文件末尾添加如下内容

export JAVA_HOME=export JAVA_HOME=/usr/local/jdk1.8.0_191

如果不配置JAVA_HOME环境变量,在执行sbin/start-all.sh命令启动spark集群的时候可能会出现JAVA_HOME is not set 异常

[root@hadoop102 conf]# cd /opt/module/

[root@hadoop102 module]# scp -r spark-standlone/ hadoop103:/opt/module/spark-standlone

[root@hadoop102 module]# scp -r spark-standlone/ hadoop104:/opt/module/spark-standlone

[root@hadoop102 module]# cd /opt/module/spark-standlone/

[root@hadoop102 spark-standlone]# sbin/start-all.sh

[root@hadoop102 spark-standlone]# jps

2128 Worker

2183 Jps

2059 Master

[root@hadoop103 module]# jps

1739 Worker

1788 Jps

[root@hadoop104 module]# jps

1669 Worker

1718 Jps

目前还看不到任何任务的执行信息。

Spark集群测试案例

[root@hadoop102 spark-standlone]# bin/spark-submit --class org.apache.spark.examples.SparkPi --master spark://hadoop102:7077 ./examples/jars/spark-examples_2.12-3.0.0.jar 10

参数:--master spark://hadoop102:7077指定要连接集群的master,如果不设置—master参数会默认使用本机,当远程提交spark任务时必须要制定该参数才能正确的找到spark集群

页面查看http://hadoop102:8080/,发现执行本次任务,默认采用三台服务器节点的总核数3核,每个节点内存1024M。

配置Executor可用内存为2G,使用CPU核数为2个

bin/spark-submit \

--class org.apache.spark.examples.SparkPi \

--master spark://hadoop102:7077 \

--executor-memory 2G \

--total-executor-cores 2 \

./examples/jars/spark-examples_2.12-3.0.0.jar \

10

Spark任务提交设置参数的基本语法

bin/spark-submit \

--class <main-class>

--master <master-url> \

... # other options

<application-jar> \

[application-arguments]

相关参数说明

参数

解释

可选值举例

--class

Spark程序中包含主函数的类

 

--master

Spark程序运行的模式

本地模式:local[*]、spark://hadoop102:7077、

Yarn

--executor-memory 1G

指定每个executor可用内存为1G

符合集群内存配置即可,具体情况具体分析。

--total-executor-cores 2

指定所有executor使用的cpu核数为2个

application-jar

打包好的应用jar,包含依赖。这个URL在集群中全局可见。
比如hdfs:// 共享存储系统,如果是file:// path,那么所有的节点的path都包含同样的jar

application-arguments

传给main()方法的参数

配置历史服务

由于spark-shell停止掉后,hadoop102:4040页面就看不到历史任务的运行情况,所以开发时都配置历史服务器记录任务运行情况。

1)修改spark-default.conf.template名称

cd spark-standlone/conf

mv spark-defaults.conf.template spark-defaults.conf

2)修改spark-default.conf文件,配置日志存储路径(写),并同步到其他服务器上

vi spark-defaults.conf

修改一下内容

spark.eventLog.enabled true

spark.eventLog.dir hdfs://hadoop102:8020/directory

将修改后的文件同步到其他服务上

xsync spark-defaults.conf

3)修改spark-env.sh文件,:

vi spark-env.sh

添加如下配置

export SPARK_HISTORY_OPTS="

-Dspark.history.ui.port=18080

-Dspark.history.fs.logDirectory=hdfs://hadoop102:8020/directory

-Dspark.history.retainedApplications=30"

# 参数1 Dspark.history.ui.port:WEBUI访问的端口号为18080

# 参数2 Dspark.history.fs.logDirectory:指定历史服务器日志存储路径(读)

# 参数3 Dspark.history.retainedApplications:指定保存Application历史记录的个数,如果超过这个值,旧的应用程序信息将被删除,这个是内存中的应用数,而不是页面上显示的应用数。

4)同步配置文件

xsync spark-env.sh

启动Hadoop集群,并在HDFS上创建/directory目录。

sbin/start-dfs.sh

hadoop fs -mkdir /directory

5)启动历史服务

sbin/start-history-server.sh

6)再次执行任务

bin/spark-submit \

--class org.apache.spark.examples.SparkPi \

--master spark://hadoop102:7077 \

--executor-memory 1G \

--total-executor-cores 2 \

./examples/jars/spark-examples_2.12-3.0.0.jar \

10

7)查看Spark历史服务地址:hadoop102:18080

配置高可用(HA)

停止集群

sbin/stop-all.sh

安装Zookeeper集群并启动:《Zookeeper详解(02) - zookeeper安装部署-单机模式-集群模式》

zk.sh start

修改spark-env.sh文件添加如下配置:

vi spark-env.sh

#注释掉如下内容:

#SPARK_MASTER_HOST=hadoop102

#SPARK_MASTER_PORT=7077

#添加如下内容。配置由Zookeeper管理Master

export SPARK_DAEMON_JAVA_OPTS="

-Dspark.deploy.recoveryMode=ZOOKEEPER

-Dspark.deploy.zookeeper.url=hadoop102,hadoop103,hadoop104

-Dspark.deploy.zookeeper.dir=/spark"

#添加如下代码

#Zookeeper3.5的AdminServer默认端口是8080,和Spark的WebUI冲突

export SPARK_MASTER_WEBUI_PORT=8989

在Zookeeper节点中自动创建/spark目录,用于管理:

同步配置文件

xsync spark-env.sh

在hadoop102上启动spark的全部节点

sbin/start-all.sh

在hadoop103上单独启动master节点

sbin/start-master.sh

再启动一个hadoop102窗口,将/opt/module/spark-local/input中的测试数据上传到hadoop集群的/input目录

hadoop fs -put /opt/module/spark-local/input/ /input

Spark HA集群访问

bin/spark-shell \

--master spark://hadoop102:7077,hadoop103:7077 \

--executor-memory 2g \

--total-executor-cores 2

参数:--master spark://hadoop102:7077指定要连接的集群的master

执行WordCount程序

scala>sc.textFile("hdfs://hadoop102:8020/input").flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).collect

res0: Array[(String, Int)] = Array((hadoop,6), (oozie,3), (spark,3), (hive,3), (atguigu,3), (hbase,6))

使用jps命令查看hadoop102的master进程

5506 Worker

5394 Master

5731 SparkSubmit

4869 QuorumPeerMain

5991 Jps

5831 CoarseGrainedExecutorBackend

Kill掉hadoop102的master进程,页面中观察http://hadoop103:8080/的状态是否切换为active。

kill -9 5394

再启动hadoop102的master进程

sbin/start-master.sh

运行模式

Spark有standalone-client(客户端模式)和standalone-cluster(集群模式)两种模式,主要区别在于:Driver程序的运行节点。

bin/spark-submit \

--class org.apache.spark.examples.SparkPi \

--master spark://hadoop102:7077 \

--executor-memory 2G \

--total-executor-cores 1 \

--deploy-mode client \

./examples/jars/spark-examples_2.12-3.0.0.jar \

10

--deploy-mode client,表示Driver程序运行在本地客户端

bin/spark-submit \

--class org.apache.spark.examples.SparkPi \

--master spark://hadoop102:7077 \

--executor-memory 2G \

--total-executor-cores 1 \

--deploy-mode cluster \

./examples/jars/spark-examples_2.12-3.0.0.jar \

10

--deploy-mode cluster,表示Driver程序运行在集群

client用于测试,因为该模式的Driver运行在本地客户端,会与yarn集群产生较大的网络通信,从而导致网卡流量激增;它的好处在于直接执行时,在本地可以查看到所有的log,方便调试;

cluster用于生产环境,因为Driver运行在NodeManager,相当于一个ApplicationMaster,没有网卡流量激增的问题;缺点在于调试不方便,本地用spark-submit提交后,看不到log,只能通过yarn application_id这种命令来查看,由于应用的运行结果不能在客户端显示,所以最好将那些将结果保存在外部存储介质(如HDFS、Redis、Mysql)而非stdout输出的应用程序,客户端的终端显示的仅是job的简单运行状况。

由于cluster模式,客户端的终端显示的仅是简单运行状况,无法像client模式将所有的日志信息都显示到客户端的终端上,若要查看cluster模式下的运行日志信息,只能够通过如下方式进行查看

http://192.168.194.102:8080/页面点击Completed Drivers里面的Worker

跳转到Spark Worker页面,点击Finished Drivers中Logs下面的stdout

最终日志的打印结果如下

注意:在测试Standalone模式,cluster运行流程的时候,阿里云用户访问不到Worker,因为Worker是从Master内部跳转的,这是正常的,实际工作中我们不可能通过客户端访问的,这些端口对外都会禁用,需要的时候会通过授权到Master访问Worker

Spark ON Yarn模式(重点)

Spark客户端直接连接Yarn,不需要额外构建Spark集群。

安装

[hadoop@hadoop102 software]$ tar -zxvf spark-3.0.0-bin-hadoop3.2.tgz -C /opt/module/

[hadoop@hadoop102 software]$ cd /opt/module/

[hadoop@hadoop102 module]$ mv spark-3.0.0-bin-hadoop3.2/ spark-yarn

如果使用的环境是虚拟机且内存较少,为防止执行过程进行被意外杀死,做如下配置

若是在生产环境或内存充足的情况下,则可以不添加该配置

vi yarn-site.xml

添加如下内容

<!--是否启动一个线程检查每个任务正使用的物理内存量,如果任务超出分配值,则直接将其杀掉,默认是true -->

<property>

<name>yarn.nodemanager.pmem-check-enabled</name>

<value>false</value>

</property>

<!--是否启动一个线程检查每个任务正使用的虚拟内存量,如果任务超出分配值,则直接将其杀掉,默认是true -->

<property>

<name>yarn.nodemanager.vmem-check-enabled</name>

<value>false</value>

</property>

分发配置文件

xsync /opt/module/hadoop-3.1.3/etc/hadoop/yarn-site.xml

[hadoop@hadoop102 conf]$ mv spark-env.sh.template spark-env.sh

[hadoop@hadoop102 conf]$ vi spark-env.sh

在文件末尾添加YARN_CONF_DIR配置,保证后续运行任务的路径都变成集群路径

YARN_CONF_DIR=/opt/module/hadoop-3.1.3/etc/hadoop

[hadoop@hadoop102 spark-yarn]$ bin/spark-submit --class org.apache.spark.examples.SparkPi --master yarn ./examples/jars/spark-examples_2.12-3.0.0.jar 10

参数:--master yarn,表示Yarn方式运行;--deploy-mod表示客户端方式运行程序

如果运行的时候,抛出如下异常ClassNotFoundException:com.sun.jersey.api.client.config.ClientConfig

-原因分析:Spark2中jersey版本是2.22,但是yarn中还需要依赖1.9,版本不兼容

-解决方式:在yarn-site.xml中,添加

<property>

<name>yarn.timeline-service.enabled</name>

<value>false</value>

</property>

9)查看http://192.168.194.102:8088/页面,点击History,查看历史页面

spark-shell --master yarn --deploy-mode client

配置历史服务

为了查看spark程序的历史运行情况,需要配置一下历史服务器。

[hadoop@hadoop102 conf]$ mv spark-defaults.conf.template spark-defaults.conf

[hadoop@hadoop102 conf]$ vi spark-defaults.conf

在文件末尾添加如下内容

spark.eventLog.enabled true

spark.eventLog.dir hdfs://hadoop102:9820/directory

[hadoop@hadoop102 conf]$ vi spark-env.sh

在文件末尾添加如下内容

export SPARK_HISTORY_OPTS="

-Dspark.history.ui.port=18080

-Dspark.history.fs.logDirectory=hdfs://hadoop102:9820/directory

-Dspark.history.retainedApplications=30"

# 参数1含义:WEBUI访问的端口号为18080

# 参数2含义:指定历史服务器日志存储路径

# 参数3含义:指定保存Application历史记录的个数,如果超过这个值,旧的应用程序信息将被删除,这个是内存中的应用数,而不是页面上显示的应用数。

hadoop@hadoop102 conf]$ vi spark-defaults.conf

在文件末尾添加如下内容

spark.yarn.historyServer.address=hadoop102:18080

spark.history.ui.port=18080

[hadoop@hadoop102 conf]$ hadoop fs -mkdir /directory

启动Spark历史服务

[hadoop@hadoop102 spark-yarn]$ sbin/start-history-server.sh

停止命令:sbin/stop-history-server.sh

提交任务到Yarn执行

bin/spark-submit \

--class org.apache.spark.examples.SparkPi \

--master yarn \

./examples/jars/spark-examples_2.12-3.0.0.jar \

10

Web页面查看日志:http://hadoop102:8088/cluster

待spark任务执行成功后点击"history"跳转到http://hadoop102:18080/

Spark ON Yarn运行模式

Spark有yarn-client(客户端模式)和yarn-cluster(集群模式)两种模式,主要区别在于:Driver程序的运行节点。

yarn-client:Driver程序运行在客户端,适用于交互、调试,希望立即看到spark程序的输出结果。

yarn-cluster:Driver程序运行在由ResourceManager启动的APPMaster适用于生产环境。


集群模式下查看Spark任务输出日志的方式

查看http://hadoop103:8088/cluster页面,点击History按钮,跳转到历史详情页面

在http://hadoop102:18080点击Executors->点击driver中的stdout

注意:如果在yarn日志端无法查看到具体的日志,则需要配置并启动Yarn历史服务器,具体配置流程请参考文章《Hadoop详解(02)Hadoop集群运行环境搭建》--配置历史服务器(可选)章节

Windows模式(开发环境)

在自己学习时,每次都需要启动虚拟机,启动集群,这是一个比较繁琐的过程,并且会占大量的电脑系统资源,导致系统执行变慢,不仅仅影响学习效果,也影响学习进度,Spark地提供了可以在windows系统下启动本地集群的方式,这样,在不使用虚拟机的情况下,也能使用Spark的基本功能。

将文件spark-3.0.0-bin-hadoop3.2.tgz解压缩到无中文无空格的任意路径下

双击执行解压缩文件路径下bin目录中的spark-shell.cmd文件,启动Spark本地环境

创建D:/input/word.txt文件并在文件中添加内容, 在命令行中输入脚本代码

scala> sc.textFile("D:/input/word.txt").flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).collect

res0: Array[(String, Int)] = Array((hello,2), (spark,1), (hadoop,1))

如果出现如下错误

Exception in thread "Thread-16" java.io.FileNotFoundException: C:\Users\Administrator\.scala_history (拒绝访问。)

则需要在启动spark-shell.cmd脚本的时候使用以管理员身份运行

在spark安装目录的bin目录下,按Shift右键空白处,选择 在此处打开Powershell窗口

在DOS命令行窗口中执行提交指令

在打开的DOS命令行窗口中执行提交命令

PS D:\ruanjian\spark-3.0.0-bin-hadoop3.2\bin> ./spark-submit --class org.apache.spark.examples.SparkPi --master local[2] ../examples/jars/spark-examples_2.12-3.0.0.jar 10

Mesos & K8S模式(了解)

Mesos是Apache下的开源分布式资源管理框架,它被称为是分布式系统的内核,在Twitter得到广泛使用,管理着Twitter超过30,0000台服务器上的应用部署,但是在国内使用Mesos框架的并不多,原理其实都差不多,使用Spark客户端直接连接Mesos,不需要额外构建Spark集群。

容器化部署是目前业界很流行的一项技术,基于Docker镜像运行能够让用户更加方便地对应用进行管理和运维。容器管理工具中最为流行的就是Kubernetes(k8s),而Spark也在最近的版本中支持了k8s部署模式。官方使用文档地址:https://spark.apache.org/docs/latest/running-on-kubernetes.html

几种部署模式对比

模式

Spark安装机器数

需启动的进程

所属者

Local

1

Spark

Standalone

3

Master及Worker

Spark

Yarn

1

Yarn及HDFS

Hadoop

端口号总结

1)Spark查看当前Spark-shell运行任务情况端口号:4040

2)Spark Master内部通信服务端口号:7077    (类比于Hadoop的9820端口)

3)Spark Standalone模式Master Web端口号:8080(类比于Hadoop YARN任务运行情况查看端口号:8088)

4)Spark历史服务器端口号:18080(类比于Hadoop历史服务器端口号:19888)

其他常用端口汇总

50070:HDFSwebUI的端口号

8485:journalnode默认的端口号

9000:非高可用访问数rpc端口

8020:高可用访问数据rpc

8088:yarn的webUI的端口号

8080:master的webUI,Tomcat的端口号

7077:spark基于standalone的提交任务的端口号

8081:worker的webUI的端口号

18080:historyServer的webUI的端口号

4040:application的webUI的端口号

2181:zookeeper的rpc端口号

9083:hive的metastore的端口号

60010:Hbase的webUI的端口号

6379:Redis的端口号

8080:sparkwebUI的端口号

9092:kafka broker的端口

Spark详解(03) - Spark3.0.0运行环境安装的更多相关文章

  1. RocketMQ详解(三)启动运行原理

    专题目录 RocketMQ详解(一)原理概览 RocketMQ详解(二)安装使用详解 RocketMQ详解(三)启动运行原理 RocketMQ详解(四)核心设计原理 RocketMQ详解(五)总结提高 ...

  2. Tsung运行环境安装(转)

    转自:http://www.cnblogs.com/tsbc/p/4272974.html#_Toc372013359 tsung Tsung运行环境安装 检查安装一下依赖包,以免在安装的时候报错.( ...

  3. AppCrawler自动化遍历使用详解(版本2.1.0 )

    AppCrawle是自动遍历的app爬虫工具,最大的特点是灵活性,实现:对整个APP的所有可点击元素进行遍历点击.   优点: 1.支持android和iOS, 支持真机和模拟器 2.可通过配置来设定 ...

  4. AppCrawler自动化遍历使用详解(版本2.1.0 )(转)

    AppCrawle是自动遍历的app爬虫工具,最大的特点是灵活性,实现:对整个APP的所有可点击元素进行遍历点击.   优点: 1.支持android和iOS, 支持真机和模拟器 2.可通过配置来设定 ...

  5. 详解 Vue 2.4.0 带来的 4 个重大变化

    在这篇文章中,我将跟大家分享4个有突破性新特性. 服务端渲染异步组件 包裹组件内实现属性继承 异步组件支持webpack3 组件渲染后可保留HTML注释 1.服务端渲染异步组件 在vue2.4.0以前 ...

  6. Spark详解

    原文连接 http://xiguada.org/spark/ Spark概述 当前,MapReduce编程模型已经成为主流的分布式编程模型,它极大地方便了编程人员在不会分布式并行编程的情况下,将自己的 ...

  7. PayPal 开发详解(七):运行REST API SAMPLE

    1.编译成功,修改配置文件 sdk_config.properties ,使用我们申请的测试帐号执行收款测试,clientId 和 clientSecret 参见 PayPal 开发详解(五) 2.将 ...

  8. rest_framework之频率详解 03

    访问频率(节流) 1.某个用户一分钟之内访问的次数不能超过3次,超过3次则不能访问了,需要等待,过段时间才能再访问. 2.自定义访问频率.两个方法都必须写上. 登入页面的视图加上访问频率 3.返回值F ...

  9. spark——详解rdd常用的转化和行动操作

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是spark第三篇文章,我们继续来看RDD的一些操作. 我们前文说道在spark当中RDD的操作可以分为两种,一种是转化操作(trans ...

  10. nexus3.14.0版本linux环境安装、启动、搭建私库

    本文介绍的是nexus3.14.0版本在linux环境下安装.启动.搭建私库. nexus3以上的版本太新了,网上很少介绍安装细节的.据了解和2.X版本有所不同了. 1.前提 linux机器上需先安装 ...

随机推荐

  1. GitHub 供应链安全已支持 Dart 开发者生态

    通过 Dart 和 GitHub 团队的共同努力,自 10 月 7 日起,GitHub 的 Advisory Database (安全咨询数据库).Dependency Graph (依赖项关系图) ...

  2. Linux自动切换用户

    Linux自动切换用户 一.创建sh文件 touch su_user.sh 二.下载脚本 yum install -y expect 三.脚本内容 #!/bin/bash# This is our f ...

  3. SpringBoot(七) - Redis 缓存

    1.五大基本数据类型和操作 1.1 字符串-string 命令 说明 set key value 如果key还没有,那就可以添加,如果key已经存在了,那会覆盖原有key的值 get key 如果ke ...

  4. [WPF] 抄抄超强的苹果官网滚动文字特效实现

    1. 前言 今天 ChokCoco 大佬发布了一篇博客 超强的苹果官网滚动文字特效实现,iPhone 我是买不起的,但不妨碍我对抄特效感兴趣,正好我这周安排的工作已经完成了,于是有空练练手实现了一个 ...

  5. 5.@pytest.mark.parametrize()数据驱动

    简介: pytest.mark.parametrize 是 pytest 的内置装饰器,它允许你在 function 或者 class 上定义多组参数和 fixture 来实现数据驱动. @pytes ...

  6. SpringCloud怎么迈向云原生?

    很多公司由于历史原因,都会有自研的RPC框架. 尤其是在2015-2017期间,Spring Cloud刚刚面世,Dubbo停止维护多年,很多公司在设计自己的RPC框架时,都会基于Spring Clo ...

  7. 题解 CF630L Cracking the Code

    前言 为什么没有人暴力快速幂啊,Ta不香嘛/kel 题意 设读入为 \(abcde\) ,求 \(acedb^5\mod{10^5}\) 的结果. \(\sf {Solution}\) 显然暴力啊. ...

  8. 万字详解JVM,让你一文吃透

    摘要:本文将带大家详细地了解关于JVM的一些知识点. 本文分享自华为云社区<[JVM]关于JVM,你需要掌握这些 | 一文彻底吃透JVM系列>,作者: 冰 河 . JDK 是什么? JDK ...

  9. (线段树) P4588 数学计算

    小豆现在有一个数 x,初始值为 1.小豆有 QQ 次操作,操作有两种类型: 1 m:将 x变为 x × m,并输出 x mod M 2 pos:将 x 变为 x 除以第 pos次操作所乘的数(保证第  ...

  10. Graceful Java之try...catch()

    [优美的Java代码之try...catch] 目录 概述 优化 优化前写法(JDK1.7之前) 优化后写法(JDK1.7及以后) 延伸阅读:嵌套的文件流如何正确的关闭 概述 通常我们使用try... ...