idea-spark编程worldcount,hadoop同spark集成,搭建spark集群(forty-seven day third)

 1.创建新模块并添加maven依赖
        
                          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
            4.0.0

            com.oldboy
            myspark
            1.0-SNAPSHOT

            
                
                    org.apache.spark
                    spark-core_2.11
                    2.1.0
                

            

        

java版 wordcount
        package com.oldboy.bigdata.spark.java;

        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 scala.actors.threadpool.Arrays;

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

        /**
         * java版单词统计
         */
        public class WordcountJava {
            public static void main(String[] args) {
                SparkConf conf = new SparkConf();
                conf.setAppName("wcJava");
                conf.setMaster("local") ;

                JavaSparkContext sc = new JavaSparkContext(conf) ;
                //1.加载文件
                JavaRDD rdd1 = sc.textFile("d:\\java\\1.txt") ;

                //2.压扁
                JavaRDD rdd2 = rdd1.flatMap(new FlatMapFunction() {
                    public Iterator call(String s) throws Exception {
                        String[] arr = s.split(" ");
                        return Arrays.asList(arr).iterator() ;
                    }
                }) ;

                //3.标1成对
                JavaPairRDD rdd3 = rdd2.mapToPair(new PairFunction() {
                    public Tuple2 call(String s) throws Exception {
                        return new Tuple2(s , 1);
                    }
                }) ;

                //4.聚合
                JavaPairRDD rdd4 = rdd3.reduceByKey(new Function2() {
                    public Integer call(Integer v1, Integer v2) throws Exception {
                        return v1 + v2;
                    }
                }) ;

                //5.
                List> list = rdd4.collect();
                for(Tuple2 t : list){
                    System.out.println(t._1() + " : " + t._2());
                }
            }
        }

spark-maven的依赖

    在本地仓库下寻找对应工件(artifact),没有从外网下载。
    可以直接向下载好的工件放到本地仓库相应的目录下。
    工件的坐标:
        1.groupId
            org.apache.spark
            映射到目录树 org/apache/spark
        2.artifactId
            工件id,相当于项目
            映射成一个目录
        3.version
            版本
            映射成一个目录
        4.复制对应的目录到本地仓库忙碌下
            C:\Users\Administrator\.m2\repository
        
        5.在idea中重建索引
            settings->maven->repositorys->local -> update
    
    

搭建spark集群

    0.说明
        master            //s101
        worker            //s102 ~ s104

    1.挑选4台主机
        s101 ~ s104

    2.分别安装spark
        
    3.配置spark集群
        [conf/slaves]
        s102
        s103
        s104

        [conf/spark-env.sh]
        ...
        export JAVA_HOME=/soft/jdk
        ...

    4.启动spark集群
        $>sbin/start-all.sh
    
    5.查看webui
        http://s101:8080/
    
    6.启动spark-shell连接到spark集群
        spark-shell --master spark://s101:7077
    
    7.编写程序
        val rdd1 =  sc.parallelize(Array[String]("hello world1" , "hello world2" , "hello world3"))
        rdd1.flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).collect


    
hadoop同spark集成

    1.停掉spark集群
        sbin/stop-all.sh

    2.在所有的spark节点的conf/目录创建core-site.xml和hdfs-site.xml软连接文件
        xcall.sh "ln -s /soft/hadoop/etc/hadoop/core-site.xml /soft/spark/conf/core-site.xml"
        xcall.sh "ln -s /soft/hadoop/etc/hadoop/hdfs-site.xml /soft/spark/conf/hdfs-site.xml"
    3.启动hdfs集群
        xzk.sh start
        start-dfs.sh
    4.启动spark
        sbin/start-all.sh

    5.在spark-shell中访问hdfs文件
        val rdd1 = sc.textFile("/user/centos/1.txt")
        ...
部署程序在spark集群上运行程序

    1.修改代码中的Master地址和文件路径等等信息
        //conf.setMaster("local")
        sc.textFile(args(0))

    2.导出jar
        配置idea的project structure -> artifacts -> + jar -> 删除第三方类库.
        
    3.部署jar到centos,执行如下命令
        
    4.上传气温数据到hdfs
        hdfs dfs -put temp3.dat data
    
    5.运行程序
        spark-submit --master spark://s101:7077 --class MaxtempScala myspark.jar /user/centos/data/temp3.dat
        spark-submit --master spark://s101:7077 --class com.oldboy.bigdata.spark.java.MaxtempJava myspark.jar /user/centos/data/temp3.dat

 

 

你可能感兴趣的:(spark集群上运行程序,hadoop同spark集成,spark-maven,搭建spark集群,向大数据进军~每天记)