1. 程式人生 > >2-hadoop基礎配置2

2-hadoop基礎配置2

hadoop的
  儲存:
    hdfs
  運算:
    MapReduce: map(抽取, 對映)+reduce(化簡)


hadoop部署配置:
1.獨立模式
   預設就是獨立模式
   hadoop fs -ls / 列出的檔案和Linux本身的檔案一模一樣,檔案系統使用本地庫檔案,不是分散式檔案系統
2.偽分佈模式:模擬一個叢集
  2.1 基礎配置
    參考Hadoop.The.Definitive.Guide.3rd.Edition.pdf檔案中的配置例項,配置4個檔案


  <?xml version="1.0"?>
<!-- core-site.xml -->
<configuration>
  <property>
   <name>fs.default.name</name>
    <value>hdfs://localhost/</value>
  </property>
</configuration>


<?xml version="1.0"?>
<!-- hdfs-site.xml -->
<configuration>
  <property>
    <name>dfs.replication</name>
    <value>1</value>
  </property>
</configuration>
<?xml version="1.0"?>


<!-- mapred-site.xml -->
<configuration>
  <property>
    <name>mapred.job.tracker</name>
    <value>localhost:8021</value>
  </property>
</configuration>




<?xml version="1.0"?>
<!-- yarn-site.xml -->
<configuration>
  <property>
    <name>yarn.resourcemanager.address</name>
    <value>localhost:8032</value>
  </property>
  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce.shuffle</value>
  </property>
</configuration>


  2.2 配置ssh無密碼登入 
    1)SSH無密碼原理 
      Master(NameNode | JobTracker)作為客戶端,要實現無密碼公鑰認證,連線到伺服器Salve(DataNode | Tasktracker)上時,
    需要在Master上生成一個金鑰對,包括一個公鑰和一個私鑰,而後將公鑰複製到所有的Slave上。當Master通過SSH連線Salve時,
    Salve就會生成一個隨機數並用Master的公鑰對隨機數進行加密,併發送給Master。Master收到加密數之後再用私鑰解密,
    並將解密數回傳給Slave,Slave確認解密數無誤之後就允許Master進行連線了。這就是一個公鑰認證過程,其間不需要使用者手工輸入密碼。
    重要過程是將客戶端Master複製到Slave上。
    檢測是否安裝有ssh,service sshd status,redhat已安裝有ssh
    2)生成公鑰私鑰
      正確:ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
      (錯誤:ssh-keygen -t rsa -P '' -f /home/wpy/hadoop/ssh/.ssh/id_rsa,生成祕鑰檔案不能隨意制定位置,
      參考 http://blog.itpub.net/25851087/viewspace-1262468/ )
    3)將公鑰追加到檔案
      在/home/wpy/.ssh資料夾中執行 cat id_rsa.pub >> authorized_keys
    4)測試ssh登入
      第一次登入 ssh localhost,成功後.ssh資料夾下多一個檔案known_hosts
      退出再次登入就不要輸入密碼了。
      如果還需要輸入密碼,修改檔案許可權:
       4.1 先刪除已經產生的兩個檔案,由於資料夾許可權設定不對,這兩個檔案生成的也不對,需要重新生成:
         rm -f known_hosts
rm -f authorized_keys
       4.2 然後重新執行 cat id_rsa.pub >> authorized_keys
       4.3 最後再修改幾個資料夾許可權
         chmod 644(g-w)  authorized_keys
         chmod 755       /home/wpy
chmod 755       /home/wpy/.ssh
      再次登入就好了
        Last login: Tue May 17 14:58:30 2016 from localhost
  2.3 格式化hdfs檔案系統
      hadoop namenode -format
  2.4 啟動或停止守護程序
      注意啟動順序,並且因為是用hadoop_mode2,所以還應該制定使用的配置檔案,啟動會較慢
        啟動namenode:
          start-dfs.sh  --config $HADOOP_INSTALL/etc/hadoop_mode2
        啟動yarn:
          start-yarn.sh   --config $HADOOP_INSTALL/etc/hadoop_mode2
還可以全部啟動:
 start-all.sh   --config $HADOOP_INSTALL/etc/hadoop_mode2
      檢視是否成功:
         可以jps/jps -l 檢視啟動的程序
         還可以瀏覽器方式:
  namenode; http://localhost:50070/ 
  資源管理器:  http://localhost:8088/
      停止程序(注意順序):
         stop-yarn.sh
stop-dfs.sh
// stop-all.sh
        jps檢視程序全部停掉
  2.5 配置自定義的hadoop配置檔案根目錄,這一步驟可以在前面制定啟動就不用加--config引數了
      export HADOOP_CONF_DIR=$HADOOP_INSTALL/etc/hadoop_mode2, 但是這隻對本次回話有效,重啟後無效
      注意:如果要在/etc/environment中來配置的話,要這麼設定
        HADOOP_CONF_DIR=/usr/wpysoft/hadoop-2.7.1/etc/hadoop_mode2
