示例项目使用说明

更新时间:
复制 MD 格式

本文介绍的项目都是完整的可编译可运行的项目,包括MapReduce、Pig、HiveSpark。

示例项目

详情代码示例请参见集群运行

  • MapReduce

    WordCount:单词统计

  • Hive

    sample.hive:表的简单查询

  • Pig

    sample.pig:Pig处理OSS数据实例

  • Spark

    • SparkPi:计算Pi

    • SparkWordCount:单词统计

    • LinearRegression:线性回归

    • OSSSample:OSS使用示例

    • MaxComputeSample:MaxCompute使用示例

    • MNSSample:MNS使用示例

    • LoghubSample:Loghub使用示例

依赖资源

  • 测试数据(data目录下):

    • The_Sorrows_of_Young_Werther.txt:可作为WordCount(MapReduceSpark)的输入数据。

    • patterns.txt:WordCount(MapReduce)作业的过滤字符。

    • u.data:sample.hive脚本的测试表数据。

    • abalone:线性回归算法测试数据。

  • 依赖JAR包(lib目录下):

    tutorial.jar:sample.pig作业需要的依赖JAR包。

准备工作

本文提供了一些测试数据,您将其上传到OSS中即可使用。您还可以自行准备以下可选测试数据,例如,MaxCompute、MNS、ONSLogService等。

基本概念

  • OSSURI:oss://<accessKeyId>:<accessKeySecret>@<bucket>.<endpoint>/a/b/c.txt,用户在作业中指定输入输出数据源时使用,类似hdfs://

  • 阿里云AccessKeyIdAccessKeySecret是您访问阿里云API的密钥。

集群运行

开源项目运行示例如下:

  • Spark

    • SparkWordCount:

      spark-submit --class SparkWordCount examples-1.0-SNAPSHOT-shaded.jar <inputPath>
                      <outputPath> <numPartition>

      参数说明如下:

      参数

      描述

      inputPath

      输入数据路径。

      outputPath

      输出路径。

      numPartition

      输入数据RDD分片数目。

    • SparkPi:

      spark-submit --class SparkPi examples-1.0-SNAPSHOT-shaded.jar
    • OSSSample:

      spark-submit --class OSSSample examples-1.0-SNAPSHOT-shaded.jar <inputPath>
                      <numPartition>

      参数说明如下:

      参数

      描述

      inputPath

      输入数据路径。

      numPartition

      输入数据RDD分片数目。

    • ONSSample:

      spark-submit --class ONSSample examples-1.0-SNAPSHOT-shaded.jar <accessKeyId>
                      <accessKeySecret> <consumerId> <topic> <subExpression> <parallelism>

      参数说明如下:

      参数

      描述

      accessKeyId

      阿里云AccessKeyId。

      accessKeySecret

      阿里云AccessKeySecret。

      consumerId

      消费者ID。

      topic

      每个消息队列都有一个 topic。

      subExpression

      消息子主题。

      parallelism

      指定多少个接收器来消费队列消息。

    • MaxComputeSample:

      spark-submit --class MaxComputeSample examples-1.0-SNAPSHOT-shaded.jar <accessKeyId>
                      <accessKeySecret> <envType> <project> <table> <numPartitions>

      参数说明如下:

      参数

      描述

      accessKeyId

      阿里云AccessKeyId。

      accessKeySecret

      阿里云AccessKeySecret。

      envType

      0表示公网环境,1表示内网环境。

      如果是本地调试选择 0,如果是在 E-MapReduce上执行请选择 1。

      project

      请参见术语表

      table

      请参见术语表

      numPartition

      输入数据RDD分片数目。

    • MNSSample:

      spark-submit --class MNSSample examples-1.0-SNAPSHOT-shaded.jar <queueName>
                      <accessKeyId> <accessKeySecret> <endpoint>

      参数说明如下:

      参数

      描述

      queueName

      Queue的名称。

      accessKeyId

      阿里云AccessKeyId。

      accessKeySecret

      阿里云AccessKeySecret。

      endpoint

      队列数据访问地址。

    • LoghubSample:

      spark-submit --class LoghubSample examples-1.0-SNAPSHOT-shaded.jar <sls project> <sls
                      logstore> <loghub group name> <sls endpoint> <access key id> <access key secret> <batch
                      interval seconds>

      参数说明如下:

      参数

      描述

      sls project: LogService

      项目名。

      sls logstore

      日志库名。

      loghub group name

      作业中消费日志数据的组名。sls projectsls store相同时,相同组名的作业会协同消费sls store中的数据;不同组名的作业会相互隔离地消费sls store中的数据。

      sls endpoint

      请参见日志服务入口

      accessKeyId

      阿里云AccessKeyId。

      accessKeySecret

      阿里云AccessKeySecret。

    • LinearRegression:

      spark-submit --class LinearRegression examples-1.0-SNAPSHOT-shaded.jar <inputPath>
                      <numPartitions>

      参数说明如下:

      参数

      描述

      inputPath

      输入数据路径。

      numPartition

      输入数据RDD分片数目。

  • Mapreduce

    WordCount:

    hadoop jar examples-1.0-SNAPSHOT-shaded.jar WordCount
                    -Dwordcount.case.sensitive=true <inputPath> <outputPath> -skip <patternPath>

    参数说明如下。

    参数

    描述

    inputPath

    输入数据路径。

    outputPath

    输出路径。

    patternPath

    过滤字符文件,可以使用datapatterns.txt

  • Hive

    hive -f sample.hive -hiveconf inputPath=<inputPath>

    参数说明如下。

    参数

    描述

    inputPath

    输入数据路径。

  • Pig

    pig -x mapreduce -f sample.pig -param tutorial=<tutorialJarPath> -param
                    input=<inputPath> -param result=<resultPath>

    参数说明如下:

    参数

    描述

    tutorialJarPath

    依赖Jar包,可使用libtutorial.jar。

    inputPath

    输入数据路径。

    resultPath

    输出路径。

