Hadoop安裝教程_單機(jī)/偽分布式配置

最近在實(shí)踐中感覺Hadoop避無可避,而安裝往往就體驗(yàn)一把從入門到放棄。盡管環(huán)境搭建現(xiàn)在越來越簡(jiǎn)單,但是還是有很多坑,尤其對(duì)于linux環(huán)境不熟悉的同學(xué)們來講。
本教程適用于原生Hadoop2.7,主要參考了官方安裝教程,按照步驟,基本能夠順利安裝并體驗(yàn)Hadoop的精彩之處。

環(huán)境

系統(tǒng)版本

本教程使用Ubuntu17.10 64位作為安裝系統(tǒng)(16.04以上版本均可)請(qǐng)自行配置安裝

Hadoop 版本

Hadoop 版本
Hadoop主要有三個(gè)版本,Hadoop1.x.y、Hadoop2.x.y和Hadoop3.x.y系列,本教程主要集中處理Hadoop2.7及以上。
新版兼容舊版,低版本代碼可在高版本使用(歡迎驗(yàn)證反饋)

創(chuàng)建Hadoop用戶

  • 在終端窗口,輸入如下命令創(chuàng)建用戶
    sudo useradd -m hadoop -s /bin/bash
  • 使用如下命令設(shè)置密碼,按照提示輸入兩次密碼
    sudo passwd hadoop
  • 為用戶增加管理員權(quán)限,減少權(quán)限問題
    sudo adduser hadoop sudo
  • 使用如下命令切換用戶
    su - hadoop

安裝Java 環(huán)境

Java 環(huán)境可使用Oracle的JDK或者OpenJDK,可依據(jù)該鏈接步驟安裝https://wiki.apache.org/hadoop/HadoopJavaVersions
或通過如下命令安裝 OpenJDK
sudo apt install openjdk-7-jre openjdk-7-jdk

JRE和JDK區(qū)別
JRE(Java Runtime Environment Java運(yùn)行環(huán)境)是Java運(yùn)行所需環(huán)境。
JDK(Java Development Kit Java軟件開發(fā)工具包)既包括JRE,還包括開發(fā)Java所需的工具和類庫(kù)

  • 配置環(huán)境變量
    vi ~/.bashrc
    export JAVA_HOME=JDK安裝路徑
  • 運(yùn)行如下命令,使環(huán)境變量生效
    source ~/.bashrc

安裝Hadoop2

Hadoop可通過http://mirror.bit.edu.cn/apache/hadoop/common/或者https://mirrors.cnnic.cn/apache/hadoop/common/下載,一般選擇穩(wěn)定版本,下載是建議下載Hadoop-2.x.y.tar.gz

  • Hadoop安裝至/usr/local/
    sudo tar -zxf ~/下載/hadoop-2.7.7.tar.gz -C /usr/local    # 解壓到/usr/local中
    cd /usr/local/
    sudo mv ./hadoop-2.7.7/ ./hadoop            # 將文件夾名改為hadoop
    sudo chown -R hadoop ./hadoop       # 修改文件權(quán)限
    
  • Hadoop 解壓后即可使用。輸入如下命令來檢查 Hadoop 是否可用,成功則會(huì)顯示 Hadoop 版本信息:
      cd /usr/local/hadoop
    ./bin/hadoop version
    

    相對(duì)路徑與絕對(duì)路徑的區(qū)別
    請(qǐng)務(wù)必注意命令中的相對(duì)路徑與絕對(duì)路徑,本文后續(xù)出現(xiàn)的 ./bin/...,./etc/... 等包含 ./ 的路徑,均為相對(duì)路徑,以 /usr/local/hadoop 為當(dāng)前目錄。例如在 /usr/local/hadoop 目錄中執(zhí)行 ./bin/hadoop version 等同于執(zhí)行 /usr/local/hadoop/bin/hadoop version。可以將相對(duì)路徑改成絕對(duì)路徑來執(zhí)行,但如果你是在主文件夾 ~ 中執(zhí)行 ./bin/hadoop version,執(zhí)行的會(huì)是 /home/hadoop/bin/hadoop version,就不是我們所想要的了。

Hadoop單機(jī)配置(非分布式)

Hadoop 默認(rèn)模式為非分布式模式,無需進(jìn)行其他配置即可運(yùn)行。非分布式即單 Java 進(jìn)程,方便進(jìn)行調(diào)試。

現(xiàn)在我們可以執(zhí)行例子來感受下 Hadoop 的運(yùn)行。Hadoop 附帶了豐富的例子(運(yùn)行 ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.07.jar 可以看到所有例子),包括 wordcount、terasort、join、grep 等。

