1. 程式人生 > >hadoop2.8.4+spark2.3.1叢集搭建

hadoop2.8.4+spark2.3.1叢集搭建

1、安裝虛擬機器和linux系統(本文示例Ubuntu16.04 x86_64系統)(此處略過,詳見《安裝linux虛擬機器》)

       為了更好使用,記得安裝virtual box的增強功能

                                                        

2、選擇軟體和更新,選擇中國軟體源,最優伺服器

          

       

3、固定本地的ip地址

        

修改如上右圖所示的網路,將其固定稱為區域網固定ip(因為dhcp服務,每次登陸可能ip地址會變動,所以必須將本地ip固定)

因為ip網段給的是192.168.99.0/24,所以我將固定ip地址為 master:192.168.99.100,data1:192.168.99.101,data2:192.168.99.102


4、修改hosts檔案,新增master 、data1、 data2的本地地址

5、更新apt-get 軟體索引

$sudo apt-get update


6、使用apt-get安裝vim,java,ssh,openssl

$ sudo apt-get install vim

$ sudo apt-get install default-jdk

$ sudo apt-get install ssh

$ sudo apt-get install openssl

7、檢視java版本已經安裝路徑

$ java -version


$ update-alternatives –display java    #(檢視安裝路徑)

8、配置ssh免密登入

#生成金鑰檔案

$ ssh-keygen -t rsa -P "" -f~/.ssh/id_rsa

金鑰檔案:/home/hduser/.ssh/id_rsa.pub(注意自己的使用者組名稱)

檢視金鑰檔案

$ ls ~/.ssh/

將產生的key放置到許可證檔案中

$ cat ~/.ssh/id_rsa.pub >>~/.ssh/authorized_keys

登入master檢視是否配置成功

$ ssh master

如果不需要密碼登入即為成功(第一次登入需要輸入yes),退出 $ exit

9、下載並安裝hadoop,Scala,spark

注:第一次使用火狐時,需要改主頁,如:www.baidu.com

,因為火狐的預設主頁是推特,無法訪問,預設搜尋引擎是谷歌,也無法訪問,,所以使用百度作為主頁比較好

滑鼠右鍵,複製連結地址

滑鼠右鍵,複製連結地址


任選一個滑鼠右鍵,複製當前連結

檢視下載檔案

$ ls ~/

接下來的指令將不細說,百度可查

解壓包

$ tar zxvf hadoop-2.8.4.tar.gz

$ tar xvf scala-2.12.6.tgz

$ tar xvf spark-2.3.1-bin-hadoop2.7.tgz

移動包

$ sudo mv hadoop-2.8.4 /usr/local/hadoop

$ sudo mv spark-2.3.1-bin-hadoop2.7/usr/local/spark

$ sudo mv scala-2.12.6 /usr/local/scala

給/usr/local許可權

$ sudo chown -R hduser:hduser /usr/lcoal

10、修改使用者環境變數和配置檔案

$ vim ~/.bashrc

輸入i 進入插入模式

輸入

#Hadoop Variables

exportJAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64

exportCLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

export HADOOP_HOME=/usr/local/hadoop

export PATH=$PATH:$HADOOP_HOME/bin

export PATH=$PATH:$HADOOP_HOME/sbin

export HADOOP_MAPPED_HOME=$HADOOP_HOME

export HADOOP_COMMON_HOME=$HADOOP_HOME

export HADOOP_HDFS_HOME=$HODOOP_HOME

