Spark環境搭建(中)——Hadoop安裝


1. 下載Hadoop

1.1 官網下載Hadoop

http://www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-2.9.0/hadoop-2.9.0.tar.gz

打開上述鏈接,進入到下圖,可以隨意下載一個完整的hadoop-2.9.0版本,如下圖所示:

 

2. 安裝單機版Hadoop

詳情參考:https://blog.csdn.net/qazwsxpcm/article/details/78637874

3. 安裝集群版Hadoop

把hadoop-2.9.0.tar.gz文件進行操作,分三大步驟:

  • 配置前的准備,包括上傳到主節點,解壓縮並遷移到/opt/app目錄,在hadoop目錄下創建tmp、name和data目錄;
  • 配置,包括hadoop-env.sh、yarn-env.sh(前兩者為啟動文件的JAVA_HOME和PATH配置)、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml、Slaves(后面5個文件為核心組件和集群配置),共7個文件需要配置。配置完成需要向另外的集群機器節點分發hadoop程序;
  • 啟動部署,包括格式化NameNode、啟動HDFS、啟動YARN。

3.1 准備

3.1.1 上傳並解壓Hadoop安裝包

1. 把hadoop-2.9.0.tar.gz通過Xfpt工具上傳到主節點的/opt/uploads目錄下

 

2. 在主節點上解壓縮,如果解壓縮出來的文件擁有者和用戶組不是hadoop,則需要使用sudo chown -R hadoop:hadoop hadoop-2.9.0命令

 # cd /opt/uploads/

# tar -zxvf  hadoop-2.9.0.tar.gz

有時解壓出來的文件夾,使用命令 ll 查看用戶和用戶組有可能不是hadoop時,即上圖綠框顯示,則需要使用如下命令更換為hadoop用戶和用戶組:

# sudo chown hadoop:hadoop hadoop-2.9.0

 3. 把hadoop-2.9.0目錄移到/opt/app目錄下

# mv hadoop-2.9.0 /opt/app/

# ll /opt/hadoop

3.1.2 在Hadoop目錄下創建子目錄

以hadoop用戶在/opt/app/hadoop-2.9.0目錄下創建tmp、name和data目錄。tmp為緩存文件,name用於NameNode存放文件,data用於DataNode存放文件

# cd /opt/app/hadoop-2.9.0/

# mkdir tmp && mkdir name && mkdir data

# ll

3.2 配置7大文件

3.2.1 配置hadoop-env.sh

1. 以hadoop用戶打開配置文件hadoop-env.sh

# cd /opt/app/hadoop-2.9.0/etc/hadoop

# vi hadoop-env.sh

 

2. 加入配置內容,設置JAVA_HOME和PATH路徑

export JAVA_HOME=/usr/lib/java/jdk1.8.0_151

export PATH=$PATH:/opt/app/hadoop-2.9.0/bin

3. 編譯配置文件hadoop-env.sh,並確認生效

# source hadoop-env.sh

# hadoop version

 3.2.2 配置yarn-env.sh

1. 以hadoop用戶在/opt/app/hadoop-2.9.0/etc/hadoop打開配置文件yarn-env.sh

# cd /opt/app/hadoop-2.9.0/etc/hadoop   如果不在/opt/app/hadoop-2.9.0/etc/hadoop目錄下,則使用該命令

# vi yarn-env.sh

2. 加入配置內容,在如下位置設置JAVA_HOME路徑

export JAVA_HOME=/usr/lib/java/jdk1.8.0_151

 3. 編譯配置文件yarn-env.sh,並確認生效

source yarn-env.sh

3.2.3 配置core-site.xml

1. 以hadoop用戶,使用如下命令打開core-site.xml配置文件

# cd /opt/app/hadoop-2.9.0/etc/hadoop/     如果不在/opt/app/hadoop-2.9.0/etc/hadoop目錄下,則使用該命令

# vi core-site.xml

2. 在配置文件中,按照如下內容進行配置

配置的點有fs默認名字、默認FS、IO操作的文件緩沖區大小、tmp目錄、代理用戶hosts、代理用戶組,共6點。

