spark install

视频 https://ke.qq.com/course/238513

未解决的问题:

在执行 ./dev/make-distribution.sh --name 2.6.0-cdh5.7.0 --tgz -Dhadoop.version=2.6.0-cdh5.7.0 -Phadoop-2.6 -Phive -Phive-thriftserver -Pyarn
会遇到zinc找不到的问题, 将make-distribution.sh文件的
VERSION=$("$MVN" help:evaluate -Dexpression=project.version $@ 2>/dev/null | grep -v "INFO" | tail -n 1)
改为
VERSION=$("$MVN" help:evaluate -Dexpression=project.version $@ | grep -v "INFO" | tail -n 1)
之后再执行会打印出部分日志, 这时候可以发现原因是在指定目录下找不到zinc
#########################
当时未解决找不到zinc的问题,但是一个月后相同环境再次执行./dev/make-distribution.sh --name 2.6.0-cdh5.7.0 --tgz -Dhadoop.version=2.6.0-cdh5.7.0 -Phadoop-2.6 -Phive -Phive-thriftserver -Pyarn, 发现其会自动下载zinc, 不知道原因

另一个错误

Failed to execute goal on project spark-yarn_2.11

搜了一下原因都说是仓库中没找到对应的库, 但是我已经配置了cloudera的仓库.
重新执行了一遍编译命令, 自己就过去了
centos7:
    hadoop用户加sudo权限  http://blog.csdn.net/flydedog/article/details/78878630
    配置hostname  http://blog.csdn.net/flyDeDog/article/details/78883547
    安装部分可能遇到的依赖   zlib-devel  openssl-devel  gcc
    目录结构:
        app 存放安装软件, 如hadoop
        software: 存放软件包, 比如hadoop.tar.gz
        data: 存放数据
        lib: 存放自己的jar包或其他包
        source: 存放源码
        maven_repo  存放maven的依赖

spark安装
    jdk 
        [hadoop@hadoop001 software]$ wget http://download.oracle.com/otn-pub/java/jdk/8u144-b01/090f390dda5b47b9b721c7dfaa008135/jdk-8u144-linux-x64.tar.gz
        [hadoop@hadoop001 software]$ tar -zxf jdk-8u144-linux-x64.tar.gz -C ~/app/
        配置环境变量
            export JAVA_HOME=/home/hadoop/app/jdk1.8.0_144
            export PATH=$JAVA_HOME/bin:$PATH
        验证:
            source ~/.bashrc
            java -version
    maven 
        [hadoop@hadoop001 software]$ wget http://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.5.2/binaries/apache-maven-3.5.2-bin.tar.gz
        [hadoop@hadoop001 software]$ tar -zxf apache-maven-3.5.2-bin.tar.gz -C ~/app/
        配置环境变量
            export MAVEN_HOME=/home/hadoop/app/apache-maven-3.5.2
            export PATH=$MAVEN_HOME/bin:$PATH
        验证:
            source ~/.bashrc
            mvn -v
        配置
            vi /home/hadoop/app/apache-maven-3.5.2/conf/settings.xml  (将默认的依赖存放目录  Default: ${user.home}/.m2/repository  改为以下位置)
            <localRepository>/home/hadoop/maven_repo</localRepository>

    scala 
        wget https://downloads.lightbend.com/scala/2.11.8/scala-2.11.8.tgz
        [hadoop@hadoop001 software]$ tar -zxf scala-2.11.8_linux.tgz -C ~/app/
        配置环境变量
            export SCALA_HOME=/home/hadoop/app/scala-2.11.8
            export PATH=$SCALA_HOME/bin:$PATH
        验证:
            source ~/.bashrc
            scala

    git: 
              # 据说编译的时候会用到

    spark:
        2.2.0: [hadoop@hadoop001 source]$ wget http://mirrors.tuna.tsinghua.edu.cn/apache/spark/spark-2.2.0/spark-2.2.0.tgz

        # 设置maven的内存  -- 下面的 make-distribution.sh 编译脚本中有设置
        #     export MAVEN_OPTS="-Xmx2g -XX:ReservedCodeCacheSize=512m"

        #增加仓库
        vi pom.xml
        # 在<repositories>中增加第二个仓库
        <repository>
            <id>cloudera</id>
            <name>cloudera repository</name>
            <url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
        </repository>

        # 编译 -- 目标文件在$SPARK_HOME
        ./dev/make-distribution.sh --name 2.6.0-cdh5.7.0 --tgz -Dhadoop.version=2.6.0-cdh5.7.0 -Phadoop-2.6 -Phive -Phive-thriftserver -Pyarn

        # 将生成的包解压到app
        tar -zxf spark-2.2.0-bin-2.6.0-cdh5.7.0.tgz -C ~/app/

        # spark安装包目录结构
            bin  客户端相关脚本
            conf  配置文件
            data  测试数据
            examples  测试用例
            jars  存放jar包
            sbin  服务端脚本
            yran  yarn相关的jar