export CLASSPATH=$CLASSPATH:/usr/local/hadoop/lib/*:.

export YARN_HOME=$HADOOP_HOME

exportHADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native

exportHADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"

exportHADOOP_CONF_DIR=/usr/local/hadoop/etc/hadoop

export JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native:$JAVA_LIBRARY_PATH

#Hadoop Variables

#SCALA Variables

export PATH=${JAVA_HOME}/bin:${PATH}

exportHADOOP_CLASSPATH=${JAVA_HOME}/lib/tools.jar

export SCALA_HOME=/usr/local/scala

export PATH=$PATH:$SCALA_HOME/bin

export PATH=$PATH:$SCALA_HOME/sbin

#SCALA Variables

#SPARK Variables

export SPARK_HOME=/usr/local/spark

export PATH=$PATH:$SPARK_HOME/bin

exportSPARK_DIST_CLASSPATH=/usr/local/hadoop/bin/hadoop

exportPYTHONPATH=$SPARK_HOME/python/:$SPARK_HOME/python/lib/py4j-0.10.6-src.zip:$PYTHONPATH

#SPARK Variables

重新整理使用者變數

$ source ~/.bashrc

修改hadoop配置檔案 ,配置檔案目錄/usr/lcoal/hadoop/etc/hadoop

切換目錄

$ cd /usr/local/hadoop

$ cd ./etc/hadoop/

編輯hadoop-env.sh

JAVA_HOME=${JAVA_HOME}>>>>>JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64

編輯core-site.xml

<configuration>

<!--配置namenode的地址-->

 <property>

   <name>fs.default.name</name>

   <value>hdfs://master:9000</value>

 </property>

<!-- 指定hadoop執行時產生檔案的儲存目錄 -->

 <property>

   <name>hadoop.tmp.dir</name>

   <value>file:/usr/local/hadoop/hadoop_data/hdfs/tmp</value>

 </property>       

</configuration>

修改hdfs-site.xml

<!--指定hdfs的副本數-->

  <property>

       <name>dfs.replication</name>

        <value>1</value>

  </property>

<!--設定hdfs的許可權-->

  <property>

        <name>dfs.permissions</name>

         <value>false</value>

  </property>

<!--secondary name node web 監聽埠 -->

  <property>

        <name>dfs.namenode.secondary.http-address</name>

        <value>master:50090</value>

  </property>

<!--name node web 監聽埠 -->

  <property>

   <name>dfs.namenode.http-address</name>

    <value>master:50070</value>

  </property>

<!--NN所使用的元資料儲存-->

  <property>

   <name>dfs.namenode.name.dir</name>

   <value>file:/usr/local/hadoop/hadoop_data/hdfs/namenode</value>

  </property>

<!--存放 edit 檔案-->

  <property>

   <name>dfs.namenode.edits.dir</name>

   <value>file:/usr/local/hadoop/hadoop_data/hdfs/edits</value>

  </property>

<!--secondary namenode 節點儲存 checkpoint 檔案目錄-->

  <property>

    <name>dfs.namenode.checkpoint.dir</name>

   <value>file:/usr/local/hadoop/hadoop_data/hdfs/checkpoints</value>

  </property>

<!--secondary namenode 節點儲存 edits 檔案目錄-->

  <property>

   <name>dfs.namenode.checkpoint.edits.dir</name>

   <value>file:/usr/local/hadoop/hadoop_data/hdfs/checkpoints/edits</value>

  </property>

</configuration>

datanode節點(data1、data2)設定

<configuration>

<!--指定hdfs的副本數-->

 <property>

       <name>dfs.replication</name>

       <value>1</value>

 </property>

<!--設定hdfs的許可權-->

 <property>

        <name>dfs.permissions</name>

        <value>false</value>

 </property>

<!-- secondary name node web 監聽埠 -->

 <property>

        <name>dfs.namenode.secondary.http-address</name>

        <value>master:50090</value>

 </property>

<!-- name node web 監聽埠 -->

 <property>

   <name>dfs.namenode.http-address</name>

   <value>master:50070</value>

 </property>

<!-- DN所使用的元資料儲存-->

 <property>

   <name>dfs.datanode.name.dir</name>

   <value>file:/usr/local/hadoop/hadoop_data/hdfs/datanode</value>

 </property>

<!--存放 edit 檔案-->

 <property>

   <name>dfs.datanode.edits.dir</name>

   <value>file:/usr/local/hadoop/hadoop_data/hdfs/edits</value>

 </property>

 </configuration>

配置mapred-site.xml

<configuration>

<!-- 指定mr執行在yarn上 -->

 <property>

       <name>mapreduce.framework.name</name>

       <value>yarn</value>

 </property>

<property>

       <name>mapred.job.tracker</name>

       <value>master:54311</value>

</property>

<!--歷史服務的web埠地址  -->

 <property>

   <name>mapreduce.jobhistory.webapp.address</name>

   <value>master:19888</value>

 </property>

<!--歷史服務的埠地址-->

 <property>

   <name>mapreduce.jobhistory.address</name>

   <value>master:10020</value>

 </property>

<!--Uber執行模式-->

 <property>

   <name>mapreduce.job.ubertask.enable</name>

   <value>false</value>

 </property>

<!--是job執行時的臨時資料夾-->

   <property>

       <name>yarn.app.mapreduce.am.staging-dir</name>

       <value>hdfs://master:9000/tmp/hadoop-yarn/staging</value>

       <description>The staging dir used while submittingjobs.</description>

   </property>

   <property>

       <name>mapreduce.jobhistory.intermediate-done-dir</name>

       <value>${yarn.app.mapreduce.am.staging-dir}/history/done_intermediate</value>

   </property>

   <!--MR JobHistory Server管理的日誌的存放位置-->

   <property>

       <name>mapreduce.jobhistory.done-dir</name>

       <value>${yarn.app.mapreduce.am.staging-dir}/history/done</value>

   </property>

<property>

       <name>mapreduce.map.memory.mb</name>

       <value>512</value>

<description>每個Map任務的實體記憶體限制</description>

</property>

<property>

       <name>mapreduce.reduce.memory.mb</name>

       <value>1024</value>

<description>每個Reduce任務的實體記憶體限制</description>

</property>

<property>

       <name>yarn.app.mapreduce.am.resource.mb</name>

       <value>1024</value>

<description>MR ApplicationMaster佔用的記憶體量</description>

</property>

</configuration>

配置slaves

刪除localhost

新增

data1

data2

配置yarn-site.xml

<configuration>

<!-- Site specific YARN configurationproperties -->

<!-- 指定nodeManager元件在哪個機子上跑 -->

<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>

<!-- 指定resourcemanager元件在哪個機子上跑 -->

 <property>

   <name>yarn.resourcemanager.hostname</name>

   <value>master</value>

 </property>

 <!--resourcemanager web地址-->

 <property>

   <name>yarn.resourcemanager.webapp.address</name>

   <value>master:8088</value>

 </property>

<property> 

   <name>yarn.resourcemanager.address</name> 

   <value>master:8050</value> 

 </property> 

 <property> 

   <name>yarn.resourcemanager.scheduler.address</name> 

   <value>master:8030</value> 

 </property> 

 <property> 

   <name>yarn.resourcemanager.resource-tracker.address</name> 

   <value>master:8025</value> 

 </property>

<!--啟用日誌聚集功能-->

 <property>

   <name>yarn.log-aggregation-enable</name>

   <value>true</value>

 </property>

<!--在HDFS上聚集的日誌最多儲存多長時間-->

 <property>

   <name>yarn.log-aggregation.retain-seconds</name>

   <value>86400</value>

 </property>    

<property>

<discription>單個任務可申請最少記憶體,預設1024MB</discription> 

<name>yarn.scheduler.minimum-allocation-mb</name>

<value>64</value>

</property>

<property>

<discription>單個任務可申請最大記憶體,預設8192MB</discription> 

<name>yarn.scheduler.maximum-allocation-mb</name>

<value>1920</value>

</property>

<property>

<name>yarn.nodemanager.resource.memory-mb</name>

<discription>每個節點可用記憶體,單位MB</discription> 

<value>2048</value>

</property>

<property>

<description>Ratio between virtualmemory to physical memory when

setting memory limits for containers.Container allocations are

expressed in terms of physical memory, andvirtual memory usage

is allowed to exceed this allocation bythis ratio.

</description>

<name>yarn.nodemanager.vmem-pmem-ratio</name>

<value>4</value>

</property>

</configuration>

注:注意鍵值對閉合,以節點1G記憶體,磁碟足夠大配置

修改spark 配置檔案  配置檔案目錄:/usr/local/spark/conf

轉換目錄

cd /usr/local/spark

cd ./conf/

配置spark-env.sh

exportSPARK_DIST_CLASSPATH=/usr/local/hadoop/bin/hadoop

exportJAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64

export SCALA_HOME=/usr/local/scala

export HADOOP_HOME=/usr/local/hadoop

exportHADOOP_CONF_DIR=/usr/local/hadoop/etc/hadoop

export SPARK_HOME=/usr/local/spark

export SPARK_MASTER_IP=192.168.99.100#注意地址

export SPARK_WORKER_CORES=1

export SPARK_WORKER_MEMORY=512m

export SPARK_WORKER_INSTANCES=2

11、複製data1,data2節點

關閉master虛擬機器

複製-> data1->完全複製

複製->data2->完全複製

 

複製完成後進行網路修改,如之前所示,

將data1的ip改成192.169.99.101

將data1的主機名改成data1

將data2的ip改成192.168.99.102

將data2的主機名改成data2

將data的記憶體設定為1G或者2G

12、格式化namenode

在master節點使用指令

$ hdfs namenode -format

13、啟動hadoop

在master節點輸入

$ start-all.sh

將spark目錄裡jars裡面的jar包上傳到hdfs,並在配置檔案中新增此資訊

$ hadoop dfs -mkdir – p/user/spark_conf/spark_jars/

$ hadoop dfs -put /usr/local/spark/jars/*/user/spark_conf/spark_jars/

在/usr/local/spark/spark-defaults.conf

spark.yarn.archive=hdfs:///user/spark_conf/spark_jars/

14、啟動spark

$ spark-shell --master yarn

或者

$ pyspark --master yarn

15、到此為止,叢集就算搭建完成了,希望大家多多瞭解linux指令和hadoop原理之後再進行程式設計和任務提交執行,這樣更能去理解叢集的工作過程,事半功倍。