1. 程式人生 > >大資料學習第二天

大資料學習第二天

2. 部署spark 和 hadoop

 

Hadoop2.9.2+Spark2.4.0完全分散式叢集搭建過程

主要參考了這一篇https://blog.csdn.net/guoyu931206/article/details/84795385?tdsourcetag=s_pcqq_aiomsg

1.選取三臺伺服器(CentOS系統64位)


114.55.246.88 主節點
114.55.246.77 從節點
114.55.246.93 從節點


之後的操作如果是用普通使用者操作的話也必須知道root使用者的密碼,因為有些操作是得用root使用者操作。如果是用root使用者操作的話就不存在以上問題。
我是用root使用者操作的。

2.修改hosts檔案
修改三臺伺服器的hosts檔案。
  vi /etc/hosts
在原檔案的基礎最後面加上:
 

10.33.79.5 Master
10.33.79.6 Slave1

修改完成後,預設已經儲存。可以執行如下命令確認。

ping Master

3.ssh無密碼驗證配置
3.1 安裝和啟動ssh協議
  我們需要兩個服務:ssh和rsync。
  可以通過下面命令檢視是否已經安裝:
  rpm -qa|grep openssh
  rpm -qa|grep rsync
  如果沒有安裝ssh和rsync,可以通過下面命令進行安裝:
  yum install ssh (安裝ssh協議)
  yum install rsync (rsync是一個遠端資料同步工具,可通過LAN/WAN快速同步多臺主機間的檔案)
  service sshd restart (啟動服務)
  
  3.2 配置Master無密碼登入所有Salve
  配置Master節點,以下是在Master節點的配置操作。
  1)在Master節點上生成密碼對,在Master節點上執行以下命令:
  ssh-keygen -t rsa -P ''
  生成的金鑰對:id_rsa和id_rsa.pub,預設儲存在"/root/.ssh"目錄下。

ssh-keygen -t rsa -P ''
-P表示密碼,-P '' 就表示空密碼,也可以不用-P引數,這樣就要三車回車,用-P就一次回車。
該命令將在/root/.ssh目錄下面產生一對金鑰id_rsa和id_rsa.pub。

一般採用的ssh的rsa金鑰:
id_rsa     私鑰
id_rsa.pub 公鑰
下述命令產生不同型別的金鑰
ssh-keygen -t dsa
ssh-keygen -t rsa
ssh-keygen -t rsa1

  2)接著在Master節點上做如下配置,把id_rsa.pub追加到授權的key裡面去。
  cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
  3)修改ssh配置檔案"/etc/ssh/sshd_config"的下列內容,將以下內容的註釋去掉:
  RSAAuthentication yes # 啟用 RSA 認證
  PubkeyAuthentication yes # 啟用公鑰私鑰配對認證方式
  AuthorizedKeysFile .ssh/authorized_keys # 公鑰檔案路徑(和上面生成的檔案同)

  在伺服器上更改許可權
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys  


  4)重啟ssh服務,才能使剛才設定有效。
  service sshd restart
  5)驗證無密碼登入本機是否成功。
  ssh localhost
  6)接下來的就是把公鑰複製到所有的Slave機器上。使用下面的命令進行復制公鑰:
  scp /root/.ssh/id_rsa.pub [email protected]:/root/
  scp /root/.ssh/id_rsa.pub [email protected]:/root/
  
  接著配置Slave節點,以下是在Slave1節點的配置操作。
  1)在"/root/“下建立”.ssh"資料夾,如果已經存在就不需要建立了。
  mkdir /root/.ssh
  2)將Master的公鑰追加到Slave1的授權檔案"authorized_keys"中去。
  cat /root/id_rsa.pub >> /root/.ssh/authorized_keys
  3)修改"/etc/ssh/sshd_config",具體步驟參考前面Master設定的第3步和第4步。
  4)用Master使用ssh無密碼登入Slave1
  ssh 114.55.246.77
  5)把"/root/“目錄下的"id_rsa.pub"檔案刪除掉。
  rm –r /root/id_rsa.pub
  重複上面的5個步驟把Slave2伺服器進行相同的配置。
  
  3.3 配置所有Slave無密碼登入Master
  以下是在Slave1節點的配置操作。
  1)建立"Slave1"自己的公鑰和私鑰,並把自己的公鑰追加到"authorized_keys"檔案中,執行下面命令:
  ssh-keygen -t rsa -P ''
  cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
  2)將Slave1節點的公鑰"id_rsa.pub"複製到Master節點的”/root/"目錄下。
  scp /root/.ssh/id_rsa.pub [email protected]:/root/
  
  以下是在Master節點的配置操作。
  1)將Slave1的公鑰追加到Master的授權檔案"authorized_keys"中去。
  cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
  2)刪除Slave1複製過來的"id_rsa.pub"檔案。
  rm –r /root/id_rsa.pub

