Spark是一個分布式內存計算框架,可部署在YARN或者MESOS管理的分布式系統中(Fully Distributed),也可以以Pseudo Distributed方式部署在單個機器上面,還可以以Standalone方式部署在單個機器上面。運行Spark的方式有interactive和submit方式。本文中所有的操作都是以interactive方式操作以Standalone方式部署的Spark。具體的部署方式,請參考Hadoop Ecosystem。
HDFS是一個分布式的文件管理系統,其隨着Hadoop的安裝而進行默認安裝。部署方式有本地模式和集群模式,本文中使用的時本地模式。具體的部署方式,請參考Hadoop Ecosystem。
目標:
能夠通過HDFS文件系統在Spark-shell中進行WordCount的操作。
前提:
存在一個文件,可通過下面的命令進行查看。
hadoop fs -ls /
如果不存在,添加一個(LICENSE文件需要在本地目錄中存在)。更多hadoop命令,請參考hadoop命令。
hadoop fs -put LICENSE /license.txt
通過Web Browser查看Hadoop是否已經運行。
http://localhost:50070
步驟:
Step 1:進入Spark-shell交互式命令行。
spark-shell
Step 2:讀取license.txt文件,並check讀取是否成功。如果不存在,則提示如下錯誤。
val s = sc.textFile("hdfs://localhost:9000/license.txt")
s.count
Step 3:設定輸出的文件個數並執行統計邏輯
val numOutputFiles = 128
val counts = s.flatMap(line => line.split(" ")).map(word => (word, 1)).reduceByKey(_ + _, numOutputFiles)
Step 4:保存計算結果到HDFS中
counts.saveAsTextFile("hdfs://localhost:9000/license_hdfs.txt")
Step 5:在shell中查看結果
hadoop fs -cat /license_hdfs.txt/*
結論:
通過HDFS,我們可以在Spark-shell中輕松地進行交互式的分析(word count統計)。
參考資料:
http://hadoop.apache.org/docs/r1.0.4/cn/commands_manual.html
http://spark.apache.org/docs/latest/programming-guide.html
http://coe4bd.github.io/HadoopHowTo/sparkScala/sparkScala.html
http://coe4bd.github.io/HadoopHowTo/sparkJava/sparkJava.html