spark 環境搭建及幾種模式測試
08-20
spark 環境搭建及幾種模式測試
8、開啟hadoop集群已經配置了環境變數直接使用start-all.sh命令即可,在開啟的過程中需要多次的輸入密碼,因為沒有做SSH互信機制。確定全部進程開啟完畢後,使用命令JPS查看,出現6個進程,如圖:可以使用hadoop fs -mkdir ....創建文件夾。並且使用hadoop fs -ls /查看3,spark幾種模式的安裝部署1 spark本地模式的安裝最簡單的模式,不需要安裝spark即可使用,但是是單機模式,只能作為測試或者學習臨時使用。1,直接運行bin/spark-shell2、spark的webAPP端查看,直接打開網頁,輸入開啟的spark的主機名加默認埠號4040即可http://dandu:40403,在linux中新建文件me.txt,編寫內容,使用spark來載入文件val test = sc.textFile("README.md")表示已經載入成功4、使用count,進行單詞test.count()res1: Long=1表示文件只有一行內容。5,使用first來讀取文件的第一行內容。test.first()6,使用filter過濾文件的內容。val lines = test.filter(line => line.contains("ag"))已經統計完成但是沒有輸出結果。可以進行統計一下總共有多少也可以把兩次內容寫在一起test.filter(line => line.contains("ag")).count()相對複雜計算,如下表示首先把載入的文件使用map運算元,在運算元內使用匿名函數把數據按照空格切分,在使用size求出分割後的單詞字母數量。Map的內容做完後交給reduce運算元,在reduce內使用匿名函數進行判斷大小,最終結果得到文章內的單詞最大值test.map(line => line.split(" ").size).reduce((a, b) => if (a > b) a else b)繼續使用Math的運算,如下表示:首先導入java的Math包,把數據首先給map處理,map內使用匿名函數,把數據按照空格進行分割,並使用size統計字母數,map處理完後給reduce,reduce內有一個匿名函數,匿名函數使用了Math的max來求最大最小值。import java.lang.Mathtest.map(line => line.split(" ").size).reduce((a, b) => Math.max(a, b))繼續做hadoop的wordcount,hadoop使用了六十行左右的代碼,完成了一個單詞統計,在spark里大大超出了我們的想像,只需要一行代碼即可完成。如下表示:定義一個常量wordCounts,把載入的test交給flatMap處理,flatMap內有一個匿名函數,匿名函數內表示把test的內容按照空格進行分割,所有處理好後交給map處理,map內有一個匿名函數,匿名函數表示把妹一個單詞都變成單詞和1的形式,然後交給reduceByKey(按照key進行統計),內有一個匿名函數,匿名函數表示進來的所有的數進行累加。val wordCounts = test.flatMap(line => line.split(" ")).map(word => (word, 1)).reduceByKey((a, b) => a + b)已經計算完成,但是沒有輸出結果,需要如下運算元進行輸出。 wordCounts.collect()2 spark standalone模式的安裝1,配置spark-env.shHADOOP_CONF_DIR=/usr/hadoop-2.6.0/etc/hadoopJAVA_HOME=/usr/jdk1.7.0_25/SCALA_HOME=/usr/scala-2.10.4/SPARK_MASTER_IP=danduSPARK_MASTER_PORT=7077SPARK_MASTER_WEBUI_PORT=8080SPARK_WORKER_CORES=1SPARK_WORKER_MEMORY=1500mSPARK_WORKER_PORT=7078SPARK_WORKER_WEBUI_PORT=8081SPARK_WORKER_INSTANCES=12,配置spark-defaults.confspark.master spark://dandu:70773,配置slavesdandu4,使用如下命令啟動spark,啟動完成後使用jps查看進程,可以看到多了兩個進程Master和Workersbin/start-master.shsbin/start-slaves.sh使用 bin/spark-shell --master spark://dandu:7077開啟shell窗口,或者# bin/spark-shell --master local5,命令測試使用如下命令測試,計算PI的值/bin/spark-submit --class org.apache.spark.examples.SparkPi --master local examples/jars/spark-examples_2.11-2.1.2.jar經過運算得到如下結果val wordcount = sc.textFile("file:///testSpark/me.txt").flatMap(x=>x.split(" ")).map(x=>(x,1)).reduceByKey((a,b)=>a+b).collect()如下命令皆可使用集群測試。val word1 = textFile.flatMap(x=>x.split(" ")).map(x=>(x,1)).reduceByKey((a,b)=>a+b).sortByKey(true).collect()val word2 = textFile.flatMap(x=>x.split(" ")).map(x=>(x,1)).reduceByKey((a,b)=>a+b).map(x=>(x._2,x._1)).sortByKey(false).collect()sc.textFile("hdfs://http://spark.learn.com:8020/user/cyhp/spark/wc.input").flatMap(_.split(" ")).map((_,1)).reduceByKey(_ + _).collect 注意:遇到如下問題的解決方式1、集群的主機名和/etc/hosts能夠對應2、確保防火牆關閉確保有足夠大的內存,如果內存不夠,spark-env.sh的配置項SPARK_WORKER_MEMORY=1500m就不能夠滿足executor執行的使用。在集群運行的時候可以登錄網頁查看執行的詳細情況此時http://dandu:8080/可以登錄web瀏覽器訪問,如下:5.7 spark-shell運行在YARN上 HADOOP_CONF_DIR=/usr/hadoop-2.6.0/etc/hadoop/export SPARK_EXECUTOR_MEMORY=1024Mexport YARN_CONF_DIR=/usr/hadoop-2.6.0/etc/hadoopJAVA_HOME=/usr/jdk1.7.0_25/SCALA_HOME=/usr/scala-2.10.4/SPARK_MASTER_IP=danduSPARK_MASTER_PORT=7077SPARK_MASTER_WEBUI_PORT=8080SPARK_WORKER_CORES=1SPARK_WORKER_MEMORY=1500mSPARK_WORKER_PORT=7078SPARK_WORKER_WEBUI_PORT=8081SPARK_WORKER_INSTANCES=1(1)運行在yarn-client上 執行命令spark-shell --master yarn --deploy-mode client,稍等片刻即可看到如下輸出。[root@node1 ~]# spark-shell --master yarn --deploy-mode client說明:從上面的spark-shell日誌中看到spark-shell --master yarn-client命令從Spark2.0開始廢棄了,換成spark-shell --master yarn --deploy-mode client。(2)雖然已經開啟但是明顯存在問題 由於是在虛擬機上運行,虛擬內存可能超過了設定的數值。在執行命令spark-shell --master yarn-client時可能報錯,異常信息如下。以上為開啟過程中產生的問題解決辦法1: 先停止YARN服務,然後修改yarn-site.xml,增加如下內容 <property> <name>yarn.nodemanager.vmem-check-enabled</name> <value>false</value> </property> <property> <name>yarn.nodemanager.vmem-pmem-ratio</name> <value>4</value></property> 將新的yarn-site.xml文件分發到其他Hadoop節點對應的目錄下,最後在重新啟動YARN。 再執行spark-shell --master yarn-client命令時,就不會報上面異常了。解決辦法2:如果以上辦法沒有解決該問題,那麼增大spark-env.sh的executor和worker的內存下圖為內存分別增大後的效果,沒有出現任何警告或者異常,問題的原因是這是JVM申請的memory不夠導致無法啟動SparkContext,
推薦閱讀:
spark 環境搭建及幾種模式測試
spark安裝部署spark安裝前的環境準備
需要安裝jdk、scala、hadoop作為前提環境。1、安裝jdk1.7先卸載自帶的jdk,防止自帶的jdk和安裝的出現衝突。而且自帶的版本較低不能滿足現在軟體對jdk的要求。使用如下命令:
rpm –qa | grep java 用來查詢有多少幾個版本的java,我的電腦為例表示裝了兩個java需要卸載1.7的jdk,1.6系統使用,不允許卸載rpm -e java-1.7.0。45-2.4.3.3.el6.x86_64安裝jdk1.7 在用戶的環境變數中添加jdk目錄即可使用如下命令vi ~/.bash_profile添加如下信息
export JAVA_HOME=/usr/jdk1.7.0_25export PATH=$HOME/bin:$JAVA_HOME/bin:$PATH使配置文件生效source ~/.bash_profile使用java -version檢查jdk的版本號是否和自己安裝的一致2、安裝scala在用戶下的環境變數中添加scala的目錄即可export SCALA_HOME=/usr/scala-2.10.4export PATH=$HOME/bin:$JAVA_HOME/bin:$PATH:$SCALA_HOME/bin
4 安裝hadoop2.61、添加java主目錄位置,hadoop的底層是使用java開發,所以hadoop框架和程序的運行需要能夠找到java的環境。在hadoop的如下三個文件配置即可。vi hadoop-env.sh先把之前的java的環境變數去掉,重新寫自己安裝的jdkexport JAVA_HOME=/usr/jdk1.7.0_25/vi mapred-env.sh,直接修改把原來等號之後的去掉,填上自己的環境變數
export JAVA_HOME=/usr/jdk1.7.0_25/vi yarn-env.sh 修改yarn的java的環境變數export JAVA_HOME=/usr/jdk1.7.0_25/同時添加hadoop的環境變數到linux的用戶的環境變數中,但是hadoop和其他不同需要配置bin和sbin目錄export JAVA_HOME=/usr/jdk1.7.0_25export HADOOP_HOME=/usr/hadoop-2.6.0
export SCALA_HOME=/usr/scala-2.10.4export PATH=$HOME/bin:$JAVA_HOME/bin:$PATH:$SCALA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin配置hadoop的core-site.xml文件 vi /usr/hadoop-2.6.0/etc/hadoop/core-site.xml <property> <name>hadoop.tmp.dir</name> <value>/usr/hadoop-2.6.0/data/tmp</value></property>
<property> <name>fs.defaultFS</name> <value>hdfs://localhost:9000</value> </property>3,配置hadoop的hdfs-site.xml文件 <property> <name>dfs.replication</name> <value>1</value> </property>4,配置hadoop的mapred-site.xml文件
<property> <name>mapreduce.framework.name</name> <value>yarn</value> </property>5,配置hadoop的yarn-site.xml文件 <property> <name>yarn.resourcemanager.hostname</name> <value>dandu</value> </property><property>
<name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property>6,配置hadoop的slaves配置vi /usr/hadoop-2.6.0/etc/hadoop/slavesdandu//主機名:nodemanager和datanode地址Hadoop的單機模式配置完成。下面就可以格式化並且開啟hadoop了。7,格式化namenodebin/hdfs namenode -format想了解更多資料請加QQ:773640911
推薦閱讀:
※MapReduce Shuffle深入理解
※基於Alluxio的HDFS多集群統一入口的實現
※《Hadoop權威指南》書摘-初識Hadoop
※Hadoop機架感知
※Spark學習總結(一)