Spark 安装及WordCount编写(Spark、Scala、java三种方法)

Spark 官网:Apache Spark™ - Unified Engine for large-scale data analytics

Spark RDD介绍官网:https://spark.apache.org/docs/2.2.0/api/scala/index.html#org.apache.spark.rdd.RDD

下载好spark解压mv到软件目录

linux>mv spark-xxx-xxx /opt/install/spark

修改配置文件进入spark/conf

linux>vi spark-env.sh
#添加如下配置
export JAVA_HOME=/opt/install/jdk
export SPARK_MASTER_IP=192.168.58.200
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop

linux>vi slaves
192.168.58.201
192.168.58.202

启动spark服务

linux>sbin/start-all.sh
linux>jps    #查看服务进程
192.168.58.200 启动spark jps 后有Master
192.168.58.201 启动spark jps 后有Worker
192.168.58.202 启动spark jps 后有Worker

访问Spark Web UI 用浏览器输入IP:8080 即可

spark Shell 用于测试

Linux>bin/spark-shell 用于测试
或bin/spark-shell --master spark://IP:7070 (会启用stanlang集器 )

测试数据:(将数据上传到hdfs上 例:hdfs dfs -put testdata.txt  /mycluster/tmp_data/sparkdata)

linux>testdata.txt
hello zhangsan hello lisi hello wangwu hello xiaohong
hello lisi2 hello xiaoming hello zhangsan
hello zhangsan2 hello lisi3 hello wangwu2
zhang san li si

Spark Shell WordCount

spark(scala)>val lines=sc.textFile("/root/tmp_data/sparkdata/testdata.txt")	(创建RDD,指定hdfs上的文件)
spark(scala)>val lines=sc.textFile("file:///root/tmp_data/sparkdata/testdata.txt")	(创建RDD,指定本地上的文件)
spark(scala)>lines
spark(scala)>lines.take(5)    (查看指定范围)
spark(scala)>lines.collect		(收集查看全部)
spark(scala)>lines.flatMap(x=>x.split(" ")).take(10)
spark(scala)>lines.flatMap(x=>x.split(" ")).map(x=>(x,1)).take(10)
spark(scala)>lines.flatMap(x=>x.split(" ")).map(x=>(x,1)).reduceByKey((x,y)=>x+y).take(10)

spark(scala)>lines.flatMap(x=>x.split(" ")).map(x=>(x,1)).reduceByKey((x,y)=>x+y).sortBy(_._2,false).take(5)    (查看指定范围的WordCount)

spark(scala)>lines.flatMap(x=>x.split(" ")).map(x=>(x,1)).reduceByKey((x,y)=>x+y).sortBy(_._2,false).saveAsTextFile("file:///root/tmp_data/sparkdata/output")    (WordCount 后将结果保存到本地)

spark(scala)>lines.flatMap(x=>x.split(" ")).map(x=>(x,1)).reduceByKey((x,y)=>x+y).sortBy(_._2,false).saveAsTextFile("/root/tmp_data/sparkdata/output")    (WordCount 后将结果保存到hdfs)

linux>hdfs dfs -cat /xxx/xxx 查看数据

IDEA pom.xml配置:

<properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.scala-lang</groupId>
            <artifactId>scala-library</artifactId>
            <version>2.11.8</version>
        </dependency>


        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-core_2.11</artifactId>
            <version>2.2.0</version>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>net.alchim31.maven</groupId>
                <artifactId>scala-maven-plugin</artifactId>
                <version>3.2.2</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>compile</goal>
                            <goal>testCompile</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>2.4.3</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <filters>
                                <filter>
                                    <artifact>*:*</artifact>
                                    <excludes>
                                        <exclude>META-INF/*.SF</exclude>
                                        <exclude>META-INF/*.DSA</exclude>
                                        <exclude>META-INF/*.RSA</exclude>
                                    </excludes>
                                </filter>
                            </filters>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

SparkWordCount

package SparkTest

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

object SparkWordCount {
/*  1.创建Sparkcontext
  2.创建RDD
  3.调用transformation算子
  4.调用action算子
  5.释放资源*/
  def main(args:Array[String]):Unit={
/*    val conf =new SparkConf().setAppName("SparkWrodCount")
    val sc = new SparkContext(conf)
    val lines: RDD[String]=sc.textFile("/mycluster/tmp_data/sparkdata")
    val wordes: RDD[String]=lines.flatMap(_.split(" "))
    val wordAndOne: RDD[(String,Int)] = wordes.map((_,1))
    val reduced: RDD[(String,Int)]=wordAndOne.reduceByKey(_+_)
    val result: RDD[(String,Int)]=reduced.sortBy(_._2,false)
    result.saveAsTextFile("/mycluster/tmp_data/output")
    sc.stop()*/

    val conf =new SparkConf().setAppName("SparkWrodCount")
    val sc = new SparkContext(conf)
    val lines:RDD[String]=sc.textFile(args(0))
    val wordes:RDD[String]=lines.flatMap(_.split(" "))
    val wordAndOne:RDD[(String,Int)] = wordes.map((_,1))
    val reduced:RDD[(String,Int)]=wordAndOne.reduceByKey(_+_)
    val result:RDD[(String,Int)]=reduced.sortBy(_._2,false)
    result.saveAsTextFile(args(1))
    sc.stop()
  }
}

打好包后运行

linux>bin/spark-submit --master spark://192.168.58.200:7077 --class SparkTest.SparkWordCount  /root/tmp_data/sparkdata/SparkDemo-1.0-SNAPSHOT.jar  /mycluster/tmp_data/sparkdata  /mycluster/tmp_data/output

JavaLamdaWordCount

package WordCount;

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 scala.Tuple2;

import java.util.Arrays;

public class JavaLamdaWordCount {
    public static void main(String[] args) {
        final SparkConf conf = new SparkConf().setAppName("JavaLamdaWordCount");
        final JavaSparkContext jsc = new JavaSparkContext(conf);
        final JavaRDD<String> lines = jsc.textFile(args[0]);
        final JavaRDD<String> words=lines.flatMap(line -> Arrays.asList(line.split(" ")).iterator());
        final JavaPairRDD<String,Integer> wordAndOne = words.mapToPair(Word -> new Tuple2<>(Word,1));
        final JavaPairRDD<String,Integer> reduced = wordAndOne.reduceByKey((x,y) -> x + y);
        final JavaPairRDD<Integer,String> swaped = reduced.mapToPair(tuple -> tuple.swap());
        final JavaPairRDD<Integer,String> sorted = swaped.sortByKey(false);
        final JavaPairRDD<String,Integer> result = sorted.mapToPair(tuple -> tuple.swap());
        result.saveAsTextFile(args[1]);

        jsc.stop();

    }
}

打好包后运行

linux>bin/spark-submit --master spark://192.168.58.200:7077 --class WordCount.JavaLamdaWordCount  /root/tmp_data/sparkdata/SparkDemo-1.0-SNAPSHOT.jar  /mycluster/tmp_data/sparkdata  /mycluster/tmp_data/output

JavaWordCount

package WordCount;

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.Arrays;
import java.util.Iterator;

