Apache Spark 是專爲大規模數據處理而設計的快速通用的計算引擎。Spark是UC Berkeley AMP lab (加州大學伯克利分校的AMP實驗室)所開源的類Hadoop MapReduce的通用並行框架,Spark,擁有Hadoop MapReduce所具備的優勢;但不一樣於MapReduce的是Job中間輸出結果能夠保存在內存中,從而再也不須要讀寫HDFS,所以Spark能更好地適用於數據挖掘與機器學習等須要迭代的MapReduce的算法。java
Spark 是一種與 Hadoop 類似的開源集羣計算環境,可是二者之間還存在一些不一樣之處,這些有用的不一樣之處使 Spark 在某些工做負載方面表現得更加優越,換句話說,Spark 啓用了內存分佈數據集,除了可以提供交互式查詢外,它還能夠優化迭代工做負載。node
Spark 是在 Scala 語言中實現的,它將 Scala 用做其應用程序框架。與 Hadoop 不一樣,Spark 和 Scala 可以緊密集成,其中的 Scala 能夠像操做本地集合對象同樣輕鬆地操做分佈式數據集。web
儘管建立 Spark 是爲了支持分佈式數據集上的迭代做業,可是實際上它是對 Hadoop 的補充,能夠在 Hadoop 文件系統中並行運行。經過名爲 Mesos 的第三方集羣框架能夠支持此行爲。Spark 由加州大學伯克利分校 AMP 實驗室 (Algorithms, Machines, and People Lab) 開發,可用來構建大型的、低延遲的數據分析應用程序。算法
192.168.174.141 hd1 master 192.168.174.142 hd2 slave1 192.168.174.143 hd3 slave2
useradd hadoop passwd hadoop New password: Retype new password: 受權 root 權限,在root下面加一條hadoop的hadoop ALL=(ALL) ALL #修改權限 chmod 777 /etc/sudoers vim /etc/sudoers ## Allow root to run any commands anywhere root ALL=(ALL) ALL hadoop ALL=(ALL) ALL #恢復權限 chmod 440 /etc/sudoers
#進入到個人home目錄, su - hadoop ssh-keygen -t rsa (連續按四個回車) #執行完這個命令後,會生成兩個文件id_rsa(私鑰)、id_rsa.pub(公鑰) #將公鑰拷貝到要免密登陸的機器上 ssh-copy-id hd2 ssh-copy-id hd3
#在h1,h2,h3機器上新建apps目錄用於存放hadoop和spark安裝包 mkdir -p /home/hadoop/apps/hadoop cd /home/hadoop/apps/hadoop #在hd1機器上 下載hadoop2.7.7(hd2,hd3上等在hd1把hadoop的相關配置改完後scp發送過去) wget https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-2.7.7/hadoop-2.7.7.tar.gz tar -zxvf hadoop-2.7.7.tar.gz #配置環境變量 sudo vim /etc/profile #添加HADOOP_HOME export HADOOP_HOME=/home/hadoop/apps/hadoop/hadoop-2.7.7 export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin #刷新環境變量 source /etc/profile #查看hadoop版本 hadoop version #配置Hadoop的JAVA_HOME cd /home/hadoop/apps/hadoop/hadoop-2.7.7/etc/hadoop vim hadoop-env.sh #大概在25行,添加 export JAVA_HOME=/opt/soft/java/jdk1.8.0_73 #修改配置文件 一、修改core-site.xml vim core-site.xml <configuration> <property> <name>fs.defaultFS</name> <value>hdfs://hd1:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>file:/home/hadoop/apps/hadoop/hadoop-2.7.7/tmp</value> </property> </configuration> 二、修改hdfs-site.xml vim hdfs-site.xml <configuration> <property> <name>dfs.namenode.secondary.http-address</name> <value>hd1:50090</value> </property> <property> <name>dfs.replication</name> <value>2</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:/home/hadoop/apps/hadoop/hadoop-2.7.7/tmp/dfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:/home/hadoop/apps/hadoop/hadoop-2.7.7/tmp/dfs/data</value> </property> </configuration> 三、修改mapred-site.xml #目錄下沒有這個文件,複製一份出來 cp mapred-site.xml.template mapred-site.xml vim mapred-site.xml <configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapreduce.jobhistory.address</name> <value>hd1:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>hd1:19888</value> </property> </configuration> 四、修改yarn-site.xml vim yarn-site.xml <configuration> <!-- Site specific YARN configuration properties --> <property> <name>yarn.resourcemanager.hostname</name> <value>hd1</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.log-aggregation-enable</name> <value>true</value> </property> <property> <name>yarn.log.server.url</name> <value>http://hd1:19888/jobhistory/logs</value> </property> <property> <name>yarn.nodemanager.pmem-check-enabled</name> <value>false</value> </property> <property> <name>yarn.nodemanager.vmem-check-enabled</name> <value>false</value> </property> </configuration> 五、修改slaves文件內容,該文件指定哪些服務器節點是datanode節點,刪除裏面的localhost cd /home/hadoop/apps/hadoop/hadoop-2.7.7/etc/hadoop vim slaves hd1 hd2 hd3 #以上全部配置文件已經配好的,在hd1上將配置好的hadoop-2.7.7目錄複製到hd2,hd3相同目錄 cd /home/hadoop/apps/hadoop scp -r hadoop-2.7.7 hadoop@hd2:/home/hadoop/apps/hadoop/ scp -r hadoop-2.7.7 hadoop@hd3:/home/hadoop/apps/hadoop/ scp /etc/profile root@hd2:/etc/ 並在hd2上執行:source /etc/profile scp /etc/profile root@hd3:/etc/ 並在hd3上執行:source /etc/profile # 格式化集羣操做 #格式化namenode和datanode並啓動,(在hd1(master)上執行就能夠了 不須要在(hd2,hd3)slave上執行) hdfs namenode -format #關閉全部機器防火牆 service iptables stop #啓動hadoop集羣 #依次執行兩個命令 #啓動hdfs start-dfs.sh #再啓動 start-yarn.sh #直接用一個命令也能夠 start_all.sh #驗證是否啓動成功,缺乏如下任一進程都表示出錯 #在hd1,hd2,hd3分別使用jps命令,能夠看到 #hd1中顯示 56310 NameNode 56423 DataNode 56809 ResourceManager 56921 NodeManager 56634 SecondaryNameNode # hd2中顯示 16455 NodeManager 16348 DataNode #hd3顯示 13716 DataNode 13823 NodeManager #查看集羣web頁面 hdfs頁面:http://hd1:50070/ 或者http://192.168.174.141:50070/
yarn頁面:http://hd1:8088/ 或者http://192.168.174.141:8088/
#中止集羣命令:stop_dfs.sh和stop_yarn.sh或者stop_all.sh
以上Hadoop的集羣搭建過程已大功告成!shell
依賴環境:Scala Spark是使用Scala編寫的,用Scala編寫Spark任務能夠像操做本地集合對象同樣操做分佈式數據集RDD 安裝Scalla和安裝jdk一模一樣的操做,我這裏給出scala的下載地址:https://downloads.lightbend.com/scala/2.11.7/scala-2.11.7.tgz #安裝完scala能夠查看版本 scala -version #這裏重點介紹Spark的安裝,相比於hadoop的安裝要簡單一些,並且步驟相似,話很少說,開始! #在hd1機器用hadoop用戶先建立spark的目錄 cd /home/hadoop/apps mkdir spark cd spark #下載spark安裝包 wget https://mirrors.tuna.tsinghua.edu.cn/apache/spark/spark-2.2.2/spark-2.2.2-bin-hadoop2.7.tgz #解壓 tar -zxvf /spark-2.2.2-bin-hadoop2.7.tgz #重命名 mv spark-2.2.2-bin-hadoop2.7 spark-2.2.2 #修改環境變量 vim /etc/profile export SPARK_HOME=/home/hadoop/apps/spark/spark-2.2.2 export PATH=$PATH:$SPARK_HOME/bin #從新加載環境 source /etc/profile #修改配置文件 cd /home/hadoop/apps/spark/spark-2.2.2/conf mv spark-env.sh.template spark-env.sh vim spark-env.sh #這裏介紹兩個spark的部署模式,一種是standalone模式,一種是spark on yarn模式,任選一種配置便可 #一、standalone模式 export JAVA_HOME=/opt/soft/java/jdk1.8.0_73 #Spark主節點的IP export SPARK_MASTER_IP=hd1 #Spark主節點的端口號 export SPARK_MASTER_PORT=7077 #二、spark on yarn配置 export JAVA_HOME=/opt/soft/java/jdk1.8.0_73 export HADOOP_CONF_DIR=/home/hadoop/apps/hadoop/hadoop-2.7.7/etc/hadoop/ #修改slaves文件 cd /home/hadoop/apps/spark/spark-2.2.2/conf vim slaves hd2 hd3 #複製hd1中的spark到hd2和hd3機器中 cd /home/hadoop/apps/spark scp -r spark-2.2.2/ hadoop@hd2:/home/hadoop/apps/spark scp -r spark-2.2.2/ hadoop@hd3:/home/hadoop/apps/spark #配置環境變量:分別修改hd2,hd3環境變量或者直接將hd1上的/etc/profile文件複製到hd2和hd3上。 vim /etc/profile export SPARK_HOME=/home/hadoop/apps/spark/spark-2.2.2 export PATH=$PATH:$SPARK_HOME/bin source /etc/profile #至此,Spark集羣配置完畢,啓動Spark集羣。 #啓動spark集羣前要先啓動hadoop集羣。 #Spark集羣啓動 cd /home/hadoop/apps/spark/spark-2.2.2/sbin ./start-all.sh #測試Spark集羣是否正常啓動 #在hd1,hd2,hd3分別執行jps, 在hd1中顯示:Master 63124 Jps 56310 NameNode 56423 DataNode 63064 Master 56809 ResourceManager 56921 NodeManager 56634 SecondaryNameNode 在hd二、hd3中顯示:Worker 18148 Jps 16455 NodeManager 16348 DataNode 18079 Worker #測試spark-shell和頁面 cd /home/hadoop/apps/spark/spark-2.2.2/bin ./spark-shell #訪問頁面地址: http://hd1:8080/ 或者:http://192.168.174.141:8080/
http://hd1:4040/jobs/ 或者 http://192.168.174.141:4040/jobs/