重要
  • E-MapReduce上使用时,请将测试数据和依赖jar包上传到OSS中,路径规则遵循OSSURI定义。

  • 如果集群中使用,可以放在机器本地。

本地运行

这里主要介绍如何在本地运行Spark程序访问阿里云数据源,例如OSS等。如果希望本地调试运行,需要借助一些开发工具,例如IntelliJ IDEA或者Eclipse,尤其是对于 Windows环境,否则需要在Windows机器上配置HadoopSpark运行环境。

  • IntelliJ IDEA

    • 准备工作

      安装IntelliJ IDEA、Maven、 IntelliJ IDEA Maven插件、ScalaIntelliJ IDEA Scala插件。

    • 开发流程

      1. 双击进入SparkWordCount.scala。

        // 以下为示意代码,省略部分内容
        /..../
        /** Counts words
        object SparkWordC...
          def main(args: ...)
            if (args.len...)
              System.err.
              """Usage:
                |Argume...
                      in...
                      ou...
                |
                """.strip...
            }
            val inputPath...
            val outputPat...
            val numPartit...
            val input = s...
            val output = ...
            output.saveAs...
          }
          override def ge...
        }
      2. 进入作业配置界面。

        在工具栏中单击运行配置下拉菜单,选择 Edit Configurations...

      3. 选择 SparkWordCount,在作业参数框中按照所需传入作业参数。

        Configuration 标签页中,设置 Main classcom.aliyun.emr.example.SparkWordCountVM options-Xms128m -Xmx512m -XX:MaxPermSize=300m -eaWorking directory 设置为项目所在路径,Use classpath of mod 选择 doc-examples

      4. 单击 OK

      5. 单击运行,执行作业。

      6. 查看作业执行日志。

        2016-04-19 14:48:50  [ Thread-3:13531 ] - [ INFO ]  org.spark-project.jetty.server.handler.ContextHandler.doStop(ContextHandler.java:843)  stopped o.s.j.s.ServletContextHandler{/stages/json,null}
        2016-04-19 14:48:50  [ Thread-3:13531 ] - [ INFO ]  org.spark-project.jetty.server.handler.ContextHandler.doStop(ContextHandler.java:843)  stopped o.s.j.s.ServletContextHandler{/stages,null}
        2016-04-19 14:48:50  [ Thread-3:13532 ] - [ INFO ]  org.spark-project.jetty.server.handler.ContextHandler.doStop(ContextHandler.java:843)  stopped o.s.j.s.ServletContextHandler{/jobs/job/json,null}
        2016-04-19 14:48:50  [ Thread-3:13533 ] - [ INFO ]  org.spark-project.jetty.server.handler.ContextHandler.doStop(ContextHandler.java:843)  stopped o.s.j.s.ServletContextHandler{/jobs/job,null}
        2016-04-19 14:48:50  [ Thread-3:13533 ] - [ INFO ]  org.spark-project.jetty.server.handler.ContextHandler.doStop(ContextHandler.java:843)  stopped o.s.j.s.ServletContextHandler{/jobs/json,null}
        2016-04-19 14:48:50  [ Thread-3:13533 ] - [ INFO ]  org.spark-project.jetty.server.handler.ContextHandler.doStop(ContextHandler.java:843)  stopped o.s.j.s.ServletContextHandler{/jobs,null}
        2016-04-19 14:48:50  [ Thread-3:13591 ] - [ INFO ]  org.apache.spark.Logging$class.logInfo(Logging.scala:58) Stopped Spark Web UI at xxx
        2016-04-19 14:48:50  [ dispatcher-event-loop-2:13646 ] - [ INFO ]  org.apache.spark.Logging$class.logInfo(Logging.scala:58) xxx MapOutputTrackerMasterEndpoint stopped!
        2016-04-19 14:48:50  [ Thread-3:13672 ] - [ INFO ]  org.apache.spark.Logging$class.logInfo(Logging.scala:58) MemoryStore cleared
        2016-04-19 14:48:50  [ Thread-3:13673 ] - [ INFO ]  org.apache.spark.Logging$class.logInfo(Logging.scala:58) BlockManager stopped
        2016-04-19 14:48:50  [ Thread-3:13683 ] - [ INFO ]  org.apache.spark.Logging$class.logInfo(Logging.scala:58) BlockManagerMaster stopped
        2016-04-19 14:48:50  [ dispatcher-event-loop-0:13689 ] - [ INFO ]  org.apache.spark.Logging$class.logInfo(Logging.scala:58) OutputCommitCoordinator stopped!
        2016-04-19 14:48:50  [ Thread-3:13694 ] - [ INFO ]  org.apache.spark.Logging$class.logInfo(Logging.scala:58) Successfully stopped SparkContext
        2016-04-19 14:48:50  [ Thread-3:13695 ] - [ INFO ]  org.apache.spark.Logging$class.logInfo(Logging.scala:58) Shutdown hook called
        2016-04-19 14:48:50  [ Thread-3:13696 ] - [ INFO ]  org.apache.spark.Logging$class.logInfo(Logging.scala:58) Deleting directory xxx\Local\Temp\spark-d14f0e88-20bf-4bbc-a5ad-99c48e79bc72
        Process finished with exit code 1
  • Scala IDE for Eclipse

    • 准备工作

      安装Scala IDE for Eclipse、Maven、Eclipse Maven插件。

    • 开发流程

      1. 请根据以下步骤导入项目。

        在 Scala IDE 中,单击菜单栏 File,选择 Import...。在 Import 对话框中,展开 Maven 分类,选择 Existing Maven Projects,然后单击 Next。在 Import Maven Projects 对话框中,单击 Root Directory 右侧的 Browse 按钮,在弹出的 Select Root Folder 对话框中选择 doc-examples 文件夹,然后单击确定完成导入。

      2. Run As Maven build,快捷键是Alt + Shift + X, M,也可以在项目名上右键选择Run As > Maven build

      3. 等待编译完后,在需要运行的作业上右键,选择Run Configuration,进入配置页。

      4. 在配置页中,选择 Scala Application,并配置作业的Main Class和参数等等。

        选择 SparkWordCount$ 配置项,将 Project 设置为 examplesMain class 设置为 SparkWordCount

      5. 单击Run

      6. 查看控制台输出日志。