文章目錄
1. 注意,我的環境跟你的環境一樣嗎?
環境:原生 spark (版本到時候補,不在工作區)
系統:Ubuntu 16.04
Jar包版本:見文章尾部(太長啦,放開頭不美觀)
2. 如何執行spark-shell腳本?
首先呢,先運行你的 spark-shell 腳本。你肯定知道它是在 /spark/bin/ 目錄下的吧!
切換到 spark-shell sh腳本所在的目錄,然後執行它進入命令行。
$ cd /spark/bin/
$ ./spark-shell //我是執行命令
然後會打印一大串日誌信息,看見 文本形式輸出的 spark 圖標,並且 顯示了 spark> 命令行輸入的時候就是成功啦。
spark>
在這一大串日誌的信息中,我們要知道的其實就等同於以下代碼的效果:
//Scala 編程語言
val conf = new SparkConf().setMaster("local").setAppName("SparkSQL")
val sc = new SparkContext(conf)
第一行的作用是設置了 master 爲 本地local,並且應用app名叫做 SparkSQL。
分佈式集羣分爲 master 與 slaves(workers)。主機作爲調控中介的作用存在着,slaves是子機結點。拓展:master 和 slaves 成雙成對多好啊,對吧?而且好好地使用了很久了。但是呢,slaves 是僕人的意思,這就引起了一些文化人士的反對意見,認爲定義中含有歧視的成分,被要求修改!
第二行的意思是 new 了一個 SparkContext 。SparkContext 在Spark應用程序的執行過程中起着主導作用,它負責與程序和spark集羣進行交互,包括申請集羣資源、創建RDD、accumulators及廣播變量等。
每次執行 spark-shell 的時候,都會自動幫我們創建這個 sc (SparkContext),後面我們就可以在命令行中直接使用它了。當然你也可以自己重新創建。
3. 如何使用 spark-shell?Scala編程語言
原生的 spark-shell 只能使用 Scala 或者 Python 進行操作。我們使用的是 Scala 進行連接 Amazon S3。使用Python操作感覺很多坑,很多包都是沒有的,需要自己導入,感興趣的讀者可以自己去試試。
使用 Scala 在 spark-shell 中連接 s3
//set the configuration
sc.hadoopConfiguration.set("fs.s3a.access.key", "your access key")
sc.hadoopConfiguration.set("fs.s3a.secret.key", "your secret key")
sc.hadoopConfiguration.set("fs.s3a.endpoint", "endpoint:port ")
sc.hadoopConfiguration.set("fs.s3a.connection.ssl.enabled", "false")
//read
val myRdd = sc.textFile("s3a://bucketms/notebook/text")
//write
val myRDD.saveAsTextFile("s3a://bucketms/notebook/text")
//count text data num
myRdd.count
access key 和 secret key 可以理解爲用戶登陸的賬號與密碼,是由 s3服務器分配的。
endpoint:port 是你準備連接的 s3服務器的 ip地址與端口。
第四行的含義是禁用ssl。
附:使用到的包
需要用到的包要放在
spark 的 jar包 目錄下
1. aws java sdk jar包版本(aws服務)
aws-java-sdk-1.11.404.jar
aws-java-sdk-core-1.11.404.jar
aws-java-sdk-s3-1.11.404.jar
2. hadoop aws 包版本(aws服務)
hadoop-aws-3.0.3.jar
3. jackson包版本(數據綁定、註解)
注意 com.fasterxml.jackson 下的 jackon 包!!!
jackson-annotations-2.7.8.jar
jackson-core-2.7.8.jar
jackson-databind-2.7.8.jar
jackson-core-asl-1.9.13.jar
jackson-mapper-asl-1.9.13.jar