v1Z0G9-67285-FZG78-ZL3Q2-234JG 4C4EK-89KDL-5ZFP9-1LA5P-2A0J0 HY086-4T01N-CZ3U0-CV0QM-13DNU
1F04Z-6D111-7Z029-AV0Q4-3AEH8
5A02H-AU243-TZJ49-GTC7K-3C61N
第一步:安裝VMware,建立虛擬機Master,安裝Vim,Mysql(mysql也能夠暫且不裝,可是考慮到後面組件的擴展仍是先安上)。html
第二步:克隆虛擬機(選擇徹底克隆)rzxmater,分別命名爲rzxslave1,rzxslave2(這裏的命名能夠自行修改)。而後啓動三個虛擬機。 java
第四步:靜態Ip設置:node
![](http://static.javashuo.com/static/loading.gif)
其餘步驟按博文所說就能夠完成靜態IP的配置。
第五步:hosts配置,特別強調主機名稱不要含有下劃線"_",最好是純英文。 由於hadoopXML配置的時候部分value不能有下劃線,會報錯。mysql
192.168.8.137 rzxmaster 192.168.8.136 rzxslave1 192.168.8.138 rzxslave2
第六步:SSH免密碼登陸:linux
1 sudo apt-get update //更新源 2 sudo apt-get install openssh-server //安裝ssh服務器 3 sudo ps -e |grep ssh //查看ssh服務是否啓動 4 sudo service ssh start //開啓ssh服務 5 ssh-keygen -t rsa //生成公鑰密鑰 一路enter就好了 6 cat /home/cxin/.ssh/id_rsa.pub >>/home/cxin/.ssh/authorized_keys //將公鑰添加到用戶公鑰文件。
ssh的配置比較簡單教程也不少。不外乎以上幾條命令。在三臺機子上都進行了以下操做以後,要是rzxmaster免密碼登陸到rzxslave1,rzxslave2。須要把master的公鑰放到slave1,2的authorized_keys文件中,這裏只須要拷貝而後打開rzxslave1,2的authorized_keys文件粘貼上便可。保存以後重啓虛擬機。重啓以後在rzxmaster,輸入 ssh rzxslave1 若是不須要密碼就能登錄到rzxslave1說明成功,同理實驗rzxslave2。rzxmaster能夠登陸到全部slave節點則SSH設置完畢。
web
經過前面的準備工做咱們已經獲取到了全部須要的安裝包,設置好了靜態IP,配好了ssh免密碼登陸,接下就是集羣的安裝了。首先我全部的包都是安裝在當前用戶的根目錄下,也就是終端打開的目錄(通常是: /home/username username是當前的用戶名),這個目錄是當親前用戶的工做空間我把這個目錄的位置記做 basePath=/home/username .這個basePath能夠根據本身的喜愛安裝到別的目錄下。(basePath=="~"==/home/cxin,我這裏的basePath=/home/cxin)sql
三臺虛擬機分別以下:rzxmaster是主節點(datanode),rzxslave1,rzxslave2是分支節點(namenode)shell
192.168.8.137 rzxmasterapache
192.168.8.136 rzxslave1ubuntu
192.168.8.138 rzxslave2
爲了方便管理這裏在主目錄建了三個文件夾:Java,spark,hadoop. mkdir Java spark hadoop
如今將jdk,hadoop,scala,spark的安裝包分別傳到路徑basePath/Java,basePath/hadoop,basePah/spark下,(scala和spark的壓縮包都放在spark文件夾下)。
cxin@rzxmaster:~$ cd ~ cxin@rzxmaster:~$ pwd /home/cxin cxin@rzxmaster:~$ cd Java/ cxin@rzxmaster:~/Java$ tar -zxvf jdk-8u11-linux-x64.tar.gz cxin@rzxmaster:~/Java$ mv jdk-8u11-linux-x64 jdk1.8
cxin@rzxmaster:~/Java$ ls jdk1.8 cxin@rzxmaster:~/Java$ cd jdk1.8/ cxin@rzxmaster:~/Java/jdk1.8$ ls bin include lib README.html THIRDPARTYLICENSEREADME-JAVAFX.txt COPYRIGHT javafx-src.zip LICENSE release THIRDPARTYLICENSEREADME.txt db jre man src.zip cxin@rzxmaster:~/Java/jdk1.8$ pwd /home/cxin/Java/jdk1.8
解壓並修改了名稱,pwd命令獲取到了JAVA_HOME路徑: /home/cxin/Java/jdk1.8 下面配置環境變量:
#java export JAVA_HOME=/home/cxin/Java/jdk1.8 export JRE_HOME=$JAVA_HOME/jre export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
保存退出以後:輸入 source /etc/profile 使配置當即生效。
#Hadoop export HADOOP_HOME=/home/cxin/hadoop export CLASSPATH=.:$HADOOP_HOME/lib:$CLASSPATH export PATH=$PATH:$HADOOP_HOME/bin export PATH=$PATH:$HADOOP_HOME/sbin export HADOOP_MAPRED_HOME=$HADOOP_HOME export HADOOP_COMMON_HOME=$HADOOP_HOME export HADOOP_HDFS_HOME=$HADOOP_HOME export YARN_HOME=$HADOOP_HOME export HADOOP_ROOT_LOGGER=INFO,console export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
<configuration> <!-- 指定hdfs的namenode爲rzxmaster --> <property> <name>fs.defaultFS</name> <value>hdfs://rzxmaster:9000</value> </property> <!-- Size of read/write buffer used in SequenceFiles. --> <property> <name>io.file.buffer.size</name> <value>131072</value> </property> <!-- 指定hadoop臨時目錄,自行建立 --> <property> <name>hadoop.tmp.dir</name> <value>/home/cxin/hadoop/tmp</value> </property> </configuration>
<configuration> <!-- 備份數:默認爲3--> <property> <name>dfs.replication</name> <value>2</value> </property> <!-- namenode--> <property> <name>dfs.namenode.name.dir</name> <value>file:/home/cxin/hadoop/dfs/name</value> </property> <!-- datanode--> <property> <name>dfs.datanode.data.dir</name> <value>file:/home/cxin/hadoop/dfs/data</value> </property> <!--權限控制:false:不作控制即開放給他用戶訪問 --> <property> <name>dfs.permissions</name> <value>false</value> </property> </configuration>
<configuration> <!-- mapreduce任務執行框架爲yarn--> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <!-- mapreduce任務記錄訪問地址--> <property> <name>mapreduce.jobhistory.address</name> <value>rzxmaster:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>rzxmaster:19888</value> </property> </configuration>
其中還有不少具體應用須要的配置暫且不作配置。參數以下:
mapreduce.map.memory.mb | 1536 | Larger resource limit for maps. |
mapreduce.map.java.opts | -Xmx1024M | Larger heap-size for child jvms of maps. |
mapreduce.reduce.memory.mb | 3072 | Larger resource limit for reduces. |
mapreduce.reduce.java.opts | -Xmx2560M | Larger heap-size for child jvms of reduces. |
mapreduce.task.io.sort.mb | 512 | Higher memory-limit while sorting data for efficiency. |
mapreduce.task.io.sort.factor | 100 | More streams merged at once while sorting files. |
mapreduce.reduce.shuffle.parallelcopies | 50 | Higher number of parallel copies run by reduces to fetch outputs from very large number of maps. |
<configuration> <property> <description>The hostname of the RM.</description> <name>yarn.resourcemanager.address</name> <value>rzxmaster:8032</value> </property> <property> <name>yarn.resourcemanager.scheduler.address</name> <value>rzxmaster:8030</value> </property> <property> <name>yarn.resourcemanager.resource-tracker.address</name> <value>rzxmaster:8031</value> </property> <property>
<name>yarn.resourcemanager.admin.address</name> <value>rzxmaster:8033</value> </property> <property> <name>yarn.resourcemanager.webapp.address</name> <value>rzxmaster:8088</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value> </property> </configuration>
rzxslave1
rzxslave2
cxin@rzxmaster:~/hadoop/etc/hadoop$ cd ~ cxin@rzxmaster:~$ ls Desktop Downloads hadoop Music Public Templates Documents examples.desktop Java Pictures spark Videos //將java目錄發送到rzxslave1主機的主目錄下 cxin@rzxmaster:~$ scp -r Java cxin@rzxslave1:/home/cxin/ //將hadoop目錄發送到rzxslave1主機的主目錄下 cxin@rzxmaster:~$ scp -r hadoop cxin@rzxslave1:/home/cxin/
16002 Jps 7764 NameNode 7992 SecondaryNameNode 8152 ResourceManager
4529 NodeManager 6968 Jps 4383 DataNode
spark是依賴與scala和java,hadoop的,前面配置好了java,hadoop,這裏須要配置scala和spark的環境以及spark的詳細信息。
#scala export SCALA_HOME=/home/cxin/spark/scala2.11.8 export PATH=$SCALA_HOME/bin:$PATH #spark export SPARK_HOME=/home/cxin/spark/spark2.1
export SPARK_DIST_CLASSPATH=$(/home/cxin/hadoop/bin/hadoop classpath) #rzx----config SPARK_LOCAL_DIRS=/home/cxin/spark/spark2.1/local #配置spark的local目錄 SPARK_MASTER_IP=rzxmaster #master節點ip或hostname SPARK_MASTER_WEBUI_PORT=8085 #web頁面端口 #export SPARK_MASTER_OPTS="-Dspark.deploy.defaultCores=4" #spark-shell啓動使用核數 SPARK_WORKER_CORES=1 #Worker的cpu核數 SPARK_WORKER_MEMORY=512m #worker內存大小 SPARK_WORKER_DIR=/home/cxin/spark/spark2.1/worker #worker目錄 SPARK_WORKER_OPTS="-Dspark.worker.cleanup.enabled=true -Dspark.worker.cleanup.appDataTtl=604800" #worker自動清理及清理時間間隔 SPARK_HISTORY_OPTS="-Dspark.history.ui.port=18080 -Dspark.history.retainedApplications=3 -Dspark.history.fs.logDirectory=hdfs://rzxmaster:9000/spark/history" #history server頁面端口>、備份數、log日誌在HDFS的位置 SPARK_LOG_DIR=/home/cxin/spark/spark2.1/logs #配置Spark的log日誌 JAVA_HOME=/home/cxin/Java/jdk1.8 #配置java路徑 SCALA_HOME=/home/cxin/spark/scala2.11.8 #配置scala路徑 HADOOP_HOME=/home/cxin/hadoop/lib/native #配置hadoop的lib路徑 HADOOP_CONF_DIR=/home/cxin/hadoop/etc/hadoop/ #配置hadoop的配置路徑
spark.master spark://rzxmaster:7077 spark.eventLog.enabled true spark.eventLog.dir hdfs://rzxmaster:9000/spark/history spark.serializer org.apache.spark.serializer.KryoSerializer spark.driver.memory 1g spark.executor.extraJavaOptions -XX:+PrintGCDetails -Dkey=value -Dnumbers="one two three"
rzxmaster
rzxslave1
rzxslave2
#java export JAVA_HOME=/home/cxin/Java/jdk1.8 export JRE_HOME=$JAVA_HOME/jre export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH #Hadoop export HADOOP_HOME=/home/cxin/hadoop export CLASSPATH=.:$HADOOP_HOME/lib:$CLASSPATH export PATH=$PATH:$HADOOP_HOME/bin export PATH=$PATH:$HADOOP_HOME/sbin export HADOOP_MAPRED_HOME=$HADOOP_HOME export HADOOP_COMMON_HOME=$HADOOP_HOME export HADOOP_HDFS_HOME=$HADOOP_HOME export YARN_HOME=$HADOOP_HOME export HADOOP_ROOT_LOGGER=INFO,console export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib" #scala export SCALA_HOME=/home/cxin/spark/scala2.11.8 export PATH=$SCALA_HOME/bin:$PATH #spark export SPARK_HOME=/home/cxin/spark/spark2.1 export PATH=$SPARK_HOME/bin:$PATH
查看服務(rzxslave1,rzxslave2): jps
spark示例運行: ./bin/run-example SparkPi 2>&1 | grep "Pi is roughly" 計算圓周率。以下圖所示
至此說明spark配置成功,固然其餘的內容須要在使用的時候去排除bug,若是出現問題須要查看日誌信息找到問題出現的緣由,而後修改配置。
在配置的過程當中出現了不少的問題,包括:namenode,datanode啓動失敗,僞成功(存在守護線程可是實際服務爲啓動),spak-shell啓動失敗爆出資源沒法分配。因爲在配置的時候沒有作好問題的記錄,因此這裏列不出具體的異常信息。這裏一部分異常是因爲IP的設置和hosts中的配置不對應,一部分是ssh鏈接失敗,資源配置沒有根據虛擬機的配置作匹配。建議不要屢次格式化namenode,每次格式化都會生成一個clusterID,多個clusterID致使啓動報錯,如需格式化就必須清除dfs/name,dfs/data下的文件。
hadoop,spark只是基礎組建,提供文件系統和數據運算,hadoop生態還包括hive,habse,kafka...等數據存儲和分析的組件,後面能夠在此基礎上一步步安裝。