在此我們選擇運(yùn)行 grep 例子,我們將 input 文件夾中的所有文件作為輸入,篩選當(dāng)中符合正則表達(dá)式 dfs[a-z.]+ 的單詞并統(tǒng)計(jì)出現(xiàn)的次數(shù),最后輸出結(jié)果到 output 文件夾中。

  cd /usr/local/hadoop
  mkdir ./input
  cp ./etc/hadoop/*.xml ./input   # 將配置文件作為輸入文件
  ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep ./input     ./output 'dfs[a-z.]+'
  cat ./output/*   # 查看運(yùn)行結(jié)果

執(zhí)行成功后如下所示,輸出了作業(yè)的相關(guān)信息,輸出的結(jié)果是符合正則的單詞 dfsadmin 出現(xiàn)了1次


注意:Hadoop 默認(rèn)不會(huì)覆蓋結(jié)果文件,因此再次運(yùn)行上面實(shí)例會(huì)提示出錯(cuò),需要先將 ./output 刪除。

Hadoop偽分布式配置

Hadoop 可以在單節(jié)點(diǎn)上以偽分布式的方式運(yùn)行,Hadoop 進(jìn)程以分離的 Java 進(jìn)程來運(yùn)行,節(jié)點(diǎn)既作為 NameNode 也作為 DataNode,同時(shí),讀取的是 HDFS 中的文件。

Hadoop 的配置文件位于 /usr/local/hadoop/etc/hadoop/ 中,偽分布式需要修改2個(gè)配置文件 core-site.xml 和 hdfs-site.xml 。Hadoop的配置文件是 xml 格式,每個(gè)配置以聲明 property 的 name 和 value 的方式來實(shí)現(xiàn)。

修改配置文件 core-site.xml (通過 gedit 編輯會(huì)比較方便: gedit ./etc/hadoop/core-site.xml),將當(dāng)中的

  <configuration>
  </configuration>

修改為下面配置:

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

同樣的,修改配置文件 hdfs-site.xml:

<configuration>
        <property>
             <name>dfs.replication</name>
             <value>1</value>
        </property>
        <property>
             <name>dfs.namenode.name.dir</name>
             <value>file:/usr/local/hadoop/tmp/dfs/name</value>
        </property>
        <property>
             <name>dfs.datanode.data.dir</name>
             <value>file:/usr/local/hadoop/tmp/dfs/data</value>
        </property>
</configuration>

Hadoop配置文件說明
Hadoop 的運(yùn)行方式是由配置文件決定的(運(yùn)行 Hadoop 時(shí)會(huì)讀取配置文件),因此如果需要從偽分布式模式切換回非分布式模式,需要?jiǎng)h除 core-site.xml 中的配置項(xiàng)。
此外,偽分布式雖然只需要配置 fs.defaultFS 和 dfs.replication 就可以運(yùn)行(官方教程如此),不過若沒有配置 hadoop.tmp.dir 參數(shù),則默認(rèn)使用的臨時(shí)目錄為 /tmp/hadoo-hadoop,而這個(gè)目錄在重啟時(shí)有可能被系統(tǒng)清理掉,導(dǎo)致必須重新執(zhí)行 format 才行。所以我們進(jìn)行了設(shè)置,同時(shí)也指定 dfs.namenode.name.dir 和 dfs.datanode.data.dir,否則在接下來的步驟中可能會(huì)出錯(cuò)。

  • 配置完成后,執(zhí)行 NameNode 的格式化:
    ./bin/hdfs namenode -format


    如果在這一步時(shí)提示 Error: JAVA_HOME is not set and could not be found. 的錯(cuò)誤,則說明之前設(shè)置 JAVA_HOME 環(huán)境變量那邊就沒設(shè)置好,請(qǐng)按教程先設(shè)置好 JAVA_HOME 變量,否則后面的過程都是進(jìn)行不下去的。若JAVA_HOME設(shè)置正確,則修改./etc/hadoop/hadoop-env.sh添加環(huán)境變量expect JAVA_HOME=JDK安裝路徑

  • 接著開啟 NameNode 和 DataNode 守護(hù)進(jìn)程。
    ./sbin/start-dfs.sh

    啟動(dòng) Hadoop 時(shí)提示 Could not resolve hostname
    如果啟動(dòng) Hadoop 時(shí)遇到輸出非常多“ssh: Could not resolve hostname xxx”的異常情況
    這個(gè)并不是 ssh 的問題,可通過設(shè)置 Hadoop 環(huán)境變量來解決。首先按鍵盤的 ctrl + c 中斷啟動(dòng),然后在 ~/.bashrc 中,增加如下兩行內(nèi)容(設(shè)置過程與 JAVA_HOME 變量一樣,其中 HADOOP_HOME 為 Hadoop 的安裝目錄):
    export HADOOP_HOME=/usr/local/hadoop
    export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
    保存后,務(wù)必執(zhí)行 source ~/.bashrc 使變量設(shè)置生效,然后再次執(zhí)行 ./sbin/start-dfs.sh 啟動(dòng) Hadoop。

啟動(dòng)完成后,可以通過命令 jps 來判斷是否成功啟動(dòng),若成功啟動(dòng)則會(huì)列出如下進(jìn)程: “NameNode”、”DataNode” 和 “SecondaryNameNode”(如果 SecondaryNameNode 沒有啟動(dòng),請(qǐng)運(yùn)行 sbin/stop-dfs.sh 關(guān)閉進(jìn)程,然后再次嘗試啟動(dòng)嘗試)。如果沒有 NameNode 或 DataNode ,那就是配置不成功,請(qǐng)仔細(xì)檢查之前步驟,或通過查看啟動(dòng)日志排查原因。

  • 成功啟動(dòng)后,可以訪問 Web 界面 http://localhost:50070 查看 NameNode 和 Datanode 信息,還可以在線查看 HDFS 中的文件。

運(yùn)行Hadoop偽分布式實(shí)例

上面的單機(jī)模式,grep 例子讀取的是本地?cái)?shù)據(jù),偽分布式讀取的則是 HDFS 上的數(shù)據(jù)。要使用 HDFS,首先需要在 HDFS 中創(chuàng)建用戶目錄:
./bin/hdfs dfs -mkdir -p /user/hadoop

接著將 ./etc/hadoop 中的 xml 文件作為輸入文件復(fù)制到分布式文件系統(tǒng)中,即將 /usr/local/hadoop/etc/hadoop 復(fù)制到分布式文件系統(tǒng)中的 /user/hadoop/input 中。我們使用的是 hadoop 用戶,并且已創(chuàng)建相應(yīng)的用戶目錄 /user/hadoop ,因此在命令中就可以使用相對(duì)路徑如 input,其對(duì)應(yīng)的絕對(duì)路徑就是 /user/hadoop/input:
./bin/hdfs dfs -mkdir input
./bin/hdfs dfs -put ./etc/hadoop/*.xml input

復(fù)制完成后,可以通過如下命令查看文件列表
./bin/hdfs dfs -ls input

偽分布式運(yùn)行 MapReduce 作業(yè)的方式跟單機(jī)模式相同,區(qū)別在于偽分布式讀取的是HDFS中的文件(可以將單機(jī)步驟中創(chuàng)建的本地 input 文件夾,輸出結(jié)果 output 文件夾都刪掉來驗(yàn)證這一點(diǎn))。
./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep input output 'dfs[a-z.]+'

查看運(yùn)行結(jié)果的命令(查看的是位于 HDFS 中的輸出結(jié)果):
./bin/hdfs dfs -cat output/*

我們也可以將運(yùn)行結(jié)果取回到本地:
rm -r ./output # 先刪除本地的 output 文件夾(如果存在)
./bin/hdfs dfs -get output ./output # 將 HDFS 上的 output 文件夾拷貝到本機(jī)
cat ./output/*
./bin/hdfs dfs -rm -r output # 刪除 output 文件夾

關(guān)閉Hadoop :./sbin/stop-dfs.sh

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,663評(píng)論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,125評(píng)論 3 414
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,506評(píng)論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,614評(píng)論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,402評(píng)論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 54,934評(píng)論 1 321
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,021評(píng)論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,168評(píng)論 0 287
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,690評(píng)論 1 333
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,596評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,784評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,288評(píng)論 5 357
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,027評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,404評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,662評(píng)論 1 280
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,398評(píng)論 3 390
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,743評(píng)論 2 370

推薦閱讀更多精彩內(nèi)容

  • 一、系統(tǒng)參數(shù)配置優(yōu)化 1、系統(tǒng)內(nèi)核參數(shù)優(yōu)化配置 修改文件/etc/sysctl.conf,添加如下配置,然后執(zhí)行s...
    張偉科閱讀 3,766評(píng)論 0 14
  • 終極算法 關(guān)注微信號(hào)每天收聽我們的消息終極算法為您推送精品閱讀 前言 Hadoop 在大數(shù)據(jù)技術(shù)體系中的地位至關(guān)...
    Yespon閱讀 130,131評(píng)論 12 168
  • 意大利插畫家Marco Melgrati曾根據(jù)現(xiàn)實(shí)題材創(chuàng)作過一幅畫——“你永遠(yuǎn)不知道跟你玩的是誰!” 畫中的貓把蛇...
    燕燕李李閱讀 352評(píng)論 0 0
  • 我在上一篇文章中講了多次賠付重疾險(xiǎn)值不值得買,今天就書接上回,跟大家聊一聊如何挑選產(chǎn)品。本來說是周五的,但是我今天...
    保準(zhǔn)老斯基閱讀 2,394評(píng)論 0 0
  • 說實(shí)話看完電影后感觸并不是特別深刻,甚至顛覆了以前我對(duì)舒淇演技的印象:她依舊那么美,但在這部電影的表現(xiàn)卻顯得那么矯...
    教育小碩閱讀 571評(píng)論 0 0