天天看點

hadoop classpath_大資料研發環境搭建(1)-Hadoop基礎篇

一、環境說明

本教程使用

Ubuntu 18.04 64位

作為系統環境(或者Ubuntu 20.04LTS, 也行,32位、64位均可),請自行百度安裝虛拟機系統或本地安裝。

裝好了 Ubuntu 系統之後,在安裝 Hadoop 前還需要做一些必備工作。

建立hadoop使用者

如果你安裝 Ubuntu 的時候不是用的 “hadoop” 使用者,那麼需要增加一個名為 hadoop 的使用者。

首先按

ctrl+alt+t

打開終端視窗,輸入如下指令建立新使用者 :

sudo useradd -m hadoop -s /bin/bash    #建立hadoop使用者

sudo passwd hadoop    #指令設定密碼,可簡單設定為 hadoop

sudo adduser hadoop sudo     #增加hadoop使用者權限
           
更新apt

用 hadoop 使用者登入後,我們先更新一下 apt,後續我們使用 apt 安裝軟體,如果沒更新可能有一些軟體安裝不了。按 ctrl+alt+t 打開終端視窗,執行如下指令:

安裝VIM編輯器

二、 安裝SSH、配置SSH無密碼登陸

叢集、單節點模式都需要用到 SSH 登陸(類似于遠端登陸,你可以登入某台 Linux 主機,并且在上面運作指令),Ubuntu 預設已安裝了 SSH client,此外還需要安裝 SSH server:

sudo apt-get install openssh-server
           

安裝後,可以使用如下指令登陸本機:

此時會有如下提示(SSH首次登陸提示),輸入 yes 。然後按提示輸入密碼 hadoop,這樣就登陸到本機了。

但這樣登陸是需要每次輸入密碼的,我們需要配置成SSH無密碼登陸比較友善。

首先退出剛才的 ssh,就回到了我們原先的終端視窗,然後利用 ssh-keygen 生成密鑰,并将密鑰加入到授權中:

exit                           # 退出剛才的 ssh localhost
cd ~/.ssh/                     # 若沒有該目錄,請先執行一次ssh localhost
ssh-keygen -t rsa              # 會有提示,都按回車就可以
cat ./id_rsa.pub >> ./authorized_keys  # 加入授權
           

三、 安裝Java環境

手動安裝,推薦采用本方式

需要JDK版本在及以上。需要按照下面步驟來自己手動安裝JDK。

官網下載下傳安裝包 的最新安裝包。請把壓縮格式的檔案下載下傳到本地電腦,假設儲存在“/home/hadoop/Downloads/”目錄下。

在Linux指令行界面中,執行如下Shell指令(注意:目前登入使用者名是hadoop):

cd /usr/lib
sudo mkdir jvm #建立/usr/lib/jvm目錄用來存放JDK檔案
cd ~ #進入hadoop使用者的主目錄
cd Downloads  #注意區分大小寫字母,剛才已經通過FTP軟體把JDK安裝包上傳到該目錄下
sudo tar -zxvf ./ -C /usr/lib/jvm  #把JDK檔案解壓到/usr/lib/jvm目錄下
           

上面使用了解壓縮指令tar,如果對Linux指令不熟悉,自行百度。

JDK檔案解壓縮以後,可以執行如下指令到/usr/lib/jvm目錄檢視一下:

cd /usr/lib/jvm
ls


cd ~
vim ~/.bashrc
           

上面指令使用vim編輯器()打開了hadoop這個使用者的環境變量配置檔案,請在這個檔案的開頭位置,添加如下幾行内容:

export JAVA_HOME=/usr/lib/jvm/jdk.0_162
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
           

儲存.bashrc檔案并退出vim編輯器。然後,繼續執行如下指令讓.bashrc檔案的配置立即生效:

這時,可以使用如下指令檢視是否安裝成功:

如果能夠在螢幕上傳回如下資訊,則說明安裝成功:

[email protected]:~$ java -version
java version ".0_162"
Java(TM) SE Runtime Environment (build .0_162-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.162-b12, mixed mode)
           

至此,就成功安裝了Java環境。下面就可以進入Hadoop的安裝。