<configuration>
    <property>
           <name>fs.default.name</name>
           <value>hdfs://hadoop1:9000</value>
   </property>
   <property>
        <name>fs:defaultFS</name>
        <value>hdfs://hadoop1:9000</value>
   </property>
   <property>
        <name>io.file.buffer.size</name>
        <value>131072</value>
   </property>
   <property>
         <name>hadoop.tmp.dir</name>
         <value>file:/opt/app/hadoop-2.9.0/tmp</value>
   </property>
   <property>
        <name>hadoop.proxyuser.hduser.hosts</name>
        <value>*</value>
   </property>
   <property>
       <name>hadoop.proxyuser.hduser.groups</name>
       <value>*</value>
   </property>
</configuration>

 

3.2.4 配置hdfs-site.xml

1. 使用如下命令打開hdfs-site.xml配置文件

# cd /opt/app/hadoop-2.9.0/etc/hadoop/     如果不在/opt/app/hadoop-2.9.0/etc/hadoop目錄下,則使用該命令

# vi hdfs-site.xml

 

2. 在配置文件中,按照如下內容進行配置

 hdfs-site.xml配置的點有namenode的secondary、name目錄、data目錄、備份數目、開啟webhdfs,共5點

<configuration>
   <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>hadoop1:9001</value>
   </property>
   <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:/opt/app/hadoop-2.9.0/name</value>
   </property>
   <property>
       <name>dfs.datanode.data.dir</name>
       <value>file:/opt/app/hadoop-2.9.0/data</value>
   </property>
   <property>
       <name>dfs.replication</name>
       <value>2</value>
   </property>
   <property>
       <name>dfs.webhdfs.enabled</name>
       <value>true</value>
   </property>
</configuration>

 

【注意】:namenode的hdfs-site.xml是必須將dfs.webhdfs.enabled屬性設置為true,否則就不能使用webhdfs的LISTSTATUS、LISTFILESTATUS等需要列出文件、文件夾狀態的命令,因為這些信息都是由namenode來保存的。

3.2.5 配置mapred-site.xml

 1.  默認情況下不存在mapred-site.xml文件,可以從模板拷貝一份。然后,使用vi命令打開mapred-site.xml配置文件

# cd /opt/app/hadoop-2.9.0/etc/hadoop/     如果不在/opt/app/hadoop-2.9.0/etc/hadoop目錄下,則使用該命令

# cp mapred-site.xml.template mapred-site.xml

# vi hdfs-site.xml

2. 在配置文件中,按照如下內容進行配置

mapred-site.xml配置的點有mapreduce的框架、jobhistory的地址、jobhistory的webapp地址,共3點。

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

 

3.2.6 配置yarn-site.xml

 1. 使用如下命令打開yarn-site.xml配置文件

# cd /opt/app/hadoop-2.9.0/etc/hadoop/     如果不在/opt/app/hadoop-2.9.0/etc/hadoop目錄下,則使用該命令

# vi hdfs-site.xml

 

2. 在配置文件中,按照如下內容進行配置

yarn-site.xml配置的點有①nodemanager的aux-services及其類;②resourcemanager的地址、其sheduler地址、其resource-tracker地址、其admin地址以及webapp地址,共7點。

<configuration>

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

     <property>

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

          <value>hadoop1:8032</value>

     </property>

     <property>

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

          <value>hadoop1:8030</value>

     </property>

     <property>

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

          <value>hadoop1:8031</value>

     </property>

     <property>

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

          <value>hadoop1:8033</value>

     </property>

     <property>

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

          <value>hadoop1:8088</value>

      </property>

</configuration>

3.2.7 配置Slaves文件

1. 使用# vi slaves打開從節點配置文件

# cd /opt/app/hadoop-2.9.0/etc/hadoop/     如果不在/opt/app/hadoop-2.9.0/etc/hadoop目錄下,則使用該命令

# vi slaves

2. 在配置文件中加入如下內容:

hadoop1

hadoop2

hadoop3

 

3.2.8 向各節點分發Hadoop程序

1. 在hadoop1機器/opt/app/hadoop-2.9.0使用如下命令把hadoop文件夾復制到hadoop2和hadoop3機器

# cd /opt/app

# scp -r hadoop-2.9.0 hadoop@hadoop2:/opt/app/

# scp -r hadoop-2.9.0 hadoop@hadoop3:/opt/app/

2. 在從節點查看是否復制成功

3.3 啟動部署

