zoukankan      html  css  js  c++  java
  • spark基础---->spark的第一个程序

      这里面我们介绍一下spark的安装,并通过一个python的例子来简单的体会一下spark的使用。

    spark的安装与使用

    安装环境:mac 10.13.6,spark版本:2.3.1,python版本:3.6.5

    一、在mac上面安装spark和pyspark,可以使用brew包管理器安装。直接运行命令

    > brew install apache-spark
    > pip install pyspark

    二、通过start-master启动我们的集群

    > ./start-master.sh

    然后我们访问:http://localhost:8080/,就可以看到集群相关的信息。

    三、启动我们的worker。

    > ./start-slave.sh spark://CNhuxhu.local:7077

    再次访问http://localhost:8080/,可以在workers里面看到我们启动的worker信息。

    四、编写我们的第一个spark的python程序

    from pyspark import SparkContext, SparkConf
    
    conf = SparkConf().setAppName("FirstApp").setMaster("spark://CNhuxhu.local:7077")
    sc = SparkContext(conf=conf)
    lines = sc.textFile('/usr/local/Cellar/apache-spark/2.3.1/README.md')
    
    print('counts = ', lines.count())

    五、提交到spark中处理

    spark-submit --master local[4] simpleSpark.py

     可以在控制台看到如下的打印信息:

    counts =  103

    程序中遇到的一些问题

    一、运行程序报以下的错误

    py4j.protocol.Py4JJavaError: An error occurred while calling z:org.apache.spark.api.python.PythonRDD.collectAndServe.

    这是由于我们的mac本地安装的java版本有jdk8和jdk10,但是默认的是jdk10。spark2.3.1要求的jdk版本是1.8,所以修改系统的jdk版本问题解决。vim ~/.zshrc,添加以下内容

    export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home

    二、查看系统安装jdk的java_home命令

    usr/libexec/java_home -V

    可以查看系统安装的所有java以及JAVA_HOME的信息

    Matching Java Virtual Machines (2):
        10.0.2, x86_64:    "Java SE 10.0.2"    /Library/Java/JavaVirtualMachines/jdk-10.0.2.jdk/Contents/Home
        1.8.0_162, x86_64:    "Java SE 8"    /Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home
    
    /Library/Java/JavaVirtualMachines/jdk-10.0.2.jdk/Contents/Home

    三、以下是一个java版本的spark程序

    项目是由maven构建的,在pom.xml添加所需的依赖。

    <dependency> <!-- Spark dependency -->
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-sql_2.11</artifactId>
        <version>2.3.1</version>
    </dependency>

    我们编写的java代码如下:

    package com.linux.huhx;
    
    import org.apache.spark.sql.Dataset;
    import org.apache.spark.sql.SparkSession;
    
    /**
     * user: huxhu
     * date: 2018/8/11 3:40 PM
     **/
    public class SimpleSpark {
        public static void main(String[] args) {
            String logFile = "/usr/local/Cellar/apache-spark/2.3.1/README.md"; // Should be some file on your system
            SparkSession spark = SparkSession.builder().appName("Simple Application").getOrCreate();
            Dataset<String> logData = spark.read().textFile(logFile).cache();
    
            long numAs = logData.filter(s -> s.contains("a")).count();
            long numBs = logData.filter(s -> s.contains("b")).count();
    
            System.out.println("Lines with a: " + numAs + ", lines with b: " + numBs);
    
            spark.stop();
        }
    }

    mvn package打包项目,在target目录下生成可执行的sparkLearn-1.0-SNAPSHOT.jar文件。最后执行spark-submit命令

    spark-submit --class "com.linux.huhx.SimpleSpark" --master local[4] target/sparkLearn-1.0-SNAPSHOT.jar

    可以在控制台看到如下的日志打印

    Lines with a: 61, lines with b: 30

    友情链接

     
  • 相关阅读:
    phpcms V9 MVC模式 与 URL访问解析
    PHPCMS V9 框架代码分析(入口程序)
    批处理命令——for
    批处理命令——set
    批处理命令——if
    AndroidStudio简单的apk混淆
    CKEditor与CKFinder学习--CKFinder源代码改动自己定义上传文件名称
    LeetCode_Path Sum
    Java 并发:内置锁 Synchronized
    做游戏长知识------基于行为树与状态机的游戏AI(一)
  • 原文地址:https://www.cnblogs.com/huhx/p/firstpythonsparkdemo.html
Copyright © 2011-2022 走看看