ITPub博客

首页 > 数据库 > 数据库开发技术 > IntelliJ-IDEA-Mavne-Scala-Spark开发环境搭建

IntelliJ-IDEA-Mavne-Scala-Spark开发环境搭建

原创 数据库开发技术 作者:HelloTech技术派 时间:2017-12-28 15:00:26 0 删除 编辑

背景

  • 几乎所有编程语言的第一个程序都是 Hello World。

下载并安装JDK、Scala、Maven

  • 之前的Hadoop HA 和 Spark集群的文章中已经安装过JDK、Scala。Maven安装也很简单,略。

下载Idea并安装Scala插件

  • 在线安装有点慢,但网上很多方法解决,略。

创建一个maven-scala工程

按向导一步步填写、下一步。

修改 pom.xml文件中的版本号

  • 将scala.version修改成本机安装的Scala版本,并加入hadoop以及spark所需要的依赖,完整的内容如下:

  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

  2.  <modelVersion>4.0.0</modelVersion>

  3.  <groupId>com.gemantic.bigdata</groupId>

  4.  <artifactId>bigdata-spark</artifactId>

  5.  <version>1.0-SNAPSHOT</version>

  6.  <inceptionYear>2008</inceptionYear>

  7.  <properties>

  8.    <maven.compiler.source>1.7</maven.compiler.source>

  9.    <maven.compiler.target>1.7</maven.compiler.target>

  10.    <scala.version>2.11.4</scala.version>

  11.    <spark.version>2.0.0</spark.version>

  12.    <spark.artifact>2.11</spark.artifact>

  13.    <hbase.version>1.2.2</hbase.version>

  14.    <hadoop.version>2.6.0</hadoop.version>

  15.    <dependency.scope>compile</dependency.scope>

  16.  </properties>

  17.  <repositories>

  18.    <repository>

  19.      <id>scala-tools.org</id>

  20.      <name>Scala-Tools Maven2 Repository</name>

  21.      <url>http://scala-tools.org/repo-releases</url>

  22.    </repository>

  23.  </repositories>

  24.  <pluginRepositories>

  25.    <pluginRepository>

  26.      <id>scala-tools.org</id>

  27.      <name>Scala-Tools Maven2 Repository</name>

  28.      <url>http://scala-tools.org/repo-releases</url>

  29.    </pluginRepository>

  30.  </pluginRepositories>

  31.  <dependencies>

  32.    <dependency>

  33.      <groupId>org.scala-lang</groupId>

  34.      <artifactId>scala-library</artifactId>

  35.      <version>${scala.version}</version>

  36.    </dependency>

  37.    <dependency>

  38.      <groupId>junit</groupId>

  39.      <artifactId>junit</artifactId>

  40.      <version>4.4</version>

  41.      <scope>test</scope>

  42.    </dependency>

  43.    <dependency>

  44.      <groupId>org.specs</groupId>

  45.      <artifactId>specs</artifactId>

  46.      <version>1.2.5</version>

  47.      <scope>test</scope>

  48.    </dependency>

  49.    <dependency>

  50.      <groupId>org.apache.commons</groupId>

  51.      <artifactId>commons-lang3</artifactId>

  52.      <version>3.0</version>

  53.    </dependency>

  54.    <dependency>

  55.      <groupId>org.apache.hadoop</groupId>

  56.      <artifactId>hadoop-hdfs</artifactId>

  57.      <version>${hadoop.version}</version>

  58.    </dependency>

  59.    <dependency>

  60.      <groupId>org.apache.hadoop</groupId>

  61.      <artifactId>hadoop-common</artifactId>

  62.      <version>${hadoop.version}</version>

  63.    </dependency>

  64.    <dependency>

  65.      <groupId>org.apache.spark</groupId>

  66.      <artifactId>spark-core_${spark.artifact}</artifactId>

  67.      <version>${spark.version}</version>

  68.      <scope>${dependency.scope}</scope>

  69.    </dependency>

  70.    <dependency>

  71.      <groupId>org.apache.spark</groupId>

  72.      <artifactId>spark-sql_${spark.artifact}</artifactId>

  73.      <version>${spark.version}</version>

  74.      <scope>${dependency.scope}</scope>

  75.    </dependency>

  76.    <dependency>

  77.      <groupId>org.apache.spark</groupId>

  78.      <artifactId>spark-hive_${spark.artifact}</artifactId>

  79.      <version>${spark.version}</version>

  80.      <scope>${dependency.scope}</scope>

  81.    </dependency>

  82.    <dependency>

  83.      <groupId>org.apache.spark</groupId>

  84.      <artifactId>spark-mllib_${spark.artifact}</artifactId>

  85.      <version>${spark.version}</version>

  86.      <scope>${dependency.scope}</scope>

  87.    </dependency>

  88.    <dependency>

  89.      <groupId>org.apache.spark</groupId>

  90.      <artifactId>spark-streaming-kafka-0-8_2.11</artifactId>

  91.      <version>${spark.version}</version>

  92.      <scope>${dependency.scope}</scope>

  93.    </dependency>

  94.  </dependencies>

  95.  <build>

  96.    <sourceDirectory>src/main/scala</sourceDirectory>

  97.    <testSourceDirectory>src/test/scala</testSourceDirectory>

  98.    <plugins>

  99.      <plugin>

  100.        <groupId>org.scala-tools</groupId>

  101.        <artifactId>maven-scala-plugin</artifactId>

  102.        <executions>

  103.          <execution>

  104.            <goals>

  105.              <goal>compile</goal>

  106.              <goal>testCompile</goal>

  107.            </goals>

  108.          </execution>

  109.        </executions>

  110.        <configuration>

  111.          <scalaVersion>${scala.version}</scalaVersion>

  112.          <args>

  113.            <arg>-target:jvm-${maven.compiler.target}</arg>

  114.          </args>

  115.        </configuration>

  116.      </plugin>

  117.      <plugin>

  118.        <artifactId>maven-assembly-plugin</artifactId>

  119.        <configuration>

  120.          <descriptors>

  121.            <descriptor>src/main/assembly/distribution.xml</descriptor>

  122.          </descriptors>

  123.        </configuration>

  124.      </plugin>

  125.      <plugin>

  126.        <groupId>org.apache.maven.plugins</groupId>

  127.        <artifactId>maven-eclipse-plugin</artifactId>

  128.        <configuration>

  129.          <downloadSources>true</downloadSources>

  130.          <buildcommands>

  131.            <buildcommand>ch.epfl.lamp.sdt.core.scalabuilder</buildcommand>

  132.          </buildcommands>

  133.          <additionalProjectnatures>

  134.            <projectnature>ch.epfl.lamp.sdt.core.scalanature</projectnature>

  135.          </additionalProjectnatures>

  136.          <classpathContainers>

  137.            <classpathContainer>org.eclipse.jdt.launching.JRE_CONTAINER</classpathContainer>

  138.            <classpathContainer>ch.epfl.lamp.sdt.launching.SCALA_CONTAINER</classpathContainer>

  139.          </classpathContainers>

  140.        </configuration>

  141.      </plugin>

  142.    </plugins>

  143.    <resources>

  144.      <resource>

  145.        <directory>src/main/resources</directory>

  146.        <includes>

  147.          <include>**/*</include>

  148.        </includes>

  149.      </resource>

  150.    </resources>

  151.  </build>

  152.  <reporting>

  153.    <plugins>

  154.      <plugin>

  155.        <groupId>org.scala-tools</groupId>

  156.        <artifactId>maven-scala-plugin</artifactId>

  157.        <configuration>

  158.          <scalaVersion>${scala.version}</scalaVersion>

  159.        </configuration>

  160.      </plugin>

  161.    </plugins>

  162.  </reporting>

  163. </project>

删除自动生成的代码,创建自己的 HelloWorld

  • 实现功能是:把 spark 目录下的 README.md文件中包含 Python的行,然后做 Word Count。最后将结果保存到HDFS上。

  1. package com.gemantic.bigdata

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

  3. /**

  4.  * @author Yezhiwei

  5.  * @date 17/12/27

  6.  */

  7. object WordCount {

  8.  def main (args: Array[String]){

  9.    System.setProperty("spark.serializer", "org.apache.spark.serializer.KryoSerializer")

  10.    val conf = new SparkConf().setAppName("WC")

  11.    val sc = new SparkContext(conf)

  12.    val input = sc.textFile("README.md")

  13.    val pythonLines = input.filter(line => line.contains("Python"))

  14.    val words = pythonLines.flatMap(line => line.split(" "))

  15.    val counts = words.map(word => (word, 1)).reduceByKey(_ + _)

  16.    counts.saveAsTextFile("outputFile")

  17.    sc.stop()

  18.  }

  19. }

