Spark版本: 1.4.5
Hadoop版本:2.7.6
Spark是啥?
- Spark是专为大规模数据处理而设计的快速通用的计算引擎。
- Spark是加州大学伯克利分校的AMP实验室所开源的类Hadoop MapReduce的通用并行框架
- Spark,拥有Hadoop MapReduce的优点;但是不同于MapReduce的是——Job中间输出结果可以保存在内存中,Spark不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的MapReduce的算法。
Spark有啥特点?
- 快:spark与Hadoop的MapReduce相比,Spark基于内存的运算要快很多.
- 易用:Spark支持Java、Python和Scala的API,还支持超过80种高级算法.
- 通用:Spark 提供了大量的类库,可以把这些类库无缝的柔和在一个 App 中。减少了开发和维护的人力成本以及部署平台的物力成本.
- 兼容性:Spark可以非常方便地与其他的开源产品进行融合。例如,Spark可以使用Hadoop的YARN和Apache Mesos作为它的资源管理和调度器,并且可以处理所有Hadoop支持的数据,包括HDFS、HBase和Cassandra等等。
说了这么多接下来该说说怎么安装了
注:这里需要JDK可以参考以下文章
CentOS7安装JDK
Spark的安装
解压
[root@master ~]# tar xvf /home/package/spark-2.4.5-bin-hadoop2.7.tgz -C /usr/local/src/
#改名
[root@master ~]# mv /usr/local/src/spark-2.4.5-bin-hadoop2.7/ /usr/local/src/spark-2.4.5/
配置环境变量配置三台节点
配置如下
[root@master spark-2.4.5]# vim /etc/profile
export SPARK_HOME=/usr/local/src/spark-2.4.5/
export HADOOP_CONF_DIR=/usr/local/src/hadoop-2.7.6/etc/hadoop/
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$SPARK_HOME/bin:$SPARK_HOME/sbin:
#改完之后不要忘记了刷新
[root@salve1 ~]# source /etc/profile
#其他两台节点像这样配置即可
#因为刚刚添加了spark的环境变量sbin 跟hadoop的strat-all.sh冲突了
#没有安装Hadoop的朋友就不用管
#这里改下那个名字
[root@master spark-2.4.5]# mv sbin/start-all.sh sbin/spark-all.sh
Spark配置
#进入到安装目录
[root@master ~]# cd /usr/local/src/spark-2.4.5/
#把配置文件重命名
[root@master spark-2.4.5]# mv conf/slaves.template conf/slaves
[root@master spark-2.4.5]# mv conf/spark-env.sh.template conf/spark-env.sh
[root@master spark-2.4.5]# vim conf/spark-env.sh
#追加配置如下:
export JAVA_HOME=/usr/local/src/jdk1.8.0_152/
SPARK_MASTER_HOST=hadoop01
SPARK_MASTER_PORT=7077
[root@master spark-2.4.5]# vim conf/slaves
#把localhost删除后 追加如下配置
master
salve1
salve2
远程拷贝到从节点
[root@master spark-2.4.5]# scp -r /usr/local/src/spark-2.4.5/ salve1:/usr/local/src/
[root@master spark-2.4.5]# scp -r /usr/local/src/spark-2.4.5/ salve2:/usr/local/src/
启动
[root@master ~]# spark-all.sh
接下来需要用下Hadoop
具体部署可以参考以下博客
spark-shell简单操作
[root@master ~]# spark-shell --master spark://master:7077
scala> sc.parallelize(List(2,3,4).map(_*1000)).collect()
res0: Array[Int] = Array(2000, 3000, 4000)
scala> sc.parallelize(List(1,2,4,5,6)).map(_*100).count()
res1: Long = 5
scala> sc.textFile("hdfs://salve1:9000/red.txt").flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).collect()
#保存到hdfs
sc.textFile("hdfs://salve1:9000/red.txt").flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).saveAsTextFile("hdfs://salve1:9000/out/03")
sc.textFile("hdfs://salve1:9000/red.txt").flatMap(x=>x.split(" ")).map(y=>(y,1)).reduceByKey((a,b)=>a+b).collect()