四、安裝 (一定要此版本)

Hadoop安裝檔案,可以到Hadoop官網下載下傳。找到檔案,下載下傳到本地。

我們選擇将 Hadoop 安裝至 /usr/local/ 中:

sudo tar -zxf ~/下載下傳/ -C /usr/local    # 解壓到/usr/local中
cd /usr/local/
sudo mv ./hadoop-/ ./hadoop            # 将檔案夾名改為hadoop
sudo chown -R hadoop ./hadoop       # 修改檔案權限
           

Hadoop 解壓後即可使用。輸入如下指令來檢查 Hadoop 是否可用,成功則會顯示 Hadoop 版本資訊:

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

注意提示:

相對路徑與絕對路徑

請務必注意指令中的相對路徑與絕對路徑,本文後續出現的

./bin/...

./etc/...

等包含 ./ 的路徑,均為相對路徑,以 /usr/local/hadoop 為目前目錄。例如在 /usr/local/hadoop 目錄中執行

./bin/hadoop version

等同于執行

/usr/local/hadoop/bin/hadoop version

。可以将相對路徑改成絕對路徑來執行,但如果你是在主檔案夾 ~ 中執行

./bin/hadoop version

,執行的會是

/home/hadoop/bin/hadoop version

,就不是我們所想要的了。

Hadoop僞分布式配置(這裡采用僞分布作為開發使用,完全分布式後續)

Hadoop 可以在單節點上以僞分布式的方式運作,Hadoop 程序以分離的 Java 程序來運作,節點既作為 NameNode 也作為 DataNode,同時,讀取的是 HDFS 中的檔案。

Hadoop 的配置檔案位于 /usr/local/hadoop/etc/hadoop/ 中,僞分布式需要修改2個配置檔案

。Hadoop的配置檔案是 xml 格式,每個配置以聲明 property 的 name 和 value 的方式來實作。

修改配置檔案

(通過 gedit 編輯會比較友善:

gedit ./etc/hadoop/

),将當中的

<configuration>
</configuration>
           

修改為下面配置:

<configuration>
 <property>
 <name></name>
 <value>file:/usr/local/hadoop/tmp</value>
 <description>Abase for other temporary directories.</description>
 </property>
 <property>
 <name></name>
 <value>hdfs://localhost:9000</value>
 </property>
</configuration>
           

同樣的,修改配置檔案

<configuration>
 <property>
 <name></name>
 <value>1</value>
 </property>
 <property>
 <name></name>
 <value>file:/usr/local/hadoop/tmp/dfs/name</value>
 </property>
 <property>
 <name></name>
 <value>file:/usr/local/hadoop/tmp/dfs/data</value>
 </property>
</configuration>
           
Hadoop配置檔案說明

Hadoop 的運作方式是由配置檔案決定的(運作 Hadoop 時會讀取配置檔案),是以如果需要從僞分布式模式切換回非分布式模式,需要删除 中的配置項。

此外,僞分布式雖然隻需要配置 和 就可以運作(官方教程如此),不過若沒有配置 參數,則預設使用的臨時目錄為 /tmp/hadoo-hadoop,而這個目錄在重新開機時有可能被系統清理掉,導緻必須重新執行 format 才行。是以我們進行了設定,同時也指定 和 ,否則在接下來的步驟中可能會出錯。

配置完成後,執行 NameNode 的格式化:
cd /usr/local/hadoop
./bin/hdfs namenode -format
           

成功的話,會看到 “successfully formatted” 的提示,具體傳回資訊類似如下:

2020-01-08 15:31:31,560 INFO namenode.NameNode: STARTUP_MSG: 
/************************************************************

STARTUP_MSG: Starting NameNode
STARTUP_MSG:   host = hadoop/
STARTUP_MSG:   args = [-format]
STARTUP_MSG:  version = 
*************************************************************/

