Spark的環境搭建以及簡單的eclipse的兩種執行方式--standalone和yarn
前言:會一些linux的基礎,以及java基礎。以及是先搭建好java環境,搭建環境是單機版。假定ip:192.168.248.133
步入正軌,我們直接來說說怎麼搭建一個基於hadoop的spark環境。目的能夠讓spark將job提交到hadoop上處理。利用hadoop的分散式框架。
第一步:搭建hadoop的單機環境
1.在/etc/hostname 下修改對應的名字。 比如Master
2.修改etc/hosts 修改成192.168.248.133Master
3.首先在ubuntu上配置ssh免密碼。
a.安裝ssh : apt-get install ssh openssh-server
b.cd ~/.ssh(如果顯示檔案不存在。先輸入ssh localhost命令)
c.ssh-keygen -t rsa (一直按回車)
d. cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys (將生成的公鑰新增到ssh中)
e.嘗試使用ssh localhost 進入 exit退出
4.下載hadoop2.6.0,並完成相應的配置
a.下載hadoop:wget http://apache.fayea.com/hadoop/core/hadoop-2.6.0/hadoop-2.6.0.tar.gz
b.解壓到安裝目錄下 tar -zxvf hadoop-2.6.0.tar.gz
c.我是解壓到 /home下的目錄.然後進入到hadoop的目錄下。
cd /opt/hadoop-2.6.0
就能看到hadoop的目錄結構了。
5.修改配置檔案 進入到hadoop目錄下的etc/hadoop目錄修改裡面的配置檔案
<configuration> <property> <name>hadoop.tmp.dir</name> <value>/usr/share/hadoop/tmp</value> </property> <property> <name>fs.defaultFS</name><configuration> <property> <name>dfs.namenode.secondary.http-address</name> <value>192.168.248.133:50090</value> </property> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>/usr/share/hadoop/tmp/dfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>/usr/share/hadoop/tmp/dfs/data</value> </property> <property> <name>dfs.permissions</name> <value>false</value> </property> </configuration>
c.編輯yarn-site.xm
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
d.編輯 slave (有幾個節點就新增幾個節點,如果是配置單機版,就將裡面的節點名改為主節點Master的節點名)
啟動hadoop
準備:切換 Hadoop 的模式,不管是從叢集切換到偽分散式,還是從偽分散式切換到叢集,如果遇到無法正常啟動的情況,可以刪除所涉及節點的臨時資料夾,這樣雖然之前的資料會被刪掉,但能保證叢集正確啟動。或者可以為叢集模式和偽分散式模式設定不同的臨時資料夾(未驗證)。所以如果叢集以前能啟動,但後來啟動不了,特別是 DataNode 無法啟動,不妨試著刪除所有節點(包括 Slave 節點)上的 tmp 資料夾,重新執行一次 bin/hdfs namenode -format,再次啟動試試。
6.啟動hadoop
a.cd /opt/hadoop-2.6.0
b.bin/hdfs namenode -format # 首次執行需要執行初始化,後面不再需要
sbin/start-all.sh
c.通過命令jps可以檢視各個節點所啟動的程序(我這個是事先搭建好了spark,沒有搭建spark的就沒有6個程序,沒有master和worker程序)
6.節點都啟動好了之後,開啟她的監控頁面 Master:8088
可以看到一個活躍的節點。到此hadoop環境已經搭建完成。需要優化可以在配置檔案裡新增一些優化資訊。比如說日誌的配置等等
第二步:搭建spark的單機環境
1.下載spark1.6.0.雖然現在spark2.0已經出來了,但是使用的不是太多。我們還是使用1.6.0的版本
a.wget http://d3kbcqa49mib13.cloudfront.net/spark-1.6.1-bin-hadoop2.6.tgz
我們選擇預編譯好的spark1.6.1的版本。也可自行編譯。
2.同上hadoop。我們將其解壓到安裝目錄下
tar -zxvf spark-1.6.1-bin-hadoop2.6.tgz
改個名字吧,這個資料夾名字有點長。 mv spark-1.6.1-bin-hadoop2.6 spark1.6
3.修改配置檔案
a.將spark1.6裡面的conf資料夾裡面的模板檔案全部替換成使用的檔案。比如說 mv spark-env.sh.tmp spark-env.sh
在spark-env.sh中新增
export JAVA_HOME=
export HADOOP_HOME=
export SPARK_MASTER_IP=Master
#export SPARK_MASTER_HOSTS=192.168.244.133
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export SCALA_HOME=/opt/scala-2.11.8
export SPARK_YARN_USER_ENV="CLASSPATH=/opt/hadoop-2.6.0/etc/hadoop"
export SPARK_DIST_CLASSPATH=$(/opt/hadoop-2.6.0/bin/hadoop classpath)
export SPARK_WORKER_MEMORY=2g
b.修改slave檔案。將localhost換成Master
4.安裝scala
a.下載scala wget http://downloads.lightbend.com/scala/2.11.8/scala-2.11.8.tgz
b.將scala解壓到安裝目錄 tar -zxvf scala-2.11.8.tgz
c.將scala的路徑配置到環境變數裡。
在/etc/profile中新增
export SCALA_HOME=/opt/scala-2.11.8
export PATH=$SCALA_HOME/bin:$PATH
5.到此spark的單機版搭建完成。啟動spark。
a.在spark安裝目錄下輸入sbin/start-all.sh
b.jps輸入我們就能看見worker和master節點了。
6.開啟她的監控頁面 Master:8080就能看見spark的監控頁面
到這一步就代表spark已經搭建完成了。現在已經可以在spark上跑程式碼啦。
第三步:將eclipse作為開發環境
a.將hadoop-eclipse-plugin-2.6.0.jar放到eclipse裡面的plugin資料夾目錄下。
b. 啟動eclipse。在eclipse中的window的preferences的Hadoop Map/Reduce下新增hadoop的路徑。
c.建立一個hadoop的location
第四步:建立工程
1.建立一個簡單的java工程。
a.在工程裡面建立三個目錄,分別是conf,lib,yarn
b.將spark目錄下的conf下的所有配置檔案放入到conf裡面,將spark裡面的lib下的spark-assembly-1.6.1-hadoop2.6.0.jar放入到lib,將hadoop下的etc下的hadoop裡面core-site.xml hdfs-site.xml yarn-site.xml放到yarn資料夾裡面。
2.基於spark的standslone模式
a.建立一個stanalone類
直接上程式碼:
public class stanalone{
private static final Pattern SPACE = Pattern.compile(" ");
public static void main(String[] args) {
//建立sparkConf
SparkConf conf = new SparkConf().setAppName("standaloneTest").setMaster("spark://master:7077");
JavaSparkContext sc = new JavaSparkContext(conf);
JavaRDD rdd= Arrays.asList(1,2.2,5);
JavaRDD dis =sc.parallelize(rdd);
System.out.println("array num = "+dis.count());//控制檯打印出array的個數 4
sc.stop();
到此我們看見我們已經成功的在spark上運行了一個簡單的計數。
2.基於spark的yarn模式
a.建立一個stanalone類
直接上程式碼:
public class stanalone{
private static final Pattern SPACE = Pattern.compile(" ");
public static void main(String[] args) {
//建立sparkConf
SparkConf conf = new SparkConf().setAppName("yarn").setMaster("yarn-client");
//根據官網上面的提示
conf.set("spark.yarn.dist.files","/conf/yarn-site.xml");
conf.set("spark.yarn.jar","/lib/spark-assembly-1.6.1-hadoop2.6.0.jar");
JavaSparkContext sc = new JavaSparkContext(conf);
//將工程打包成jar test.jar
sc.addJar("test.jar");
JavaRDD rdd= Arrays.asList(1,2.2,5);
JavaRDD dis =sc.parallelize(rdd);
System.out.println("array num = "+dis.count());//控制檯打印出array的個數 4
sc.stop();
到此我們看見我們已經成功的在hadoop上運行了一個簡單的計數。
整個過程到此結束。