public class JavaWordCount {
    public static void main(String[] args) {
        final SparkConf conf = new SparkConf().setAppName("JavaWordCount");
        final JavaSparkContext jsc = new JavaSparkContext(conf);
      //  final JavaRDD<String> lines=jsc.textFile("/mycluster/tmp_data/sparkdata");
        final JavaRDD<String> lines=jsc.textFile(args[0]);
        final JavaRDD<String> words=lines.flatMap(new FlatMapFunction<String,String>() {
            @Override
            public Iterator<String> call(String line) throws Exception{
//              final  String[] words=line.split(" ");
//              final List<String> lists= Arrays.asList(words);
//              return  lists.iterator();
                return Arrays.asList(line.split(" ")).iterator();
            }
        });
        final JavaPairRDD<String,Integer> wordAndOne = words.mapToPair(new PairFunction<String,String,Integer>(){
           @Override
           public Tuple2<String,Integer> call(String word) throws Exception{
               return new Tuple2<>(word,1);
           }
        });

        final JavaPairRDD<String,Integer> reduced = wordAndOne.reduceByKey(new Function2<Integer, Integer, Integer>() {
            @Override
            public Integer call(Integer v1, Integer v2) throws Exception {
                return v1 + v2;
            }
        });

        final JavaPairRDD<Integer,String> swaped=reduced.mapToPair(new PairFunction<Tuple2<String, Integer>, Integer, String>() {
            @Override
            public Tuple2<Integer, String> call(Tuple2<String, Integer> Tuple2) throws Exception {
                return Tuple2.swap();
            }
        });
        final JavaPairRDD<Integer,String> sorted = swaped.sortByKey(false);

        final JavaPairRDD<String,Integer> reuslt = sorted.mapToPair(new PairFunction<Tuple2<Integer, String>, String, Integer>() {
            @Override
            public Tuple2<String, Integer> call(Tuple2<Integer, String> Tuple2) throws Exception {
                return Tuple2.swap();
            }
        });
//integerString
//        reuslt.saveAsTextFile("/mycluster/tmp_data/output");
        reuslt.saveAsTextFile(args[1]);
            jsc.stop();

    }
}

打好后包后运行

