1G内存云服务器(CentOS6.9)也能跑起Spark2

环境

CentOS release 6.9 (Final)
java 1.8.0-openjdk.x86_64
scala 2.12.6
spark 2.3.1

      • 1. 准备服务器
      • 2. 创建swap memory
      • 3. 持久化swap memory
      • 4. 安装java 1.8
      • 5. 安装Scala 2.6.1
      • 6. 安装Spark 2.3.1
      • 7. 运行 spark
      • 8. 运行效率

最近有朋友想学spark,却抱怨运行spark对硬件要求太高。今天将当年做过的配置找出来整理成文,希望对有类似需要的朋友有所帮助。

1. 准备服务器

可选择:
- 1G 内存 1CPU核的国外云服务器 一个月5美金,比如Linode,用多久付多少,按小时记。
- 阿里云的促销有过30美金一年的1G服务器
- 跑个Oracle VirtualBox 虚拟机,不花钱

服务器上运行Centos 6.9, 登录root

2. 创建swap memory

查看内存

free -h
swapon -s

1G内存云服务器(CentOS6.9)也能跑起Spark2_第1张图片

Swap 默认一般是0, 所以需要创建Swap memory

dd if=/dev/zero of=/swapfile bs=1024 count=5120k    #about 5G

mkswap /swapfile
swapon /swapfile

再查看内存,出现了5G Swap
1G内存云服务器(CentOS6.9)也能跑起Spark2_第2张图片

3. 持久化swap memory

#如果没有vim: yum install -y vim 
vim /etc/fstab 

添加一行:

/swapfile          swap            swap    defaults        0 0      # for centos 6

修改swap文件权限

chmod 600 /swapfile

4. 安装java 1.8

yum install -y java-1.8.0-openjdk.x86_64

查看版本

java -version

这里写图片描述

5. 安装Scala 2.6.1

# 如果没有wget, 需要先安装: 
# yum install wget
wget https://downloads.lightbend.com/scala/2.12.6/scala-2.12.6.tgz

# 如果没有gunzip, 需要先安装:
# yum install unzip
gunzip -c scala-2.12.6.tgz|tar xvf -

mv scala-2.12.6 /opt
export PATH=$PATH:/opt/scala-2.12.6/bin

查看版本

scala -version

1G内存云服务器(CentOS6.9)也能跑起Spark2_第3张图片

6. 安装Spark 2.3.1

wget http://www-us.apache.org/dist/spark/spark-2.3.1/spark-2.3.1-bin-hadoop2.7.tgz

gunzip -c spark-2.3.1-bin-hadoop2.7.tgz |tar xvf -

mv spark-2.3.1-bin-hadoop2.7 /opt
export PATH=$PATH:/opt/spark-2.3.1-bin-hadoop2.7/bin

7. 运行 spark

spark-shell

或带内存参数

spark-shell --driver-memory 5G

Troubleshooting:

java.net.UnknownHostException: quantspace: quantspace: Name or service not known

1G内存云服务器(CentOS6.9)也能跑起Spark2_第4张图片

原因: 不能解释hostname: quantspace

这里写图片描述

解决方法:将quantspace加入 /etc/hosts 文件

这里写图片描述

重新运行spark-shell,一切正常

1G内存云服务器(CentOS6.9)也能跑起Spark2_第5张图片

8. 运行效率

大家知道,Spark取代MapReduce成为分布式大数据分析的主流,是因为它的速度快,而速度快的根本原因是因为Spark基于内存,避免了大量的IO操作,从而显著提升了运行效率。所以内存对于Spark是非常重要的。为了让Spark在有限的内存资源下运行起来,我们采用了增加Swap的办法,但在真正处理大量数据的时候,这并不能达到使用物理内存所拥有的速度。

举个例子,我们对澳美货币对过去十多年生成分钟级别的特征数据,大约5百万条记录,每条记录大概有300个特征,存成csv文件。从Spark中读取,并生成dataframe。

val csv=spark.read.csv("audusd_feature_1.csv")  // dataframe

val csv=spark.read.format("csv").load("audusd_feature_1.csv")

接下来

csv.describe()

这个运算在1G内存服务器上需要20分钟,而在200G内存服务器上只需要2分钟。

你可能感兴趣的:(spark)