啟動部署,包括格式化NameNode、啟動HDFS、啟動YARN。

3.3.1 格式化NameNode

# cd /opt/app/hadoop-2.9.0

# ./bin/hdfs namenode -format

3.3.2 啟動HDFS

1. 使用如下命令啟動HDFS:

# cd /opt/app/hadop-2.9.0/sbin   如果不在/opt/app/hadoop-2.9.0/sbin目錄下,則使用該命令

# ./start-dfs.sh

2. 驗證HDFS啟動

 此時在hadoop1上面運行的進程有:NameNode、SecondaryNameNode和DataNode

hadoop2和hadoop3上面運行的進程有:NameNode和DataNode

【注意】:jps命令出現—— xxxx--process information unavailable解決方法(有可能出現)

解決方法:根目錄/tmp中找到hsperfdata_前綴的目錄,並找出PID(即xxxx)對應的文件並且刪除即可。如果/tmp文件不重要的話,全部刪除也行。

3.3.3 啟動YARN

1. 使用如下命令啟動YARN

# cd /opt/app/hadoop-2.9.0/sbin  如果不在/opt/app/hadoop-2.9.0/sbin目錄下,則使用該命令

# ./start-yarn.sh

2. 驗證YARN啟動

此時在hadoop1上運行的進程有:NameNode、SecondaryNameNode、DataNode、NodeManager和ResourceManager

hadoop2和hadoop3上面運行的進程有:NameNode、DataNode和NodeManager

4. HA配置及啟動

  在HA集群中,Standby NameNode也起着命名空間狀態的checkpoints作用,因此不需要在HA集群中運行Secondary NameNode、CheckpointNode、或者BackupNode;而且這樣做會導致報錯。

  兩個NameNode為了數據同步,會通過一組稱為JournalNodes的獨立進程進行相互通信。當active狀態的NameNode的命名空間有任何修改時,會告知大部分的JournalNodes進程。standby狀態的NameNode有能力讀取JNs中的變更信息,並且一直監控edit log的變化,把變化應用於自己的命名空間。這就是JournalNode起到的作用。

  QuorumPeerMain用於兩個NameNode以上的主備選舉及切換。

  DFSZKFailoverController用於發生故障的主NameNode節點自動切換備用NameNode。

4.1 節點服務分配

  

4.2 搭建zookeeper集群

具體操作詳情請看:https://www.cnblogs.com/swordfall/p/8667409.html  “zookeeper安裝使用及工作原理分析”的第6節

4.3 配置HDFS HA(所有機器均需配置)

4.3.1 創建name、data、journal目錄

(base) [root@bridge1 hadoop-2.7.5-ha-multi]# pwd
/opt/app/hadoop-2.7.5-ha-multi

(base) [root@bridge1 hadoop-2.7.5-ha-multi]# mkdir -p tmp/name
(base) [root@bridge1 hadoop-2.7.5-ha-multi]# mkdir -p tmp/data
(base) [root@bridge1 hadoop-2.7.5-ha-multi]# mkdir -p tmp/journal

(base) [root@bridge1 tmp]# ll
total 0
drwxr-xr-x 2 root root 6 Nov 17 22:06 data
drwxr-xr-x 2 root root 6 Nov 17 22:06 journal
drwxr-xr-x 2 root root 6 Nov 17 22:05 name

4.3.2 slaves配置datanode

(base) [root@bridge1 hadoop-2.7.5-ha-multi]# cat etc/hadoop/slaves 
bridge1
bridge2
bridge3

 4.3.3 配置hdfs-site.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->