(不能寫成HADOOP_CONF_DIR=$HADOOP_INSTALL/etc/hadoop_mode2,因為不識別$HADOOP_INSTALL)
  2.6 檢視hadoop根目錄
      hadoop fs -ls /
   檢視當前使用者所在的使用者組:
    id + wpy
  2.7 常見問題處理
     2.7.1 native 警告: WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
     一種情況是hadoop的版本和Linux版本不一致,一個32位,一個64位,按如下排除
             hadoop 32/64位檢視:hadoop-2.7.1/lib/native目錄下, file libhadoop.so.1.0.0
             linux 32/64位檢視:file /sbin/init 
     如果都是一樣的,那麼就是Hadoop自帶的native包過舊,需要更新而已,替換個即可,進入hadoop目錄的native目錄替換一下
        方式一:用比較新的native-x64.rar替換hadoop中native下的內容,簡單容易
        方式二(可能行):
  http://dl.bintray.com/sequenceiq/sequenceiq-bin/ 網站下載 hadoop-native-64-2.7.0.tar
  tar -x hadoop-native-64-2.7.0.tar -C  hadoop根目錄/lib/native/
都是替換native中內容
    
     2.7.2 寫日誌異常導致的不能啟動
       chown: changing ownership of `/usr/wpysoft/hadoop-2.7.1/logs': Operation not permitted
       可能logs資料夾目錄是root使用者建立的,刪除logs即可
     2.7.3 datanode未啟動
       
3.完全分散式模式
  在多個主機上
  修改hostname;vi  /etc/sysconfig/network
  更改  HOSTNAME=localhost.localdomain 即可
  改後需要重啟
 由於hadoop預設找的配置是hadoop目錄,新建立的完全分散式hadoop_mode3,如果要使用hadoop_mode3的配置,有兩種辦法
 第一種:修改/etc/environment配置檔案,指向新目錄
 第二種: 刪掉/etc/environment中HADOOP_CONF_DIR的配置,
         建立一個符號連結(相當於快捷方式),
         ln -s hadoop  hadoop_mode3


  準備工作:
   修改redhat-2的hostname為s0,修改hadoop的配置HADOOP_CONF_DIR,指向hadoop_mode3
      cp -r  hadoop_mode2 hadoop_mode3
   
  1.以redhat-2為模板,完全克隆3個備份機,分別為s1,s2,s3
    這四個機器中,主從模式(即master/slaves):
       一個作為名稱節點
       一個作為名稱節點的副本
       其他兩個作為資料節點


      redhat-2:    s0:192.168.198.130
redhat-21:   s1:192.168.198.132
redhat-22:   s2:192.168.198.133
redhat-23:   s3:192.168.198.134
  2.修改他們的hostname為s1,s2,s3
    
  3.修改hosts檔案,先修改模板機hosts檔案/etc/hosts,增加配置
192.168.198.130  s0
192.168.198.132  s1
192.168.198.133  s2
192.168.198.134  s3


    把上述配置同樣的方式增加到3個備份機中去,由於host檔案都一樣,可以遠端copy過去覆蓋掉原始檔
    scp /etc/hosts  
[email protected]
:/etc/
    scp /etc/hosts  [email protected]:/etc/
    scp /etc/hosts  [email protected]:/etc/
 
    測試是否OK, ping s0,ping s1,ping s2,ping s3, cat /etc/hosts檔案看看是否更改成功
    再測試遠端登入ssh s1,ssh s2,ssh s3看看能否遠端登入幾個備份機,不需要輸入密碼
  4.修改hadoop配置檔案
    先修改模板機的hadoop配置檔案
    core-site.xml中修改localhost為s0
    hdfs-site.xml中修改副本數為2
    yarn-site.xml中修改localhost為s0
    修改slaves檔案localhost為s1,s2,即以s1,s2作為備份機
s1
s2
不能寫成s1,s2


    接下來把修改過的配置都覆蓋到其他機上去,可直接覆蓋hadoop_mode3整個目錄
    scp -r hadoop_mode3
[email protected]
:/usr/wpysoft/hadoop-2.7.1/etc
    scp -r hadoop_mode3 [email protected]:/usr/wpysoft/hadoop-2.7.1/etc
    scp -r hadoop_mode3 [email protected]:/usr/wpysoft/hadoop-2.7.1/etc


    檢查是否修改成功,ssh s1,s2,s3/exit 遠端登入上去檢視檔案
    可以直接檢視檔案  ssh s1 cat 檔案路徑檔案
  5.格式化檔案系統(修改過配置檔案再格式化一次)
     hadoop namenode -format
  6.啟動叢集
     在s0上start-all.sh
     可以檢視jps, ssh s1 jps, ssh s2 jps ,ssh s3 jps
     他們有的啟動名稱節點有的啟動資料節點