ubuntu下安裝和配置hadoop+spark集群記錄
先前東看一個教程,西看一個教程,一直沒有安裝成功。後來搜到廈大林子雨老師團隊的大數據教程,真是相當得棒。我是按照這篇博客《Spark 2.0分散式集群環境搭建(Python版)》進行安裝和配置的。事畢,總結記錄一下。
1.安裝ubuntu系統
我是在學院近期配備的台式機上安裝的分散式系統,用我自己的機器做master節點,借用了代瑞同學的機器做slave節點。在安裝hadoop+spark之前需要先在機器上安裝linux系統。在安裝新系統時候要注意備份原始windows系統數據,防止安裝失敗導致數據丟失。分區和設置引導是兩個坑,如果設置失敗多在網上搜搜原因。實在不行,就只能將硬碟全部分區,再次安裝windows和ubuntu系統。
2.設置host
為了能和代瑞的電腦通信,我首先要知道她的ip地址,所以必須要先設置好host
#給我的電腦重新起一個名字叫做master,打開hostname文件,將原來的名字改成master#同理,給代瑞的電腦起一個slave01的名字sudo gedit /etc/hostname#添加本地ip和代瑞的ip到我的host文件和她的host文件里sudo gedit /etc/hosts#如下#127.0.0.1 localhost#10.139.6.125 master#10.139.6.142 slave01
3.創建用戶
在master和slave上創建相同的用戶方便對這個分散式系統進行管理。
#創建用戶hadoop,不帶參數的key m表示創建用戶目錄,帶參數的key s加上後面的value表示用戶的使用的shellsudo useradd -m hadoop -s /bin/bash #設置hadoop用戶的密碼sudo passwd hadoop#將hadoop用戶加入到sudo用戶組sudo adduser hadoop sudosudo apt-get updatesudo apt-get install vim
4.安裝ssh
安裝ssh是為了我可以在我的電腦上遠程地登錄代瑞的電腦,而不必在兩台電腦面前操作。安裝的ssh是字元界面,所以我不能在我的電腦上通過ssh使用代瑞電腦上的gui工具,比如gedit,這種情況下最好是使用vi。
#在master和slave01上分別執行sudo apt-get install openssh-serverssh localhostexitcd ~/.ssh/ssh-keygen -t rsacat ./id_rsa.pub >> ./authorized_keys #將本地的公鑰加入到authorized_keys#在master上執行scp ~/.ssh/id_rsa.pub hadoop@slave01:/home/hadoop#在slave01上執行cat ~/id_rsa.pub >> ~/.ssh/authorized_keys #將master的公鑰加入到slave01的authoried_keys里#在master上執行,遠程登錄slave01ssh slave01
5.安裝jdk
安裝jdk可以說從大一按到現在,但是在安裝hadoop+spark里它還是最容易出錯的步驟。在安裝的時候注意設置JAVA_HOME指到java的安裝目錄,如果不知道java的安裝目錄,可以通過which java 查看有那些可執行的文件名叫java,如果顯示了/usr/bin/java,繼續查看ll /esr/bin/java找到其指向,一直找到最後的java實際安裝位置。
6.安裝與配置hadoop
6.1安裝hadoop
hadoop在master節點和slave01上都要安裝,先在master節點上安裝配置完成,然後複製到slave01節點上。
#解壓縮到/usr/local目錄下sudo tar -zxvf ~/下載/hadoop-2.7.6.tar.gz -C /usr/local#改名sudo mv /usr/local/hadoop-2.7.6 /usr/local/hadoop#使hadoop成為hadoop文件夾下所有文件的所有者,-R表示遞歸地進行,類似於rm -rf里的rsudo chown -R hadoop /usr/local/hadoop#添加hadoop到.bashrc文件,~表示當前用戶的家目錄,.bashrc文件前面有一個點表示這個文件在文件夾中不顯示,除非使用llsudo gedit ~/.bashrc#export HADOOP_HOME=/usr/local/hadoop#export PATH=$PATH:$HADOOP_HOME/bin:%HADOOP_HOME/sbinsource ~/.bashrc
6.2配置hadoop
hadoop的所有的配置文件都在/usr/local/hadoop/etc/hadoop下
- 配置slaves文件,顧名思義slaves文件就是制定誰是這個hadoop系統里的slave節點,當再次增加slave節點的時候,還需要在所有節點的這個文件里添加新的slave名稱
在slaves文件中寫入
slave01
- 配置core-site.xml文件
<configuration> <property> <name>hadoop.tmp.dir</name> <value>file:/usr/local/hadoop/tmp</value> <description>Abase for other temporary directories.</description> </property> <property> <name>fs.defaultFS</name> <value>hdfs://master:9000</value> </property> </configuration>
- 配置hdfs-site.xml文件,dfs.replication表示文件的備份數量。按照hadoop分散式配置教程配置的時候,只配置里dfs.replication,在配置完成格式化name-node的時候報錯「hadoop格式化namenode時報異常: URI has an authority component。後來參考里單機版和偽分散式的配置和《hadoop格式化namenode時報異常: URI has an authority component》這篇博客,加了dfs.namenode.name.dir和dfs.datanode.data.dir兩個屬性 。
<configuration> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:/usr/local/hadoop/tmp/dfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:/usr/local/hadoop/tmp/dfs/data</value> </property> </configuration>
- 配置mapred-site.xml文件
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>
- 配置yarn-site.xml文件
<configuration> <!-- Site specific YARN configuration properties --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.resourcemanager.hostname</name> <value>master</value> </property> </configuration>
6.3配置hadoop
複製hadoop到slave01節點。
#在master節點上cd /usr/localtar -zcf ~/hadoop.master.tar.gz ./hadoopcd ~scp hadoop.master.tar.gz hadoop@slave01:/home/hadoop#在slave01節點上sudo rm -rf /usr/local/hadoopsudo tar -zxf hadoop.master.tar.gz -C /usr/local/sudo chown -R hadoop /usr/local/hadoop
6.4運行hadoop
#在master節點上cd /usr/local/hadoop#格式化namenode節點,只需要一次bin/hdfs namenode -format#運行hadoopsbin/start-all.sh
如果格式化報錯說「Error: JAVA_HOME is not set and could not be found」,需要在/usr/local/hadoop/etc/hadoop/hadoop-env.sh修改「export JAVA_HOME=${JAVA_HOME} 」為「export JAVA_HOME=實際安裝地址 」。
在安裝spark的時候也可能遇到spark work節點上啟動不了,提示「JAVA_HOME is not set」,類似hadoop,參考這篇博客《spark work節點上啟動不了 提示JAVA_HOME is not set》
#在master和slave01上運行jps查看
jps命令在slave01上運行沒有問題,但是我的master節點上運行jps的時候,shell提醒我「程序 jps 已包含在下列軟體包中」。應該是因為我的master節點上安裝過好幾次java。《在Ubuntu 14.04 LTS上安裝部署Hadoop 2.7.1(偽分散式)》參考里這篇博客里的解答,手動設置默認的JDK,問題解決。
至此,分散式hadoop安裝成功!
7.安裝與配置spark
7.1安裝spark
#在master節點上sudo tar -zxf ~/下載/spark-2.3.0-bin-hadoop2.7.tgz -C /usr/local/sudo mv /usr/local/spark-2.3.0-bin-hadoop2.7 /usr/local/sparksudo chown -R hadoop ./spark#配置.bashrc#export SPARK_HOME=/usr/local/spark#export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
7.2配置spark
spark的配置文件在/usr/local/spark/conf下
- 配置slaves文件,複製slaves.template 為slaves,在slaves中添加如下內容
slave01
- 配置spark-env.sh文件,複製spark-env.sh.template為spark-env.sh,在spark-env.sh中添加如下內容,其中SPARK_MASTER_IP為spark集群master節點的ip
export SPARK_DIST_CLASSPATH=$(/usr/local/hadoop/bin/hadoop classpath)export HADOOP_CONF_DIR=/usr/local/hadoop/etc/hadoopexport SPARK_MASTER_IP=10.139.6.125
- 複製master節點下/usr/local/spark到slave01
#在master節點上tar -zcf ~/spark.master.tar.gz /usr/local/sparkcd ~scp ./spark.master.tar.gz hadoop@slave01:/home/hadoop#在slave01節點上sudo rm -rf /usr/local/sparksudo tar -zxf ~/spark.master.tar.gz -C /usr/local/sudo chown -R hadoop /usr/local/spark
7.3啟動spark
- 啟動hadoop集群
cd /usr/local/hadoopsbin/start-all.sh
- 啟動spark集群
cd /usr/local/spark/#啟動master節點sbin/start-master.sh#啟動slaves節點sbin/start-slaves.sh
通過jps查看
7.4關閉spark
- 關閉master節點
sbin/stop-master.sh
- 關閉slaves節點
sbin/stop-slaves.sh
- 關閉hadoop集群
cd /usr/local/hadoop/sbin/stop-all.sh
至此,分散式集群的hadoop+spark安裝完成!
我遇到的所有問題和相關的解決方法(除去安裝ubuntu系統)已經全記錄在這裡了。
再次感謝廈大林子雨老師團隊的大數據相關博客和課程!
Spark 2.0分散式集群環境搭建(Python版)
Hadoop 2.7分散式集群環境搭建
Hadoop安裝教程_單機/偽分散式配置_Hadoop2.6.0/Ubuntu14.04_廈大資料庫實驗室博客
推薦閱讀:
※Spark可以完全替代hadoop嗎?
※開發人員學Linux(14):CentOS7安裝配置大數據平台Hadoop2.9.0
※hadoop偽分散式
※Zookeeper在哪些系統中使用,又是怎麼用的?
※知識布局-大數據apache基礎組件安裝文檔