1. 程式人生 > 實用技巧 >效能優化 | MySQL 優化實施方案

效能優化 | MySQL 優化實施方案

目錄

Hadoop叢集配置


內容

實驗環境及軟體:

  • VMware Workstation15
  • CentOS 7.0或8.0
  • Hadoop-2.7.3
  • JDK

步驟:

  • 啟動至少兩臺虛擬客戶機
    自己安裝倆或以上CentOS虛擬機器,HadoopMaster和HadoopSlave

    注意,所有虛擬機器建立的使用者名稱應該相同,Hadoop通過主機名分辨不同的結點,不同結點主機名應該不同,但使用者名稱建議相同(可以減少需要修改的配置),如果不做配置,Hadoop檔案系統會預設讀取作業系統的使用者作為Hadoop的使用者名稱

  • Linux系統配置

  • Hadoop配置部署

  • 啟動Hadoop叢集


Linux系統配置

  1. 下載拷貝軟體包和資料包
    可以通過U盤、vmtools、共享資料夾、直接在虛擬機器內下載等方式獲取,需要注意的是,之後的靜態IP配置可能導致暫時通不了外網等情況,建議優先下載到Master伺服器。

    Hadoop的版本建議使用2.6.0左右,如果需要使用java外掛跑MapReduce,慎重選擇高版本Hadoop,Hadoop的eclipse外掛在2014年已經停止更新,最後版本為2.6.0。對於新版本的Hadoop而言,外掛所需要jar依賴包在版本和數量上已經發生了一些變化,即使可以通過修改外掛原始檔配置進行適配,也很可能在使用過程中產生問題。當然,也可以採用idea上的HadoopIntellijPlugin(適配3.2.1版本,沒用過):

    https://github.com/fangyuzhong2016/HadoopIntellijPlugin

    原Hadoop的eclipse外掛:

    https://github.com/winghc/hadoop2x-eclipse-plugin

  2. 配置自動時鐘同步

    這一步是為了能叢集內所有伺服器都用同一個時間,防止相互之間的日誌出錯。

    自動時鐘同步通過'crontab命令+ntpdate'或chrony實現。

    crontab是用來定期執行程式的命令,當安裝完成作業系統之後,預設便會啟動此任務排程命令。而crond程序每分鐘會定期檢查是否有要執行的任務,如果有要執行的任務,則自動執行該任務。
    參考:https://www.runoob.com/linux/linux-comm-crontab.html

    NTP是網路時間協議(Network Time Protocol),它是用來同步網路中各個計算機的時間的協議。
    從CentOS7.2開始,CentOS支援chrony(網路時間協議(NTP)的通用實現),而從CentOS8開始,不再支援ntp,只能使用chrony。
    安裝過程可參考:

    https://blog.csdn.net/weixin_42758707/article/details/94738761
    https://www.cnblogs.com/liushui-sky/p/9203657.html
    https://www.cnblogs.com/jhxxb/p/11526098.html
    https://blog.csdn.net/gaofei0428/article/details/103644371

    通過這些網站可知,crontab+ntpdate會定時即刻同步時間,會產生時間上的跳躍,在有其他定時程式的情況下可能會出錯。

    chrony的使用方法:

    首先修改時間源伺服器:

    開啟chrony配置檔案

    vim /etc/chrony.conf
    

    將第三行的地址改為:

    server us.pool.ntp.org iburst
    

    開啟並開機自動啟動chrony守護服務

    systemctl start chronyd.service
    systemctl enable chronyd.service
    
  3. 配置節點主機名和網路

    這一步是為了能識別叢集中的各個節點,將不同的節點用不同的主機名標識,如:namenode用master,而datanode用slave1、slave2、slave3等等

    1. 配置各節點主機名

      CentOS6下:

      vim /etc/sysconfig/network
      

      內容修改:

      NETWORKING=yes
      HOSTNAME=相應主機名
      

      CentOS7、8下:

      vim /etc/hostname
      

      直接修改主機名,所有的節點主機名應不同,可以為:master、slave1、slave2、slave3等等。

    2. 配置網路環境

      這一步是為了讓叢集內節點相互正常訪問,分為配置靜態IP和關閉防火牆。

      由於我們是通過主機名來標識,如果採用DHCP,可能會有節點的IP變化,導致與所設定的主機名對應IP不一致,無法正常使用,所以要配置靜態IP,具體方法建議百度。

      另外是關閉防火牆(簡單粗暴):

      systemctl stop firewalld.service
      systemctl disable firewalld.service
      systemctl status firewalld.service
      

      依次為停止、禁止啟動、檢視防火牆狀態。

      配置hosts列表:

      vim /etc/hosts
      

      將其中新增 ip 主機名對:

      節點ip ip對應的主機名
      

      之後可以ping相應主機名進行測試。

    3. 安裝JDK

      Hadoop是基於java的,JDK自然不必多說,之後使用MapReduce程式設計也需要用到。

      將JDK解壓並放在/usr/java目錄下:

      mkdir /usr/java
      mv jdkgz壓縮檔案 /usr/java/
      cd /usr/java
      tar –xvf /usr/java/jdkgz壓縮檔案
      

      配置java使用者下的環境變數

      vim /home/使用者名稱/.bash_profile
      

      新增以下內容:

      export JAVA_HOME=/usr/java/jdk資料夾名/
      export PATH=$JAVA_HOME/bin:$PATH
      

      通過:

      source .bash_profile
      

      終端內生效,或者重啟虛擬機器永久生效

      然後可以通過java版本命令檢視是否安裝成功:

      java -version
      
    4. 免金鑰登入設定

      Hadoop叢集相互訪問時要通過ssh遠端登入到其他節點,為了避免每次訪問都需要輸入密碼,我們需要設定免密登入。

      在Master節點的使用者主目錄下,用以下命令生成ssh下的rsa金鑰

      ssh-keygen -t rsa
      

      會生成一個.ssh的隱藏資料夾,裡面有一個rsa金鑰檔案和一個rsa.pub的公鑰檔案:

      cd .ssh
      ls -l
      

      將公鑰檔案複製為另一個suthorized_keys用於免金鑰登入的身份認證檔案,修改其許可權為僅建立者讀寫

      cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
      chmod 600 authorized_keys
      

      然後將免密檔案傳送到各slave節點上

      scp authorized_keys 使用者名稱@相應節點名:~/
      

      同樣地,在各slave節點使用者主目錄生成金鑰檔案,並將從master節點得到的authorized_keys檔案移動到.ssh目錄:

      ssh-keygen -t rsa
      mv authorized_keys ~/.ssh/
      

      通過ssh遠端連線驗證免密登入:

      ssh 節點主機名
      