打包命令

  • mvn clean package

或者

  • 在 target 目录下生成 bigdata-spark-1.0-SNAPSHOT.jar

上传测试

  • 将上面的 bigdata-spark-1.0-SNAPSHOT.jar 上传到服务器,提交任务到集群,命令如下:

  1. root@ubuntu238:/usr/local/spark-1.6.0-bin-hadoop2.6# ./bin/spark-submit --class com.gemantic.bigdata.WordCount --master yarn-cluster --executor-memory 512m /data/bigdata/spark/lib/bigdata-spark-1.0-SNAPSHOT.jar 10

  • 执行过程中的日志输出:

  1. 17/12/28 11:42:08 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

  2. 17/12/28 11:42:08 INFO yarn.Client: Requesting a new application from cluster with 2 NodeManagers

  3. 17/12/28 11:42:08 INFO yarn.Client: Verifying our application has not requested more than the maximum memory capability of the cluster (8192 MB per container)

  4. 17/12/28 11:42:08 INFO yarn.Client: Will allocate AM container, with 896 MB memory including 384 MB overhead

  5. 17/12/28 11:42:08 INFO yarn.Client: Setting up container launch context for our AM

  6. 17/12/28 11:42:08 INFO yarn.Client: Setting up the launch environment for our AM container

  7. 17/12/28 11:42:08 INFO yarn.Client: Preparing resources for our AM container

  8. 17/12/28 11:42:09 INFO yarn.Client: Uploading resource file:/usr/local/spark-1.6.0-bin-hadoop2.6/lib/spark-assembly-1.6.0-hadoop2.6.0.jar -> hdfs://masters/user/root/.sparkStaging/application_1514254657629_0009/spark-assembly-1.6.0-hadoop2.6.0.jar

  9. 17/12/28 11:42:12 INFO yarn.Client: Uploading resource file:/data/bigdata/spark/lib/bigdata-spark-1.0-SNAPSHOT.jar -> hdfs://masters/user/root/.sparkStaging/application_1514254657629_0009/bigdata-spark-1.0-SNAPSHOT.jar

  10. 17/12/28 11:42:12 INFO yarn.Client: Uploading resource file:/tmp/spark-add007da-644d-47f5-99be-2ce1ddf89a4f/__spark_conf__5606044700861845297.zip -> hdfs://masters/user/root/.sparkStaging/application_1514254657629_0009/__spark_conf__5606044700861845297.zip

  11. 17/12/28 11:42:12 INFO spark.SecurityManager: Changing view acls to: root

  12. 17/12/28 11:42:12 INFO spark.SecurityManager: Changing modify acls to: root

  13. 17/12/28 11:42:12 INFO spark.SecurityManager: SecurityManager: authentication disabled; ui acls disabled; users with view permissions: Set(root); users with modify permissions: Set(root)

  14. 17/12/28 11:42:12 INFO yarn.Client: Submitting application 9 to ResourceManager

  15. 17/12/28 11:42:12 INFO impl.YarnClientImpl: Submitted application application_1514254657629_0009

  16. 17/12/28 11:42:13 INFO yarn.Client: Application report for application_1514254657629_0009 (state: ACCEPTED)

  17. 17/12/28 11:42:13 INFO yarn.Client:

  18.     client token: N/A

  19.     diagnostics: N/A

  20.     ApplicationMaster host: N/A

  21.     ApplicationMaster RPC port: -1

  22.     queue: default

  23.     start time: 1514432532552

  24.     final status: UNDEFINED

  25.     tracking URL: http://master:8088/proxy/application_1514254657629_0009/

  26.     user: root

  27. 17/12/28 11:42:14 INFO yarn.Client: Application report for application_1514254657629_0009 (state: ACCEPTED)

  28. ...

  29. 17/12/28 11:42:22 INFO yarn.Client: Application report for application_1514254657629_0009 (state: RUNNING)

  30. 17/12/28 11:42:22 INFO yarn.Client:

  31.     client token: N/A

  32.     diagnostics: N/A

  33.     ApplicationMaster host: 192.168.111.239

  34.     ApplicationMaster RPC port: 0

  35.     queue: default

  36.     start time: 1514432532552

  37.     final status: UNDEFINED

  38.     tracking URL: http://master:8088/proxy/application_1514254657629_0009/

  39.     user: root

  40. 17/12/28 11:42:23 INFO yarn.Client: Application report for application_1514254657629_0009 (state: RUNNING)

  41. ...

  42. 17/12/28 11:42:39 INFO yarn.Client: Application report for application_1514254657629_0009 (state: FINISHED)

  43. 17/12/28 11:42:39 INFO yarn.Client:

  44.     client token: N/A

  45.     diagnostics: N/A

  46.     ApplicationMaster host: 192.168.111.239

  47.     ApplicationMaster RPC port: 0

  48.     queue: default

  49.     start time: 1514432532552

  50.     final status: SUCCEEDED

  51.     tracking URL: http://master:8088/proxy/application_1514254657629_0009/

  52.     user: root

  53. 17/12/28 11:42:39 INFO util.ShutdownHookManager: Shutdown hook called

  54. 17/12/28 11:42:39 INFO util.ShutdownHookManager: Deleting directory /tmp/spark-add007da-644d-47f5-99be-2ce1ddf89a4f

  • 检查输出

  1. root@ubuntu238:/usr/local/hadoop-2.6.1# ./bin/hdfs dfs -ls /user/root/outputFile

  2. 17/12/28 13:09:27 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

  3. Found 3 items

  4. -rw-r--r--   3 root supergroup          0 2017-12-28 11:42 /user/root/outputFile/_SUCCESS

  5. -rw-r--r--   3 root supergroup        144 2017-12-28 11:42 /user/root/outputFile/part-00000

  6. -rw-r--r--   3 root supergroup        100 2017-12-28 11:42 /user/root/outputFile/part-00001

  7. root@ubuntu238:/usr/local/hadoop-2.6.1# ./bin/hdfs dfs -text /user/root/outputFile/part-00000

  8. 17/12/28 13:10:01 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

  9. (Python,2)

  10. (Interactive,1)

  11. (R,,1)

  12. (can,1)

  13. (Java,,1)

  14. (Shell,1)

  15. (Alternatively,,1)

  16. (shell:,1)

  17. (Scala,,1)

  18. (Python,,2)

  19. (prefer,1)

  20. (engine,1)

  21. (##,1)

  22. root@ubuntu238:/usr/local/hadoop-2.6.1# ./bin/hdfs dfs -text /user/root/outputFile/part-00001

  23. 17/12/28 13:10:26 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

  24. (you,2)

  25. (if,1)

  26. (APIs,1)

  27. (that,1)

  28. (high-level,1)

  29. (optimized,1)

  30. (in,1)

  31. (an,1)

  32. (and,2)

  33. (use,1)

  34. (the,1)




原文作者:HelloTech技术派;如有侵权,请联系管理员删除。

下一篇: Spark集群搭建
请登录后发表评论 登录
全部评论

注册时间:2017-12-05

  • 博文量
    181
  • 访问量
    73730