spark(一)

1.spark

spark是一种基于内存的快速、通用、可拓展的大数据分析引擎。

速度: 比hadoop 100x,磁盘计算快10x
使用:    java / Scala /R /python,提供80+算子(操作符),容易构建并行应用。
通用:    组合SQL ,流计算 + 复杂分析。

2.Spark模块

Spark core              //核心模块
Spark SQL              //SQL
Spark Streaming    //流计算
Spark MLlib            //机器学习
Spark graph           //图计算

3.Spark安装(local)

(我们使用之前搭建好的hadoop集群环境)

(1)下载spark-2.1.0-bin-hadoop2.7.tgz,上传。
        ..
(2)解压spark-2.1.0-bin-hadoop2.7.tgz,并拷贝到安装软件的目录下。
        ..
(3)配置环境变量
        sudo vi /etc/profile

        加入以下配置:
        SPARK_HOME=/soft/spark
        PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
        
        使环境变量立即生效
        source /etc/profile

(4)验证spark
        cd /soft/spark
        ./spark-shell

(5)通过webui查看
        http://192.168.231.201:4040/

4.使用spark的API实现单词统计

(1)

进入spark-shell

val rdd1 = sc.textFile("/home/gao/hello.txt")    //加载文件
val rdd2 = rdd1.flatMap(line=>line.split(" "))    //切割,压扁
val rdd3 = rdd2.map(word = > (word,1))        //变换成map对偶(word是高阶函数,“word变成(word,1)形式”)
val rdd4 = rdd3.reduceByKey(_ + _)        //聚合
rdd4.collect                    //查看
 

简写:

sc.textFile("/home/gao/hello.txt").flatMap(_.split(" ")).map((_,1)).reduceByKey(_ + _).collect

(2)使用idea编写scala程序实现单词统计

(a)创建maven工程,导入spark核心



    4.0.0

    groupId
    spark_demo
    1.0-SNAPSHOT

    
        
            org.apache.spark
            spark-core_2.11
            2.1.1
        
    

    

(b)编写scala代码

package com.gao.spark_demo

import org.apache.spark.{SparkConf, SparkContext}

object WordCount {

  def main(args: Array[String]): Unit = {

    //spark配置对象,设置Spark应用各种参数,kv形式
    val conf = new SparkConf();
    conf.setAppName("WordCount")
    conf.setMaster("local");

    //创建spark上下文对象(通过SparkConf()创建)
    val sc = new SparkContext(conf);
    //加载文件
    val rdd1 = sc.textFile("f:/hello.txt");
    //按行切割,压扁
    val rdd2 = rdd1.flatMap(line => line.split(" "));
    //单词映射成对偶(元组)形式(w => (w,1))
    val rdd3 = rdd2.map((_,1))
    //聚合所有对偶(元组)
    val rdd4 = rdd3.reduceByKey(_+_);
    //统计,返回数组形式
    val result = rdd4.collect()
    //输出
    result.foreach(println)

  }

}

(3)使用java实现spark单词统计

package com.gao.spark_demo;

import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaPairRDD;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.api.java.function.FlatMapFunction;
import org.apache.spark.api.java.function.Function2;
import org.apache.spark.api.java.function.PairFunction;
import scala.Tuple2;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
 * Java版Spark单词统计程序
 */
public class WordCount2 {
    public static void main(String[] args) {
        //创建SparkConf对象
        SparkConf conf = new SparkConf();
        conf.setAppName("WordCount2");
        //设置master属性
        conf.setMaster("local");
        //创建spark上下文对象
        JavaSparkContext sc = new JavaSparkContext(conf);
        //加载文件
        JavaRDD rdd1 = sc.textFile("f:/hello.txt");
        //使用匿名内部类迭代实现切割、压扁
        JavaRDD rdd2 = rdd1.flatMap(new FlatMapFunction() {
            public Iterator call(String s) throws Exception {
                List list = new ArrayList();
                String[] arr = s.split(" ");
                for(String ss : arr){
                    list.add(ss) ;
                }
                return list.iterator() ;
            }
        });
        //映射(使用匿名内部类)
        JavaPairRDD rdd3 = rdd2.mapToPair(new PairFunction() {
            //返回二元元组
            public Tuple2 call(String s) throws Exception {
                return new Tuple2(s,1);
            }
        });
        //聚合(使用匿名内部类)
        JavaPairRDD rdd4 = rdd3.reduceByKey(new Function2() {
            public Integer call(Integer v1, Integer v2) throws Exception {
                return v1 + v2;
            }
        });
        //收集,打印输出
        for(Object o : rdd4.collect()){
            System.out.println(o);
        }
    }
}

5.spark集群安装部署(standalone)

(1)复制spark安装包到其他主机

(2)配置环境变量
        sudo vi /etc/profile

        加入以下配置:
        SPARK_HOME=/soft/spark
        PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
        
        使环境变量立即生效
        source /etc/profile

(3)修改配置文件名称

        mv slaves.template slaves

        mv spark-env.sh.template spark-env.sh

(4)修改slave文件,添加work节点
            192.168.231.201
            192.168.231.202
            192.168.231.203

(5)配置spark-env.sh文件
            SPARK_MASTER_HOST=192.168.231.200
            SPARK_MASTER_PORT=7077

(6)启动spark集群
            进入sbin目录下,./start-all.sh

(7)通过webui查看

            http://192.168.231.200:8080

6.启动、停止spark

cd /soft/spark/sbin
./stop-all.sh                     //停掉整个spark集群.
./start-master.sh             //停掉整个spark集群.
./start-master.sh             //启动master节点
./start-slaves.sh             //启动所有worker节点

你可能感兴趣的:(spark,spark,大数据)