配置完成後測試從Slave1到Master無密碼登入。
  ssh 114.55.246.88
  按照上面的步驟把Slave2和Master之間建立起無密碼登入。這樣,Master能無密碼驗證登入每個Slave,每個Slave也能無密碼驗證登入到Master。

若已經配好了免密登入,直接從下面開始:
--------------------- 

4.安裝基礎環境(JAVA和SCALA環境)

4.1 Java1.8環境搭建
(1)下載 jdk-8u191-linux-x64.tar.gz
官網下載需要的Java版本,例如我需要將伺服器內的jdk1.7版本升到1.8
下載完之後上傳至伺服器:(SCP或者RZ) 
上傳至預設的路徑:/usr/java 

(2)安裝
tar -zxvf jdk-* -C /usr/local/java
檢視java的安裝路徑:
執行which java

檢視java的指向的連結:(修改後的)
如果指定的連結不是你想升級的java版本,那麼重新定位。
rm -f /usr/bin/java && ln -s /usr/local/java/jdk1.8.0_191/bin/java /usr/bin/java

(3)配置環境變數

[[email protected] ~]# vim /etc/profile.d/custom.sh
[[email protected] ~]# cat /etc/profile.d/custom.sh
#!/bin/bash
#java path
export JAVA_HOME=/usr/local/java/jdk1.8.0_191
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib

(4)環境變數生效
source /etc/profile.d/custom.sh

(5)檢視JDK版本

[[email protected] ~]# java -version
java version "1.8.0_112"
Java(TM) SE Runtime Environment (build 1.8.0_112-b15)
Java HotSpot(TM) 64-Bit Server VM (build 25.112-b15, mixed mode)

--疑難問題

存在環境差異。上面的操作沒有起作用請新增如下操作

/usr/sbin/alternatives --install /usr/bin/java  java  /usr/java/jdk1.7.0_79/bin/java  17079  
/usr/sbin/alternatives --install /usr/bin/javac javac /usr/java/jdk1.7.0_79/bin/javac 17079  

上面兩行命令的中最後面的數字表示優先順序,建議根據版本號修改,如我的JDK版本為1.7.0_79,則為17079

檢視可用的版本資訊
/usr/sbin/alternatives --display java  


更改版本資訊
/usr/sbin/alternatives --config java
/usr/sbin/alternatives --config javac  

 

4.2 Scala2.12.8 環境搭建

tar -zxvf scala-2.12.8.tgz
mv scala-2.12.8 /usr/share

vim /etc/profile.d/custom.sh
export SCALA_HOME=/usr/share/scala-2.12.8
export PATH=$SCALA_HOME/bin:$PATH

source /etc/profile.d/custom.sh

 

5.Hadoop2.9.2完全分散式搭建
以下是在Master節點操作:
  1)下載二進位制包hadoop-2.9.2.tar.gz
  2)解壓並移動到相應目錄,我習慣將軟體放到/opt目錄下,命令如下:
  tar -zxvf hadoop-2.9.2.tar.gz
  mv hadoop-2.9.2 /opt
  3)修改相應的配置檔案。
  修改vim /etc/profile.d/custom.sh,增加如下內容:

export HADOOP_HOME=/opt/hadoop-2.9.2/
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"

修改完成後執行:
  source /etc/profile.d/custom.sh


修改$HADOOP_HOME/etc/hadoop/hadoop-env.sh,修改JAVA_HOME 如下:

export JAVA_HOME=/usr/local/java/jdk1.8.0_191

這裡也可以不修改

修改$HADOOP_HOME/etc/hadoop/slaves,將原來的localhost刪除,改成如下內容:

Slave1
Slave2

修改$HADOOP_HOME/etc/hadoop/core-site.xml

<configuration>
      <property>
          <name>fs.defaultFS</name>
          <value>hdfs://Master:9000</value>
      </property>
      <property>
         <name>io.file.buffer.size</name>
         <value>131072</value>
     </property>
     <property>
          <name>hadoop.tmp.dir</name>
          <value>/opt/hadoop-2.9.2/tmp</value>
     </property>
</configuration>

修改$HADOOP_HOME/etc/hadoop/hdfs-site.xml

<configuration>
    <property>
      <name>dfs.namenode.secondary.http-address</name>
      <value>Master:50090</value>
    </property>
    <property>
      <name>dfs.replication</name>
      <value>2</value>
    </property>
    <property>
      <name>dfs.namenode.name.dir</name>
      <value>file:/opt/hadoop-2.9.2/hdfs/name</value>
    </property>
    <property>
      <name>dfs.datanode.data.dir</name>
      <value>file:/opt/hadoop-2.9.2/hdfs/data</value>
    </property>
</configuration>


複製template,生成xml,命令如下:
  cp mapred-site.xml.template mapred-site.xml
修改$HADOOP_HOME/etc/hadoop/mapred-site.xml

<configuration>
 <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
  </property>
  <property>
          <name>mapreduce.jobhistory.address</name>
          <value>Master:10020</value>
  </property>
  <property>
          <name>mapreduce.jobhistory.address</name>
          <value>Master:19888</value>
  </property>
</configuration>

修改$HADOOP_HOME/etc/hadoop/yarn-site.xml

<configuration>
     <property>
         <name>yarn.nodemanager.aux-services</name>
         <value>mapreduce_shuffle</value>
     </property>
     <property>
         <name>yarn.resourcemanager.address</name>
         <value>Master:8032</value>
     </property>
     <property>
         <name>yarn.resourcemanager.scheduler.address</name>
         <value>Master:8030</value>
     </property>
     <property>
         <name>yarn.resourcemanager.resource-tracker.address</name>
         <value>Master:8031</value>
     </property>
     <property>
         <name>yarn.resourcemanager.admin.address</name>
         <value>Master:8033</value>
     </property>
     <property>
         <name>yarn.resourcemanager.webapp.address</name>
         <value>Master:8088</value>
     </property>
</configuration>

4)複製Master節點的hadoop資料夾到Slave1和Slave2上。
  scp -r /opt/hadoop-2.9.2 [email protected]:/opt
  scp -r /opt/hadoop-2.9.2 [email protected]:/opt

5)在Slave1和Slave2上分別修改/etc/profile.d/custom.sh,過程同Master一樣。
6)在Master節點啟動叢集,啟動之前格式化一下namenode:
  hadoop namenode -format
  啟動:
  /opt/hadoop-2.9.2/sbin/start-all.sh
  至此hadoop的完全分散式環境搭建完畢。
  
7)檢視叢集是否啟動成功:
  jps
  Master顯示:
  SecondaryNameNode
  ResourceManager
  NameNode
  
  Slave顯示:
  NodeManager
  DataNode

--------------------- 

6.Spark2.4.0完全分散式環境搭建(standalone mode)
以下操作都在Master節點進行。
  1)下載二進位制包spark-2.4.0-bin-hadoop2.7.tgz
  2)解壓並移動到相應目錄,命令如下:
  tar -zxvf spark-2.4.0-bin-hadoop2.7.tgz
  mv spark-2.4.0-bin-hadoop2.7 /opt
  3)修改相應的配置檔案。
  修改/etc/profie,增加如下內容:

export SPARK_HOME=/opt/spark-2.4.0-bin-hadoop2.7/
export PATH=$PATH:$SPARK_HOME/bin

進入/opt/spark-2.4.0-bin-hadoop2.7/conf
複製 spark-env.sh.template 成 spark-env.sh
  cp spark-env.sh.template spark-env.sh
修改$SPARK_HOME/conf/spark-env.sh,新增如下內容:
 

export JAVA_HOME=/usr/local/java/jdk1.8.0_191
export SCALA_HOME=/usr/share/scala-2.12.8/
export HADOOP_HOME=/opt/hadoop-2.9.2
export HADOOP_CONF_DIR=/opt/hadoop-2.9.2/etc/hadoop
export YARN_CONF_DIR=/opt/hadoop-2.9.2/etc/hadoop
export SPARK_MASTER_IP=10.33.79.6
export SPARK_MASTER_HOST=10.33.79.6
export SPARK_LOCAL_IP=10.33.79.6
export SPARK_WORKER_MEMORY=1g
export SPARK_WORKER_CORES=2
export SPARK_HOME=/opt/spark-2.4.0-bin-hadoop2.7
export SPARK_DIST_CLASSPATH=$(/opt/hadoop-2.9.2/bin/hadoop classpath)

複製slaves.template成slaves
  cp slaves.template slaves
修改$SPARK_HOME/conf/slaves,將原來的localhost刪除,如下內容:

Master
Slave1
Slave2

4)將配置好的spark檔案複製到Slave1和Slave2節點。
scp /opt/spark-2.4.0-bin-hadoop2.7 [email protected]:/opt
scp /opt/spark-2.4.0-bin-hadoop2.7 [email protected]:/opt


5)修改Slave1和Slave2配置。
  在Slave1和Slave2上分別修改 /etc/profile.d/custom.sh,增加Spark的配置,過程同Master一樣。
  在Slave1和Slave2修改$SPARK_HOME/conf/spark-env.sh,將export SPARK_LOCAL_IP=114.55.246.88改成Slave1和Slave2對應節點的IP。
6)在Master節點啟動叢集。
  /opt/spark-2.4.0-bin-hadoop2.7/sbin/start-all.sh
7)檢視叢集是否啟動成功:
  jps
  Master在Hadoop的基礎上新增了:
  Master
  
  Slave在Hadoop的基礎上新增了:
  Worker
-------------------