1. 程式人生 > >VM+CentOS+hadoop2.7搭建hadoop完全分散式叢集

VM+CentOS+hadoop2.7搭建hadoop完全分散式叢集

寫在前邊的話:

       最近找了一個雲端計算開發的工作,本以為來了會直接做一些敲程式碼,處理資料的活,沒想到師父給了我一個課題“基於質量資料的大資料分析”,那麼問題來了首先要做的就是搭建這樣一個平臺,毫無疑問,底層採用hadoop叢集,在此之上,進行一些其他元件的安裝和二次開發

hadoop偽分佈部署參考:點選開啟連結

hadoop單機版部署參考:點選開啟連結

zookeeper,hive,hbase的分散式部署參考:點選連結

Spark,Sqoop,Mahout的分散式部署參考:點選連結

hadop高可用部署:點選連線

一:安裝VM 12.x

二:安裝CentOS6.5

     這裡採用3臺機器,其對應的IP和主機分別如下(他們的使用者名稱都是master)

主機名ip對應的角色
master1192.168.48.130NameNode
slave1192.168.48.131Datanode1
slave2192.168.48.132Datanode2

     這裡我們可以採用安裝一臺虛擬機器,然後進行克隆的方法,克隆出五臺機器,然後修改對應的ip地址和使用者名稱,VM安裝虛擬機器有三種網路連線方式,分別是橋接,NAT,僅主機模式,這裡採用預設設定,即使用NAT,NAT模式下實用的是Vmnet8

修改IP地址:

     1:檢視本機ip

           我的電腦ip地址為:192.168.69.30

           Vmnet8的ipv4地址為:192.168.48.1

    2:確定虛擬機器IP地址範圍和閘道器地址,下圖紅線標示

          

    3:開啟虛擬機器終端

        輸入:sudo vim /etc/sysconfig/network-scripts/ifcfg-eth0

        修改後的資訊如下,需要修改的地方有紅線標示出來了:

        

        eth0--->eth1

        dhcp--->static

        HWADDR  MAC地址修改為本虛擬機器的mac地址,mac地址檢視  ip addr,選擇eth1那個

        

        之後便可以使用ifconfig檢視ip了    

修改主機名和對應IP:

        1:編輯hosts檔案

             sudo vim /etc/hosts

             清空內容,新增   192.168.48.129  master (這裡不要清空hosts檔案,具體看評論)

        2:便捷network檔案

              sudo vim /etc/sysconfig/network

              修改HOSTNAME為master

              重啟生效

三:安裝hadoop叢集

0:每臺機器上關閉防火牆和selinux

         永久關閉防火牆:chkconfig --level 35 iptables off

         永久關閉selinux:

               vim /etc/selinux/config

               找到SELINUX 行修改成為:SELINUX=disabled:

1:每臺機器上安裝java環境(jdk-7u51-linux-x64.tar

        解壓到指定目錄,這裡我選擇的是/opt

             tar -zxvf jdk-7u51-linux-x64.tar /opt

        修改資料夾名字為java 

             mv /opt/jdk1.7.0_51 /opt/java 

        配置環境變數,開啟/etc/profile檔案,加入java的路徑

             vim /etc/profile (如果沒有許可權可以前邊加入sudo)

        檔案前邊寫上:

             export JAVA_HOME=/opt/java
             export CLASSPATH=.:%JAVA_HOME%/lib/dt.jar:%JAVA_HOME%/lib/tools.jar
             export PATH=$PATH:$JAVA_HOME/bin

2:配置每臺機器的主機名

         清空每臺機器上的/etc/hosts檔案內容,新增如下:

         192.168.48.130  master1
         192.168.48.131  slave1
         192.168.48.132  slave2

         執行完之後source/etc/hosts

         同時修改每臺機器上的/etc/sysconfig/network  中hostname對應的使用者名稱(此步驟一定要注意,否則容易找不到主機名)

3:給master使用者增加sudo許可權

               1)切換到root使用者,su    輸入密碼

2)給sudoers增加寫許可權:chmod u+w /etc/sudoers

               3)編譯sudoers檔案:vim /etc/sudoers       
                    在root ALL=(ALL)  ALL下方增加     master ALL=(ALL)NOPASSWD:ALL
              4)去掉sudoers檔案的寫許可權:chmod u-w /etc/sudoers

4:每臺機器都切換到master使用者下

         su master

