Spark安装与入门使用

Spark是一个通用的大规模数据快速处理引擎,一个大数据分布式处理框架。Spark之所以能被迅速的应用到各种大数据处理场景下,与其为Batching processing,Streaming Processing,Ad-hoc Query等三大大数据处理问题提供了近乎完美的解决方案息息相关。在Spark中,使用Spark SQL,Spark Streaming,MLlib,Graphx很好的解决了上述提及的三大大数据处理核心问题。本文主要介绍spark单节点伪集群的安装与简单使用。

安装
1.JDK环境
Spark最初使用Scala开发,运行在Java虚拟机(JVM)上。需要安装jdk环境,本文的环境如下(jdk的安装在此不再累述):

# echo $JAVA_HOME 
/home/jdk1.8.0_121
# java -version
java version "1.8.0_121"
Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)

2.SSH服务以及免密码登录
对于单个节点的伪集群,需要确保ssh localhost 是成功的,否则,需要通过ssh-keygen创建相关的密钥。如下,可以创建口令为空的密钥:

ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa //生成口令为空的ssh密钥 
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys //将公钥加入已认证的密钥中

3.scala
scala的安装主要步骤是解压,配置环境变量,(安装包为scala-2.12.1.tgz,安装于home目录下)

# tar -zxvf  scala-2.12.1
# ln -sf scala-2.12.1 scala
# vim ~/.bash_profile 
    SCALA_HOME=/home/scala
    PATH=$PATH:$HOME/bin:/usr/local/bin:$SCALA_HOME/bin

    export PATH  SCALA_HOME
# source ~/.bash_profile
验证scala的安装
# scala
Welcome to Scala 2.12.1 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_121).
Type in expressions for evaluation. Or try :help.

scala> 9*9
res0: Int = 81

4.spark
尽管spark并不是必须依赖于Hadoop,但是结合Hadoop的分布式文件系统(HDFS)提供的海量存储,spark可以充分发挥其在大数据领域的处理的卓越性能。主要步骤:解压安装包,修改环境变量,修改spark配置。

# tar -zxvf  spark-2.2.0-bin-hadoop2.7.tgz
# ln -sf spark-2.2.0-bin-hadoop2.7 spark
# vim ~/.bash_profile 
    SPARK_HOME=/home/spark
    PATH=$PATH:$HOME/bin:/usr/local/bin:$SPARK_HOME/bin

    export PATH SPARK_HOME
# source ~/.bash_profile

配置spark

# pwd
    /home/spark/conf
# cp spark-env.sh.template spark-env.sh
# vim spark-env.sh
    export JAVA_HOME=/home/jdk1.8.0_121      #java安装目录
    export SCALA_HOME=/home/scala            #scala安装目录
    export SPARK_MASTER_IP=192.168.94.200    #master节点的IP
    export SPARK_MASTER_PORT=7077            #master服务端口,默认为7077
    export SCALA_MASTER_WEBUI_PORT=8080      #master节点对应web服务的端口,默认为8080
    export SPARK_WORKER_MEMORY=1g            #限制worker节点能够分配给executor的内存大小
    export HADOOP_CONF_DIR=/home/hadoop/etc/hadoop #hadoop集群配置文件路径

在spark主机列表中加入当前主机(当前主机名为master)

# cp slaves.template slaves
# echo $HOSTNAME
master
# vim slaves
master

使用
1.测试:使用spark计算HDFS上的数据
启动HDFS,并上传测试数据

# start-dfs.sh
Starting namenodes on [localhost]
localhost: starting namenode, logging to /home/hadoop-2.7.3/logs/hadoop-root-namenode-master.out
localhost: starting datanode, logging to /home/hadoop-2.7.3/logs/hadoop-root-datanode-master.out
Starting secondary namenodes [0.0.0.0]
0.0.0.0: starting secondarynamenode, logging to /home/hadoop-2.7.3/logs/hadoop-root-secondarynamenode-master.out
# jps
2993 NameNode
3121 DataNode
3396 Jps
3287 SecondaryNameNode 
# hadoop fs -mkdir -p /test
# hadoop fs -copyFromLocal /home/spark/README.md /test
# hadoop fs -ls  /test
Found 1 items
-rw-r--r--   1 root supergroup       3809 2017-09-11 21:06 /test/README.md

启动spark

# pwd
/home/spark/sbin
# ./start-all.sh //进入spark目录下执行该命令,因为Hadoop的bin目录下也有一个start-all.sh;如果直接执行start-all.sh,具体是执行spark中的还是hadoop中,取决于PATH变量中的位置#

使用spark的Python shell进行及时数据分析

# pwd
/home/spark/bin
# ./pyspark
Using Python version 2.7.3 (default, Mar  7 2016 10:43:13)
SparkSession available as 'spark'.
>>> lines = sc.textFile("/test/README.md")
>>> lines.count()
103
>>> lines.first()
u'# Apache Spark'
>>> 

对象sc是shell启动时自动创建的一个SparkContext对象,它包含了当前spark的环境变量。sc.textFile()从给定路径的文件中创建一个RDD(Resilient distributed dataset),其后分别调用RDD的行动操作count()和first()对数据进行分析。”/test/README.md”的完整路径为”hdfs://localhost:9000/test/README.md”,因为之前已经在spark-env.sh脚本中导出了hadoop的环境配置,故spark可以使用hdfs相对路径访问文件。

2.测试:使用spark shell计算本地磁盘上的数据
前面提及spark并不是绝对依赖于HDFS,spark也可以访问本地文件系统。在此停掉HDFS进程,并使用spark shell计算本地文件。

# ./stop-dfs.sh
# pwd
/home/spark/sbin
# ./stop-all.sh

修改spark-env.sh,注释掉HADOOP_CONF_DIR配置,再次使用Python shell进行数据分析。

# pwd
/home/spark/bin
# ./pyspark 
Using Python version 2.7.3 (default, Mar  7 2016 10:43:13)
SparkSession available as 'spark'.
>>> lines = sc.textFile("/home/spark/README.md")
>>> lines.count()
103
>>> lines.first()
u'# Apache Spark'
>>> 

你可能感兴趣的:(大数据,spark,安装,入门)