spark最小安装(单机测试版)

    1. 下载二进制包(spark官网或者自己编译的)
    2. 解压(这就算是安装完成了)
    3. bin/spark-shell  可以进入命令行工具
    4. bin/run-example SparkPi  是一个测试

spark编程环境搭建(基于idea)

    1. 创建maven项目
        在IDE中: File-->new-->project-->Maven, 可以使用骨架 org.scala-tools.archetypes:scala-archetype-simple
        maven项目命名规范:
            groupid: 项目地址反写 + 项目名称,  com.apache.spark
            artifactid: 项目名称 + 组件名称,  spack-SQL
        记得要允许maven自动导入: IDE会提示: maven project need to be imported
        修改pom.xml:
            scala.version: 你用的scala的version
            spark-core: 可以去maven仓库中搜索spark, 链接点进去之后类似这样
                            <!-- https://mvnrepository.com/artifact/org.apache.spark/spark-core -->
                            <dependency>
                                <groupId>org.apache.spark</groupId>
                                <artifactId>spark-core_2.11</artifactId>
                                <version>2.2.0</version>
                                <scope>provided</scope>
                            </dependency>

                        可以吧上面的dependency中的version用变量替代, 因为其他地方也可能用这个版本, 以后改起来方便
                            <!-- https://mvnrepository.com/artifact/org.apache.spark/spark-core -->
                            <dependency>
                                <groupId>org.apache.spark</groupId>
                                <artifactId>spark-core_2.11</artifactId>
                                <version>{spark.version}</version>
                                <scope>provided</scope>
                            </dependency>

                            <properties>
                                <spark.version>2.2.0</spark.version>  <!-- 指定spark版本变量 -->
                            </properties>


                        放到pom.xml的dependencies中, <scope>provided</scope>是自己加的, 因为打包的时候没必要吧spark也打进去

            maven-shade-plugin: maven插件, 能够把依赖包都打进jar包里面
                        <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>
                                <transformers>
                                    <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                    <!-- <mainClass>com.dajiangtai.MyDriver</mainClass> -->
                                    </transformer>
                                </transformers>
                                <createDependencyReducedPom>false</createDependencyReducedPom>
                                </configuration>
                            </execution>
                            </executions>
                        </plugin>
            只打包scala项目:
                注释掉的话, 就可以打包别的目录的项目了
                <sourceDirectory>src/main/scala</sourceDirectory>
                <testSourceDirectory>src/test/scala</testSourceDirectory>

        如果需要的话, 可以在settings文件中配置ali的私服
                <mirrors>
                    <mirror>
                    <id>alimaven</id>
                    <name>aliyun maven</name>
                    <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
                    <mirrorOf>central</mirrorOf>        
                    </mirror>
                </mirrors>


    2. 编写代码
        在代码目录中, 创建Scala Class的文件, Kind标签选择object(这样才有main方法)
        package com.flydedog.test

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

        object WordCount {
            def main(args: Array[String]): Unit = {
                // 参数检查
                if (args.length < 2) {  // 可以从guthubsparkexamples中找
                System.err.println("Usage: WordCount <input> <output>")
                System.exit(1)
                }

                // 获取参数
                val input = args(0)
                val output = args(1)

                // 创建SparkContext
                val conf = new SparkConf().setAppName("WordCount")
                val sc = new SparkContext(conf)

                // 读取数据
                val lines = sc.textFile(input)

                // 进行计算
                val resultRdd = lines.flatMap(_.split(" ")).map((_, 1)).reduceByKey(_+_)
            //    lines.flatMap(_.split(" ")).map((_, 1)).reduceByKey(_+_).collect().foreach(println)

                // 保存结果
                resultRdd.saveAsTextFile(output)
                sc.stop()
            }
        }

        这是一个wordCount的示例, 但是在IDE中跑的话比较困难, 因为参数传入总是不正确, 所以将它打包到spark程序的环境测试
            ~/testspark/words.txt 是一个文件, 里面随便写几个单词, 用空格分隔就好
            注意: 编译环境的scala版本和测试环境的scala版本要一致

            1. mvn clean package, 并将包上传至~/testspark/
            2. bin/spark-submit --class com.flydedog.test.WordCount ~/testspark/test-spark-0.1-SNAPSHOT.jar ~/testspark/words.txt ~/testspark/result

            结果会输出到~/testspark/result

        注: 在编写代码的时候, 工程目录结果为  E:\testspark\testspark\src\main\scala\com\flydedog\test, 如果想在E:\testspark\testspark\src\main\下再建立一个java的项目, 那么新建java文件夹后, 需要把这个文件夹 右键-make directory as-sources root

猜你喜欢

转载自blog.csdn.net/flyDeDog/article/details/78886602