......
2020-01-08 15:31:35,677 INFO common.Storage: Storage directory /usr/local/hadoop/tmp/dfs/name **has been successfully formatted**.
2020-01-08 15:31:35,700 INFO namenode.FSImageFormatProtobuf: Saving image file /usr/local/hadoop/tmp/dfs/name/current/fsimage.ckpt_0000000000000000000 using no compression
2020-01-08 15:31:35,770 INFO namenode.FSImageFormatProtobuf: Image file /usr/local/hadoop/tmp/dfs/name/current/fsimage.ckpt_0000000000000000000 of size 393 bytes saved in 0 seconds .
2020-01-08 15:31:35,810 INFO namenode.NNStorageRetentionManager: Going to retain 1 images with txid >= 0
2020-01-08 15:31:35,816 INFO namenode.FSImage: FSImageSaver clean checkpoint: txid = 0 when meet shutdown.
2020-01-08 15:31:35,816 INFO namenode.NameNode: SHUTDOWN_MSG:  
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at hadoop/
*************************************************************/
           

如果在這一步時提示

Error: JAVA_HOME is not set and could not be found.

的錯誤,則說明之前設定 JAVA_HOME 環境變量那邊就沒設定好,請按教程先設定好 JAVA_HOME 變量,否則後面的過程都是進行不下去的。如果已經按照前面教程在.bashrc檔案中設定了JAVA_HOME,還是出現

Error: JAVA_HOME is not set and could not be found.

的錯誤,那麼,請到hadoop的安裝目錄修改配置檔案“/usr/local/hadoop/etc/hadoop/”,在裡面找到“export JAVA_HOME=${JAVA_HOME}”這行,然後,把它修改成JAVA安裝路徑的具體位址,比如,“export JAVA_HOME=/usr/lib/jvm/default-java”,然後,再次啟動Hadoop。

接着開啟 NameNode 和 DataNode 守護程序。

cd /usr/local/hadoop
./sbin/  #是個完整的可執行檔案,中間沒有空格
           

五、 運作Hadoop僞分布式執行個體

上面的單機模式,grep 例子讀取的是本地資料,僞分布式讀取的則是 HDFS 上的資料。要使用 HDFS,首先需要在 HDFS 中建立使用者目錄:

./bin/hdfs dfs -mkdir -p /user/hadoop
           

注意指令是以”./bin/hadoop dfs”開頭的Shell指令方式,實際上有三種shell指令方式。

1. hadoop fs

2. hadoop dfs

3. hdfs dfs

hadoop fs适用于任何不同的檔案系統,比如本地檔案系統和HDFS檔案系統

hadoop dfs隻能适用于HDFS檔案系統

hdfs dfs跟hadoop dfs的指令作用一樣,也隻能适用于HDFS檔案系統

接着将 ./etc/hadoop 中的 xml 檔案作為輸入檔案複制到分布式檔案系統中,即将 /usr/local/hadoop/etc/hadoop 複制到分布式檔案系統中的 /user/hadoop/input 中。我們使用的是 hadoop 使用者,并且已建立相應的使用者目錄 /user/hadoop ,是以在指令中就可以使用相對路徑如 input,其對應的絕對路徑就是 /user/hadoop/input:

./bin/hdfs dfs -mkdir input
./bin/hdfs dfs -put ./etc/hadoop/*.xml input
           

複制完成後,可以通過如下指令檢視檔案清單:

僞分布式運作 MapReduce 作業的方式跟單機模式相同,差別在于僞分布式讀取的是HDFS中的檔案(可以将單機步驟中建立的本地 input 檔案夾,輸出結果 output 檔案夾都删掉來驗證這一點)。

./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-.jar grep input output 'dfs[a-z.]+'
           

檢視運作結果的指令(檢視的是位于 HDFS 中的輸出結果):

./bin/hdfs dfs -cat output/*
           

結果如下,注意到剛才我們已經更改了配置檔案,是以運作結果不同。

注意:

Hadoop 運作程式時,輸出目錄不能存在,否則會提示錯誤 “org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory hdfs://localhost:9000/user/hadoop/output already exists” ,是以若要再次執行,需要執行如下指令删除 output 檔案夾:

./bin/hdfs dfs -rm -r output    # 删除 output 檔案夾
           

若要關閉 Hadoop,則運作

注意下次啟動 hadoop 時,無需進行 NameNode 的初始化,隻需要運作

./sbin/

就可以!

繼續閱讀