linux>bin/spark-submit --master spark://192.168.58.200:7077 --class WordCount.JavaWordCount  /root/tmp_data/sparkdata/SparkDemo-1.0-SNAPSHOT.jar  /mycluster/tmp_data/sparkdata  /mycluster/tmp_data/output
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 创建基于Scala语言的Spark Maven项目: 1. 打开IntelliJ IDEA,点击“Create New Project”。 2. 选择“Maven”作为项目类型,点击“Next”。 3. 输入项目名称和项目路径,点击“Next”。 4. 选择Scala版本和Spark版本,点击“Next”。 5. 选择项目的groupId和artifactId,点击“Next”。 6. 点击“Finish”完成项目创建。 WordCount程序: 1. 在src/main/scala目录下创建一个WordCount.scala文件。 2. 在文件中输入以下代码: ``` import org.apache.spark.{SparkConf, SparkContext} object WordCount { def main(args: Array[String]): Unit = { val conf = new SparkConf().setAppName("WordCount").setMaster("local") val sc = new SparkContext(conf) val input = sc.textFile("input.txt") val words = input.flatMap(line => line.split(" ")) val counts = words.map(word => (word, 1)).reduceByKey(_ + _) counts.foreach(println) } } ``` 3. 在项目根目录下创建一个input.txt文件,并输入一些文本内容。 4. 运行WordCount程序,可以在控制台看到单词统计结果。 ### 回答2: 在创建基于Scala语言的Spark Maven项目及WordCount应用之前,需要先安装以下软件: 1. Java JDK 2. Scala 3. Apache Maven 4. Apache Spark 接下来,按照以下步骤创建项目: 1. 打开终端并创建一个新目录,用于存储Spark项目。 ``` mkdir spark-project cd spark-project ``` 2. 创建一个新的Maven项目,使用以下命令: ``` mvn archetype:generate -DgroupId=com.sparkproject -DartifactId=wordcount -DarchetypeArtifactId=maven-archetype-quickstart -DscalaVersion=2.11.7 ``` 这个命令会使用Maven的Quickstart模板创建一个基本的Maven项目。在此过程中,你需要输入要创建的组ID、项目ID和Scala版本。 3. 打开pom.xml文件并添加Spark依赖库。 ``` <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-core_2.11</artifactId> <version>2.4.5</version> </dependency> ``` 这个依赖库将帮助我们在Maven项目中导入Spark库。 4. 创建一个新的Scala源代码文件WordCount.scala。 ``` package com.sparkproject import org.apache.spark._ import org.apache.spark.SparkContext._ object WordCount { def main(args: Array[String]) { val conf = new SparkConf().setAppName("WordCount") val sc = new SparkContext(conf) val textFile = sc.textFile(args(0)) val counts = textFile.flatMap(line => line.split(" ")) .map(word => (word, 1)) .reduceByKey(_ + _) counts.saveAsTextFile(args(1)) } } ``` 这个代码将使用Spark来计算文本文件中单词的出现次数。它主要使用了Spark的RDD(Resilient Distributed Datasets)API。 5. 使用以下命令将Maven项目打包: ``` mvn package ``` 6. 使用以下命令在Spark集群上运行WordCount应用程序。 ``` ../bin/spark-submit --class "com.sparkproject.WordCount" --master local wordcount-1.0-SNAPSHOT.jar /path/to/input/files /path/to/output/directory ``` 这个命令将使用Spark的`spark-submit`命令启动WordCount应用程序。其中,`/path/to/input/files`是要处理的文本文件路径,`/path/to/output/directory`是将缓存结果输出的目录路径。 总结: 通过上述步骤,我们创建了一个基于Scala语言的Spark Maven项目,并构建了一个WordCount应用程序来演示如何使用Spark来处理文本数据。这个示例代码可用于提供Spark在更复杂数据分析场景下的能力。 ### 回答3: Apache Spark是一个开源的大数据处理框架,它使用分布式计算的方式实现高效的数据处理,支持多种语言,其中Scala是最为常用的语言之一。Maven是一个流行的构建工具,提供了一种简单的方式管理项目的依赖,方便项目管理和部署。在本文中,我们将介绍如何使用Scala和Maven创建一个Spark Maven项目并实现一个简单的WordCount程序。 首先,我们需要安装Scala和Maven。如果您已经安装并配置好了,可以跳过这一步骤。首先安装Scala,可以到Scala的官网下载安装包,也可以使用命令行安装安装完成后,需要确认是否正确地配置了系统的环境变量。 然后安装Maven。可以从Maven的官网下载安装包,也可以使用命令行安装安装完成后同样需要确认是否正确地配置了系统的环境变量。 接下来,我们开始创建一个Maven项目。首先打开命令行窗口,使用以下命令创建一个基于ScalaSpark Maven项目: ``` mvn archetype:generate -DgroupId=com.spark.scala -DartifactId=wordcount -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false -DarchetypeCatalog=local ``` 该命令将创建一个名为“wordcount”的Maven项目,在项目的根目录中,有一个包含Java代码的src/main/java目录,和一个包含测试代码的src/test/java目录。 接下来,我们需要在项目的pom.xml文件中添加SparkScala的依赖。在pom.xml文件中,添加以下代码: ``` <dependencies> <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-core_2.11</artifactId> <version>2.4.5</version> </dependency> <dependency> <groupId>org.scala-lang</groupId> <artifactId>scala-library</artifactId> <version>2.11.12</version> </dependency> </dependencies> ``` 此时我们已经创建好了一个基于ScalaSpark Maven项目,接下来我们实现一个简单的WordCount程序。 首先,在src/main/scala目录中创建一个名为“WordCount”的Scala文件,添加以下代码: ``` import org.apache.spark.{SparkConf, SparkContext} object WordCount { def main(args: Array[String]) { val conf = new SparkConf() .setAppName("WordCount") .setMaster("local[2]") val sc = new SparkContext(conf) val input = sc.textFile(args(0)) val words = input.flatMap(line => line.split(" ")) val counts = words.map(word => (word, 1)).reduceByKey(_ + _) counts.saveAsTextFile(args(1)) sc.stop() } } ``` 该程序使用Spark的API,首先创建了一个SparkConf对象和一个SparkContext对象,设置了应用程序的名称和运行模式。然后使用textFile方法从输入文件中读取数据,使用flatMap方法将每一行数据解析成单词,再使用map和reduceByKey方法计算单词的出现频率。最后使用saveAsTextFile方法将结果保存到输出文件中,并关闭SparkContext。 接下来,我们在命令行中运行该程序。首先将文本文件(例如input.txt)复制到项目的根目录中,然后使用以下命令运行程序: ``` mvn exec:java -Dexec.mainClass="WordCount" -Dexec.args="input.txt output" ``` 此时程序将输出结果保存在output目录中。 综上所述,我们使用Scala和Maven创建了一个基于Spark的Maven项目,并实现了一个简单的WordCount程序。这个过程中,对于初学者来说可能存在一些困难,但随着对SparkScala的深入了解,这些问题都可以轻松解决。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值