5:配置SSH免密碼登入

         進入~/.ssh目錄

         每臺機器執行:ssh-keygen -t rsa,一路回車

         生成兩個檔案,一個私鑰,一個公鑰,在master1中執行:cp id_rsa.pub authorized_keys

         a:本機無金鑰登入

               修改authorized_keys許可權:chmod 644 authorized_keys

               此時重啟ssh服務:sudo service sshd restart

               ssh master1

               yes!!!

         b:master與其他節點無金鑰登入

           從master中把authorized_keys分發到各個結點上(會提示輸入密碼,輸入thinkgamer即可):

           scp /home/master/.ssh/authorized_keys slave1:/home/master/.ssh

 scp /home/master/.ssh/authorized_keys slave2:/home/master/.ssh 

           然後在各個節點對authorized_keys執行(一定要執行該步,否則會報錯):chmod 644 authorized_keys

          測試如下(第一次ssh時會提示輸入yes/no,輸入yes即可):

           

6:解壓hadoop到指定目錄(我這裡使用的是/opt/目錄)

        tar -zxvf hadoop-2.7.0.tar.gz /opt/hadoop-2.7.0

        重新命名檔案:mv /opt/hadoop-2.7.0 /opt/hadoop

7:修改配置檔案

          hadoop-env.sh: 

       export JAVA_HOME=/opt/java

          core-site.xml:

<configuration>
  <property>
    <name>fs.default.name</name>
    <value>hdfs://master1:9000</value>
  </property>
  <property>
    <name>hadoop.tmp.dir</name>
    <value>/opt/hadoop/tmp</value>
  </property>
</configuration>

            hdfs-site.xml:

<configuration>
  <property>
    <name>dfs.replication</name>
    <value>2</value>
  </property>
  <property>
    <name>dfs.namenode.name.dir</name>
    <value>file:/opt/hadoop/dfs/name</value>
  </property>
  <property>
    <name>dfs.datanode.data.dir</name>
    <value>file:/opt/hadoop/dfs/data</value>
  </property>
</configuration>
         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.webapp.address</name>
    <value>Master:19888</value>
  </property>
</configuration>
         yarn-site.xml:
<configuration>

<!-- Site specific YARN configuration properties -->
  <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>master1:8032</value>
  </property>
  <property>
    <name>yarn.resourcemanager.scheduler.address</name>
    <value>master1:8030</value>
  </property>
  <property>
    <name>yarn.resourcemanager.resource-tracker.address</name>
    <value>master1:8031</value>
  </property>
  <property>
    <name>yarn.resourcemanager.admin.address</name>
    <value>master1:8033</value>
  </property>
  <property>
    <name>yarn.resourcemanager.webapp.address</name>
    <value>master1:8088</value>
  </property>
</configuration>

8:編輯slaves檔案

        清空加入從節點的名字

        slave1

        slave2

9:將hadoop分發到各個節點(因為許可權問題,先將該資料夾分發到各個節點的/home/master目錄下,再進入各個節點將資料夾移到/opt下)

         scp -r /opt/hadoop slave1:/home/master/hadoop ,進入該節點執行:sudo mv hadoop /opt/

         scp -r /opt/hadoop slave2:/home/master/hadoop ,進入該節點執行:sudo mv hadoop /opt/

10:在master節點格式化hdfs

           bin/hdfs namenode -format

           

          看見status 0表示安裝成功

四:web頁面檢視

    1:http://192.168.48.130:8088/

 

    2:http://192.168.48.130:50070/


五:問題記錄

1:linux資料夾許可權

         eg:

         

          第一列共有十位
          第一位,d:表示是一個目錄,-:表示一個普通的檔案
          第2-4位:rwx:分別表示讀,寫,執行,這裡顯示為rwx表示檔案所有者對該檔案擁有讀寫執行的權利(補充一點,rwx用數字表示為4,2,1)
          第5-7位:r-x:表示與該檔案所有者的同組使用者擁有該檔案的讀和執行的許可權
          第8-10位:r-x:表示其他組的使用者對該檔案擁有讀和執行的權利

2:linux基本命令

         檢視使用者所屬使用者組   id hostname / groups hostname

         vim命令: 查詢:/xxxx

                          清空: gg  dG

  參考:http://www.cnblogs.com/laov/p/3421479.html

                http://www.aboutyun.com/thread-7781-1-1.html

                http://blog.sina.com.cn/s/blog_821d83720102vkx5.html

                http://www.aboutyun.com/thread-10572-1-1.html(HA配置)