至此,Hadoop需要的Linux環境基本搭建完成。


Hadoop配置部署及啟用

  1. 檔案拷貝

    在自定義使用者主目錄下,解壓hadoop壓縮包:

    # 以下將壓縮包移動到主目錄
    # cp hadoop壓縮包 ~/
    # cd ~
    tar -zxvf hadoop壓縮包
    # 檢視hadoop檔案
    cd hadoop資料夾
    
  2. 屬性配置

    • 配置JDK環境路徑

      vim /home/使用者名稱/hadoop-2.5.2/etc/hadoop/hadoop-env.sh
      

      去掉其中的JAVA_HOME的註釋並修改路徑為之前安裝的JDK路徑

      # The java implomentation to use .....
      export JAVA_HOME=/usr/java/jdk...
      
    • 配置核心元件core-site.xml

      vim /home/使用者名稱/hadoop-2.5.2/etc/hadoop/core-site.xml
      
      <configuration>
      <property>
      <name>fs.default.name</name>  /*2.0後用fs.defaultFS代替*/ 
      <value>hdfs://master:9000</value>
      </property>
      <property>
      <name>hadoop.tmp.dir</name>
      <value>/home/dhx/hadoopdata</value>
      </property>
      </configuration> 
      
      
      • hadoop分散式檔案系統檔案存放位置都是基於hadoop.tmp.dir目錄的,namenode的名字空間存放地方就是 ${hadoop.tmp.dir}/dfs/name,datanode資料塊的存放地方就是 ${hadoop.tmp.dir}/dfs/data,所以設定好hadoop.tmp.dir目錄後,其他的重要目錄都是在這個目錄下面,這是一個根目錄。

      • fs.default.name,設定namenode所在主機,埠號是9000

      • core-site.xml 對應有一個core-default.xml, hdfs-site.xml對應有一個hdfs-default.xml,mapred-site.xml對應有一個mapred-default.xml。這三個defalult檔案裡面都有一些預設配置,現在我們修改這三個site檔案,目的就覆蓋default裡面的一些配置

    • 配置檔案系統hdfs-site.xml

      vim /home/使用者名稱/hadoop-版本號/etc/hadoop/hdfs-site.xml
      
      <configuration>
      <!-- appoint HDFS transcript counts -->
      <property>
      <name>dfs.replication</name>
      <value>3</value>
      </property>
      <!-- appoint blocksize -->
      <property>
      <name>dfs.block.size</name>
      <value>64M</value>
      </property>
      </configuration>
      

      dfs.replication,設定資料塊的複製次數,預設是3,如果slave節點數少於3,則寫成相應的1或者2

    • 配置計算框架mapred-site.xml

      vim /home/使用者/hadoop-版本號/etc/hadoop/mapred-site.xml
      
      <configuration>
      <property>
      <name>mapred. job.tracker</name>
      //2.0  後   mapreduce.framework.name
      <value>master:9001</value>
      //2.0 後 yarn
      </property>
      </configuration>
      

      mapred.job.tracker,設定jobtracker所在機器,埠號9001,對於2.0以後的hadoop而言,多了一個yarn框架,因此要改成yarn

    • 配置yarn-site.xml

      vim /home/使用者/hadoop-版本號/etc/hadoop/yarn-site.xml
      
      <property>             	
          <name>yarn.resourcemanager.hostname</name>
          <value>master</value>
      </property>
      <property>
          <name>yarn.nodemanager.aux-services</name>
          <value>mapreduce_shuffle</value>
      </property>
      
    • 配置主節點masters(2.0後不需要設定):

      vim /home/使用者/hadoop-版本號/etc/hadoop/masters
      

      新增master主機名

    • 配置從節點slaves(3.0改為workers):

      vim /home/使用者/hadoop-版本號/etc/hadoop/slaves
      

      新增所有datanode的主機名(按行分割)

    • 將該hadoop檔案複製到slave節點:

      scp -r hadoop-版本號 slave:~/
      
  3. 啟動Hadoop檔案系統

    • 格式化檔案系統:
      由於尚未配置使用者下的hadoop環境變數,需要手動在檔案中啟用指令碼(或者在配置完環境變數後再格式化):

      cd /home/使用者名稱/hadoop-版本號/bin/
      ./hdfs namenode -format
      

      在datanode中:

      cd /home/使用者名稱/hadoop-版本號/bin/
      ./hdfs datanode -format
      
    • 配置Hadoop的使用者環境變數,主目錄下:

      vim .bash_profile
      
      export HADOOP_HOME=/home/使用者名稱/hadoop-版本號
      export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
      

      環境生效:

      source .bash_profile
      

      啟動hadoop:

      cd ~/hadoop-版本號
      bin/start-all.sh
      

      檢視程序:

      jps
      
    • WebUI檢視叢集是否安裝成功:

      在HadoopMaster上啟動Fixefox瀏覽器,在瀏覽器位址列中輸入http://master:50070/,檢查namenode和datanode是否正常。
      在HadoopMaster上啟動Fixefox瀏覽器,在瀏覽器位址列中輸入http://master:50030/,檢查JobTracker和TaskTracker是否正常,在hadoop3.0以後,一些預設埠已經改變,可以百度查詢。

    • 執行PI例項檢查叢集是否成功

      cd /home/使用者/hadoop-版本號
      hadoop jar ~/hadoop-版本號/share/hadoop/mapreduce/hadoop-mapreduce-examples-版本號.jar pi 10 10
      

      結果為一個不準確的圓周率數