Hadoop學習筆記(一):ubuntu虛擬機下的hadoop偽分布式集群搭建


hadoop百度百科:https://baike.baidu.com/item/Hadoop/3526507?fr=aladdin

hadoop官網:http://hadoop.apache.org/

本文結構如下:

  1. 安裝hadoop前的准備工作

1.1 創建新用戶

1.2 更新APT

1.3 安裝SSH

1.4 安裝Java環境

  2.安裝和配置hadoop

     2.1 hadoop下載

     2.2 hadoop為分布式模式配置

    3.問題總結


 

1.安裝hadoop前的准備工作

    1.1創建hadoop用戶

   為了方便以后的實驗進行,推薦創建一個新的hadoop用戶,所有實驗內容都登陸該用戶進行,具體的shell代碼和注釋如下:

sudo useradd -m hadoop -s /bin/bash  #創建用戶hadoop,並使用/bin/bash作為Shell
sudo passwd hadoop  #設置hadoop的密碼
sudo adduser hadoop sudo   #為hadoop增加管理員權限

 

   1.2更新APT

  APT是一款軟件管理工具,Linux采用APT來安裝和管理各種軟件,安裝成功LInux系統以后,需要及時更新APT軟件,否則后續的一些軟件可能無法正常安裝,更新APT使用以下命令:

  

sudo apt-get update

   1.3安裝SSH

  SSH是Secure Shell的縮寫.....

  為什么要安裝Hasoop之前要配置SSH呢? 這是因為Hadoop名稱節點(NameNode)需要啟用集群中所有機器的Hadoop守護進程,這個過程需要通過SSH登陸來實現。Hadoop並沒有提供SSH輸入密碼登陸的形式,因此,為了能夠順利登陸集群中的每台機器,需要將所有機器配置為“名稱節點可以無密碼登陸它們”

  Ubuntu默認已經安裝了SSH客戶端,因此,只需要安裝SSH服務端,在終端中執行以下命令:

sudo apt-get install openssh-server

 

  然后可以使用如下命令登陸本機(因為是偽分布式集群,只有一台機器,同時作為名稱節點和普通節點),如果提示輸入密碼,則表示安裝成功了:

ssh localhost

  由於這樣登陸需要每次輸入密碼,所以,有必要配置SSH為無密碼登陸,這樣在Hadoop集群中,名稱節點(NameNode)要登陸某台機器就不需要人工輸入密碼了(實際上也不可能每次都人工輸入密碼),SSH免密登陸配置方法如下:

cd ~/.ssh/                  #,切換目錄,若沒有該目錄,請先執行一次ssh localhost
ssh-keygen -t rsa        #會有提示,按enter即可(即不設置密碼),這條語句生成公鑰和私鑰兩個文件,補充ssh-keygen的基本用法:https://blog.csdn.net/qq_38570571/article/details/79268426
cat ./id_rsa.pub >> ./authorized_keys      #加入授權,cat file1 >> file2 的含義是將file1的內容寫入到file2的尾部

  然后再執行ssh localhost命令,無需輸入密碼就可以直接登陸了,如圖:

  

  1.4 安裝Java環境

     Hadoop是基於Java語言開發的,同時Java語言也可以用來編寫Hadoop應用程序,在Linux系統中安裝Java環境有兩種方式:Oracle的JDK或OpenJDK,本文采用第二中方式:

sudo apt-get install default-jre default-jdk
#使用apt安裝jre和jdk

    安裝完成后,編輯~/.bashrc,添加JAVA_HOME環境變量:

vim ~/.bashrc
#編輯~/.bashrc

    在.bashrc中添加如下單獨一行:

export JAVA_HOME=/usr/lib/jvm/defult-java

    然后執行如下代碼,使環境變量立即生效:

source ~/.bashrc    #使環境變量設置生效

    檢驗一下是否設置正確:

echo $JAVA_HOME  #打印$JAVA_HOME
java --version  #查看java版本

    Java安裝成功后,就可以進行Hadoop的安裝了


 

2.安裝和配置Hadoop

  2.1 Hadoop下載和安裝

    Hadoop官網:http://hadoop.apache.org/,選擇合適的版本(本文采用Hadoop2.7.7)下載(可以在windows系統中下載后,用ftp軟件如filezilla上傳到ubuntu虛擬機,也可以在ubuntu中直接下載),本文使用filezilla上傳hadoop壓縮包到ubuntu的~/Downloads/目錄下,然后解壓縮到/usr/local/並重命名文件夾為hadoop,由於我們當前的用戶為hadoop,沒有usr/local的文件權限,所以還需要修改文件權限,執行命令如下:

sudo tar -zxf ~/Downloads/hadoop-2.7.7.tar.gz -C /usr/local #解壓縮
cd /usr/local/
sudo mv ./hadoop-2.7.7 ./hadoop #重命名文件
sudo chown -R hadoop ./hadoop  #修改文件權限,即將./hadoop目錄下所有的文件的屬組都改成hadoop,也可以使用sudo chmod 777 ./hadoop

    解壓成功后,就可以使用如下命令查看Hadoop的版本信息:

cd /usr/local/hadoop
./bin/hadoop version

  2.2Hadoop模式配置

    Hadoop的默認模式為本地模式(即單機模式),無須其他配置就可以運行,值得注意的是,Hadoop的模式變更(單機模式、偽分布式、分布式)完全是通過修改配置文件實現的,本文想要將Hadoop配置為偽分布式模式,即只有一個節點(一台機器),這個節點既作為名稱節點(NameNode),也作為數據節點(DataNode),偽分布式模式配置涉及兩個配置文件:hadoop目錄/etc/hadoop/下的core-site.xml和hdfs-site.xml,首先在core-site.xml文件中新增如下屬性:

<property>
    <name>hadoop.tmp.dir</name>
    <value>file:/usr/local/hadoop/tmp</value>  #指定臨時目錄,如果不指定,會默認使用臨時目錄/tmp/hadoo-hadoop,這個文件在Hadoop重啟時可能被清除
    <description>Abase for other trmporary directories</description>
</property>
<property>
    <name>fs.defaultFS</name>  #指定HDFS的訪問地址
    <value>hdfs://localhost:9000</value>
</property>

    然后在hdfs-site.xml中新增如下屬性:

<property>
    <name>dfs.replication</name>  #指定副本數量
    <value>1</value>
</property>

<property>
    <name>dfs.namenode.name.dir</name>  #name節點的存儲位置
    <value>file:/usr/local/hadoop/tmp/dfs/name</value>
</property>

<property>
    <name>dfs.datanode.data.dir</name>   #data節點的存儲位置
    <value>file:/usr/local/hadoop/tmp/dfs/data</value>
</property>

    上面兩個文件內涉及的屬性名稱和值得含義可以在Hadoop官網中查看:

    http://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/core-default.xml

    和http://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml

    完成了配置文件的修改后,就可以執行名稱節點格式化(NameNode Format)了:

cd /usr/local/hadoop
./bin/hdfs namenode -format

    如果格式化成功,會看到Exiting with status 0的提示

    然后執行以下命令啟動Hadoop

cd /usr/local/hadoop
./sbin/start-dfs.sh

    在終端中執行jps(查看所有java進程pid)判斷hadoop是否啟動成功:

jps

    如果執行成功,就可以看到如下幾個進程:

    至此,Hadoop偽分布式環境搭建成功


 

3.問題總結

  1.DataNode沒有啟動

    通過查閱資料https://blog.csdn.net/islotus/article/details/78357857,原因是:

 

  當我們使用hadoop namenode -format格式化namenode時,會在namenode數據文件夾(這個文件夾為自己配置文件中dfs.name.dir的路徑)中保存一個current/VERSION文件,記錄clusterID,datanode中保存的current/VERSION文件中的clustreID的值是上一次格式化保存的clusterID,這樣就導致了datanode和namenode之間的ID不一致。

  解決方法有兩種,一是刪除dfs文件(如果沒有重要數據),二是在dfs/name目錄下找到一個current/VERSION文件,記錄clusterID並復制。然后dfs/data目錄下找到一個current/VERSION文件,將其中clustreID的值替換成剛剛復制的clusterID的值即可

  應該在每一次運行結束Hadoop后,都關閉Hadoop

  2.一定要關注權限問題

  因為Linux下對用戶權限有着嚴格的約束,用戶A只有權訪問/home/A/下的文件,用戶B只有權訪問/home/B/下的文件,如果A想要訪問B的文件fileB,那么就要賦權給A,具體的方法有很多種,本文在剛開始執行名稱節點格式化的過程中老是出錯,就是因為沒有注意權限問題。

 


免責聲明!

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



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