安裝idea,跑scala程式,下載

一隻勤奮愛思考的豬發表於2018-08-26

參考:http://www.cnblogs.com/zlslch/p/5880926.html
下載Hadoop:E:\software\Spark\spark-2.3.1-bin-hadoop2.7\spark-2.3.1-bin-hadoop2.7

解壓tgz檔案,下載7zip提取成tgz檔案(tar壓縮),再解壓;

按參考教程執行WordCount.scala的程式;
報這個錯:
windows idea Failed to locate the winutils binary in the hadoop binary path java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries.

參考教程定位問題的方法:
https://blog.csdn.net/woshixuye/article/details/53461975

分析問題
開啟原始碼,檢視getQualifiedBinPath方法

解決方案:

exeFile不存在會報錯,也就是fullExeName不存在。即windows中沒有配置HADOOP_HOME。

3 解決問題
配置環境變數E:\Program Files\hadoop-2.7.0重啟電腦。或者程式碼中設定System.setProperty(“hadoop.home.dir”, “E:\Program Files\hadoop-2.7.0”);還有一種可能HADOOP_HOME的bin目錄下根本沒有winutils.exe,下載地址https://github.com/srccodes/hadoop-common-2.2.0-bin

要跑scala程式:
安裝java 1.8
安裝scala
安裝idea
安裝Hadoop
每一個步驟都有設定

【沒有assembly目錄】spark2.0.0啟動時無法訪問spark-assembly-*.jar的解決辦法

但是spark升級到spark2以後,原有lib目錄下的大JAR包被分散成多個小JAR包,原來的spark-assembly-*.jar已經不存在,所以hive沒有辦法找到這個JAR包。

參考:
https://blog.csdn.net/dax1n/article/details/58197361

package com.zhouls.spark

import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
import java.lang.System


object WordCount {
  System.setProperty("hadoop.home.dir", "E:\\software\\Spark\\spark-2.3.1-bin-hadoop2.7\\spark-2.3.1-bin-hadoop2.7")
  def main(args: Array[String]): Unit = {
    /*
     * 第1步:建立spark的配置物件sparkconf,設定spark程式的執行時的配置資訊,
     * 例如說通過setMaster來設定程式要連結的spark叢集的master的URL,如果設定為local,則代表spark程式在本地執行,
     * 特別適合於機器配置條件非常差(例如只有1G記憶體)的初學者
     */
    val conf = new SparkConf()//建立SparkConf物件
    conf.setAppName("Wow,My First Spark App!")//設定應用程式的名稱,在程式執行的監控介面可以看到名稱
    conf.setMaster("local")//此時,程式在本地執行,不需要安裝spark叢集

    /*
     * 第2步:建立SparkContext物件
     * SparkContext是spark程式所有功能的唯一入口,無論是採用scala、java、pthon、R等都必須有一個SparkContext
     * SparkContext核心作用:初始化spark應用程式執行所需要的核心元件、包括DAGScheduler、TaskScheduler、SchedulerBackend
     * 同時還會負責spark程式往master註冊程式等
     * SparkContext是整個spark應用程式中最為至關重要的一個物件
     */
    val sc = new SparkContext(conf)

    /*
     * 第3步:根據具體的資料來源(HDFS、HBase、Local FS、DB、S3等)通過SparkContext來建立RDD
     * RDD的建立基本有三種方式:根據外部的資料來源(如HDFS)、根據Scala集合、由其它的RDD運算元據會被RDD劃分成
     * 一系列的Partitions,分配到每個Partition的資料屬於一個Task的處理範疇
     */
    // val lines:RDD[String] = sc.textFile("D://SoftWare//spark-1.6.2-bin-hadoop2.6//README.md", 1)//path指的是檔案路徑,minPartitions指的是最小並行度
    val lines = sc.textFile("E://software//Spark//spark-2.3.1-bin-hadoop2.7//spark-2.3.1-bin-hadoop2.7//README.md", 1)//path指的是檔案路徑,minPartitions指的是最小並行度

    /*
     * 第4步:對初始的RDD進行Transformation級別的處理,例如map、filter等高階函式等的程式設計,來進行具體的資料計算
     *  第4.1步:將每一行的字串拆分成單個的單詞
     */
    val words = lines.flatMap{ line => line.split(" ")}//對每一行的字串進行單詞拆分並把所有行的拆分結果通過flat合併成為一個

    /*
    * 4.2步:在單詞拆分的基礎上對每個單詞例項計數為1,也就是 word => (word,1)
    */
    val pairs = words.map { word => (word,1) }

    /*
     * 4.3步:在每個單詞例項計數為1基礎之上統計每個單詞在檔案中出現的總次數
     */
    val wordCounts =  pairs.reduceByKey(_+_)//對相同的key,進行value的累計(包括local和reducer級別同時reduce)
    wordCounts.foreach(wordNumberPair => println(wordNumberPair._1 + ":" + wordNumberPair._2))

    /*
     * 第5步
     */
    sc.stop();
  }

相關文章