<configuration>
  <property>  
        <name>dfs.nameservices</name>
        <value>bridge</value>
  </property>

   <property>  
        <name>dfs.ha.namenodes.bridge</name>  
        <value>nn1,nn2</value>  
    </property> 
   <!-- nn1的RPC通信地址,nn1所在地址  -->  
    <property>  
        <name>dfs.namenode.rpc-address.bridge.nn1</name>  
        <value>bridge1:8020</value>  
    </property>  
    <!-- nn2的RPC通信地址,nn2所在地址 -->  
    <property>  
        <name>dfs.namenode.rpc-address.bridge.nn2</name>  
        <value>bridge2:8020</value>  
    </property>

    <!-- nn1的http通信地址,外部訪問地址 -->
    <property>
        <name>dfs.namenode.http-address.bridge.nn1</name>
        <value>bridge1:50070</value>
    </property>
    <!-- nn2的http通信地址,外部訪問地址 -->  
    <property>  
        <name>dfs.namenode.http-address.bridge.nn2</name>  
        <value>bridge2:50070</value>  
    </property>  
    <!-- 指定NameNode的元數據在JournalNode日志上的存放位置(一般和zookeeper部署在一起) -->  
    <property>  
        <name>dfs.namenode.shared.edits.dir</name>  
        <value>qjournal://bridge1:8485;bridge2:8485;bridge3:8485/bridge</value>  
    </property>  
    <!-- 指定JournalNode在本地磁盤存放數據的位置 -->  
    <property>  
        <name>dfs.journalnode.edits.dir</name>  
        <value>/opt/app/hadoop-2.7.5-ha-multi/tmp/journal</value>  
    </property>  
    <!--客戶端通過代理訪問namenode,訪問文件系統,HDFS 客戶端與Active 節點通信的Java 類,使用其確定Active 節點是否活躍  -->  
    <property>  
        <name>dfs.client.failover.proxy.provider.bridge</name>  
        <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>  
    </property>  
    <!--這是配置自動切換的方法,有多種使用方法,具體可以:看官網,在文末會給地址,這里是遠程登錄殺死的方法  -->  
    <property>  
        <name>dfs.ha.fencing.methods</name>  
        <value>sshfence</value>     
    </property> 
   <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:/opt/app/hadoop-2.7.5-ha-multi/tmp/name</value>
   </property>
   <property>
       <name>dfs.datanode.data.dir</name>
       <value>file:/opt/app/hadoop-2.7.5-ha-multi/tmp/data</value>
   </property>
   <property>
       <name>dfs.replication</name>
       <value>1</value>
   </property>
   <property>
       <name>dfs.webhdfs.enabled</name>
       <value>true</value>
   </property>
   <property>
       <name>dfs.ha.automatic-failover.enabled</name>
       <value>true</value>
   </property>
   <property>
       <name>ha.zookeeper.quorum</name>
       <value>bridge1:2181,bridge2:2181,bridge3:2181</value>
   </property>
</configuration>

 4.3.4 配置core-site.xml文件

  注意:這里的hduser為hadoop的用戶,如root

<configuration>
  
   <property>
        <name>fs.default.name</name>
        <value>hdfs://bridge</value>
   </property>
   <property>
        <name>fs.defaultFS</name>
        <value>hdfs://bridge</value>
   </property>
   <property>
        <name>io.file.buffer.size</name>
        <value>131072</value>
   </property>
   <property>
         <name>hadoop.tmp.dir</name>
         <value>file:/opt/app/hadoop-2.7.5-ha-multi/tmp</value>
   </property>
   <property>
        <name>hadoop.proxyuser.hduser.hosts</name>
        <value>*</value>
   </property>
   <property>
       <name>hadoop.proxyuser.hduser.groups</name>
       <value>*</value>
   </property>
</configuration>

 4.3.5 啟動HDFS相關服務

  1. 在三台機器上分別啟動zookeeper:

(base) [root@bridge1 hadoop-2.7.5-ha-multi]# /opt/app/zookeeper-3.4.5/bin/zkServer.sh start
(base) [root@bridge2 hadoop-2.7.5-ha-multi]# /opt/app/zookeeper-3.4.5/bin/zkServer.sh start
(base) [root@bridge3 hadoop-2.7.5-ha-multi]# /opt/app/zookeeper-3.4.5/bin/zkServer.sh start

  2. 在bridge1上格式化zk集群:

(base) [root@bridge1 hadoop-2.7.5-ha-multi]# ./bin/hdfs zkfc -formatZK

  3. 在三台機器上啟動journalnode集群

(base) [root@bridge1 hadoop-2.7.5-ha-multi]# ./sbin/hadoop-daemon.sh start journalnode
(base) [root@bridge2 hadoop-2.7.5-ha-multi]# ./sbin/hadoop-daemon.sh start journalnode
(base) [root@bridge3 hadoop-2.7.5-ha-multi]# ./sbin/hadoop-daemon.sh start journalnode

  4. 格式化namenode,啟動namenode,bridge1上執行如下:

(base) [root@bridge1 hadoop-2.7.5-ha-multi]# ./bin/hdfs namenode -format
(base) [root@bridge1 hadoop-2.7.5-ha-multi]# ./sbin/hadoop-daemon.sh start namenode

    bridge2執行如下:

(base) [root@bridge2 hadoop-2.7.5-ha-multi]# ./bin/hdfs namenode -bootstrapStandby
(base) [root@bridge2 hadoop-2.7.5-ha-multi]# ./sbin/hadoop-daemon.sh start namenode

  5. 在三台機器上分別啟動datanode

(base) [root@bridge1 hadoop-2.7.5-ha-multi]# ./sbin/hadoop-daemon.sh start datanode
(base) [root@bridge2 hadoop-2.7.5-ha-multi]# ./sbin/hadoop-daemon.sh start datanode
(base) [root@bridge3 hadoop-2.7.5-ha-multi]# ./sbin/hadoop-daemon.sh start datanode

  6. ZKFC(FailoverController)必須在namenode上執行。讓zk決定哪個namenode為active

(base) [root@bridge1 hadoop-2.7.5-ha-multi]# ./sbin/hadoop-daemon.sh start zkfc
(base) [root@bridge2 hadoop-2.7.5-ha-multi]# ./sbin/hadoop-daemon.sh start zkfc

      7. 第5步和第6步可以替換為

(base) [root@bridge2 hadoop-2.7.5-ha-multi]# start-dfs.sh

4.4 配置YARN HA(所有機器均需配置)

4.4.1 配置mapred-site.xml文件

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

4.4.2 配置yarn-site.xml文件

<configuration>
<!-- Site specific YARN configuration properties -->
    <property>
           <name>yarn.resourcemanager.hostname</name>
           <value>bridge1</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>
     <property>
           <name>yarn.resourcemanager.connect.retry-interval.ms</name>
           <value>2000</value>
     </property>

     <!-- HA -->
     <property>
           <name>yarn.resourcemanager.ha.enabled</name>
           <value>true</value>
     </property>
     <property>
           <name>yarn.resourcemanager.cluster-id</name>
           <value>bridge-yarn</value>
     </property>
     <property>
           <name>yarn.resourcemanager.ha.rm-ids</name>
           <value>rm1,rm2</value>
     </property>
     <property>
           <name>yarn.resourcemanager.ha.automatic-failover.enabled</name>
           <value>true</value>
     </property>
     <property>
           <name>yarn.resourcemanager.hostname.rm1</name>
           <value>bridge1</value>
     </property>
     <property>
           <name>yarn.resourcemanager.hostname.rm2</name>
           <value>bridge2</value>
     </property>
     <property>
           <name>yarn.resourcemanager.webapp.address.rm1</name>
           <value>bridge1:8088</value>
     </property>
     <property>
           <name>yarn.resourcemanager.webapp.address.rm2</name>
           <value>bridge2:8088</value>
     </property>
     <property>
           <name>yarn.resourcemanager.zk-address</name>
           <value>bridge1:2181,bridge2:2181,bridge3:2181</value>
     </property>
</configuration>

4.4.3 啟動yarn相關服務

  在bridge1執行如下命令:

(base) [root@bridge1 hadoop-2.7.5-ha-multi]# ./sbin/start-yarn.sh

  在bridge2啟動resourcemanager

(base) [root@bridge2 hadoop-2.7.5-ha-multi]# ./sbin/yarn-daemon.sh start resourcemanager

 

  驗證:

(base) [root@bridge1 hadoop-2.7.5-ha-multi]# ./bin/yarn rmadmin -getServiceState rm1
active
(base) [root@bridge1 hadoop-2.7.5-ha-multi]# ./bin/yarn rmadmin -getServiceState rm2
standby

5. 總結

【參考資料】

http://www.ttlsa.com/linux/jps-process-information-unavailable/  jps命令出現xxxx--process information unavailable解決方法

http://www.cnblogs.com/shishanyuan/p/4701646.html 石山園大神的講解

https://www.cnblogs.com/zhichaoma/p/9956277.html hadoop單節點部署

https://my.oschina.net/u/204498/blog/639986 hadoop ha部署


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM