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

      網友投稿 821 2022-05-28

      Hadoop安裝文件,可以到Hadoop官網下載,也可以點擊這里從百度云盤下載(提取碼:99bg),進入該百度云盤鏈接后,找到Hadoop安裝文件hadoop-2.7.1.tar.gz(本教程也可以用于安裝Hadoop 2.7.1版本)。

      環境

      本教程使用 Ubuntu 14.04 64位 作為系統環境(Ubuntu 12.04,Ubuntu16.04 也行,32位、64位均可)。

      可用VMware作為虛擬機(VMware虛擬機版本選擇及安裝教程_渣渣ye的博客-CSDN博客)

      創建hadoop用戶

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

      首先按?ctrl+alt+t?打開終端窗口,輸入如下命令創建新用戶 :

      sudo useradd -m hadoop -s /bin/bash

      這條命令創建了可以登陸的 hadoop 用戶,并使用 /bin/bash 作為 shell。

      接著使用如下命令設置密碼,可簡單設置為 hadoop,按提示輸入兩次密碼:

      sudo passwd hadoop

      可為 hadoop 用戶增加管理員權限,方便部署:

      sudo adduser hadoop sudo

      最后注銷當前用戶(點擊屏幕右上角的齒輪,選擇注銷),返回登陸界面。在登陸界面中選擇剛創建的 hadoop 用戶進行登陸。

      更新apt

      用 hadoop 用戶登錄后,我們先更新一下 apt,后續我們使用 apt 安裝軟件,如果沒更新可能有一些軟件安裝不了。按 ctrl+alt+t 打開終端窗口,執行如下命令:

      sudo apt-get update

      后續需要更改一些配置文件,可使用 vim(vi增強版,基本用法相同),建議安裝一下(如果實在還不會用 vi/vim 的,請將后面用到 vim 的地方改為 gedit,這樣可以使用文本編輯器進行修改,并且每次文件更改完成后請關閉整個 gedit 程序,否則會占用終端):

      sudo apt-get install vim

      安裝軟件時若需要確認,在提示處輸入 y 即可。

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

      集群、單節點模式都需要用到 SSH 登陸(類似于遠程登陸,可以登錄某臺 Linux 主機,并且在上面運行命令),Ubuntu 默認已安裝了 SSH client,此外還需要安裝 SSH server:

      sudo apt-get install openssh-server

      安裝后,可以使用如下命令登陸本機:

      ssh localhost

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

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

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

      exit # 退出剛才的 ssh localhost

      cd ~/.ssh/ # 若沒有該目錄,請先執行一次ssh localhost

      ssh-keygen -t rsa # 會有提示,都按回車就可以

      cat ./id_rsa.pub >> ./authorized_keys # 加入授權

      ~的含義

      在 Linux 系統中,~ 代表的是用戶的主文件夾,即 “/home/用戶名” 這個目錄,如你的用戶名為 hadoop,則 ~ 就代表 “/home/hadoop/”。 此外,命令中的 # 后面的文字是注釋,只需要輸入前面命令即可。

      此時再用?ssh localhost?命令,無需輸入密碼就可以直接登陸了,如下圖所示。

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

      安裝Java環境

      手動安裝

      可以點擊這里到百度云盤下載JDK1.8安裝包(提取碼:99bg)。請把壓縮格式的文件jdk-8u162-linux-x64.tar.gz下載到本地電腦,假設保存在“/home/linziyu/Downloads/”目錄下。

      在Linux命令行界面中,執行如下Shell命令(注意:當前登錄用戶名是hadoop):

      cd /usr/lib

      sudo mkdir jvm #創建/usr/lib/jvm目錄用來存放JDK文件

      cd ~ #進入hadoop用戶的主目錄

      cd Downloads #注意區分大小寫字母,剛才已經通過FTP軟件把JDK安裝包jdk-8u162-linux-x64.tar.gz上傳到該目錄下

      sudo tar -zxvf ./jdk-8u162-linux-x64.tar.gz -C /usr/lib/jvm #把JDK文件解壓到/usr/lib/jvm目錄下

      JDK文件解壓縮以后,可以執行如下命令到/usr/lib/jvm目錄查看一下:

      cd /usr/lib/jvm

      ls

      可以看到,在/usr/lib/jvm目錄下有個jdk1.8.0_162目錄。

      下面繼續執行如下命令,設置環境變量:

      cd ~

      vim ~/.bashrc

      上面命令使用vim編輯,打開了hadoop這個用戶的環境變量配置文件,請在這個文件的開頭位置,添加如下幾行內容:

      export JAVA_HOME=/usr/lib/jvm/jdk1.8.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文件的配置立即生效:

      source ~/.bashrc

      這時,可以使用如下命令查看是否安裝成功:

      java -version

      如果能夠在屏幕上返回如下信息,則說明安裝成功:

      hadoop@ubuntu:~$ java -version

      java version "1.8.0_162"

      Java(TM) SE Runtime Environment (build 1.8.0_162-b12)

      Java HotSpot(TM) 64-Bit Server VM (build 25.162-b12, mixed mode)

      安裝 Hadoop 2

      Hadoop安裝文件,可以到Hadoop官網下載,也可以點擊這里從百度云盤下載(提取碼:99bg),進入該百度云盤鏈接后,找到Hadoop安裝文件hadoop-2.7.1.tar.gz(本教程也可以用于安裝Hadoop 2.7.1版本)。

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

      sudo tar -zxf ~/下載/hadoop-2.6.0.tar.gz -C /usr/local # 解壓到/usr/local中

      cd /usr/local/

      sudo mv ./hadoop-2.6.0/ ./hadoop # 將文件夾名改為hadoop

      sudo chown -R hadoop ./hadoop # 修改文件權限

      Hadoop 解壓后即可使用。輸入如下命令來檢查 Hadoop 是否可用,成功則會顯示 Hadoop 版本信息:

      cd /usr/local/hadoop

      ./bin/hadoop version

      Hadoop單機配置(非分布式)

      Hadoop 默認模式為非分布式模式(本地模式),無需進行其他配置即可運行。非分布式即單 Java 進程,方便進行調試。

      在此我們選擇運行 grep 例子,我們將 input 文件夾中的所有文件作為輸入,篩選當中符合正則表達式 dfs[a-z.]+ 的單詞并統計出現的次數,最后輸出結果到 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/* # 查看運行結果

      執行成功后如下所示,輸出了作業的相關信息,輸出的結果是符合正則的單詞 dfsadmin 出現了1次

      注意,Hadoop 默認不會覆蓋結果文件,因此再次運行上面實例會提示出錯,需要先將?./output?刪除。

      rm -r ./output

      Hadoop偽分布式配置

      Hadoop 可以在單節點上以偽分布式的方式運行,Hadoop 進程以分離的 Java 進程來運行,節點既作為 NameNode 也作為 DataNode,同時,讀取的是 HDFS 中的文件。

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

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

      修改為下面配置:

      hadoop.tmp.dir

      file:/usr/local/hadoop/tmp

      Abase for other temporary directories.

      fs.defaultFS

      hdfs://localhost:9000

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

      dfs.replication

      1

      dfs.namenode.name.dir

      file:/usr/local/hadoop/tmp/dfs/name

      dfs.datanode.data.dir

      file:/usr/local/hadoop/tmp/dfs/data

      Hadoop配置文件說明

      Hadoop 的運行方式是由配置文件決定的(運行 Hadoop 時會讀取配置文件),因此如果需要從偽分布式模式切換回非分布式模式,需要刪除 core-site.xml 中的配置項。

      此外,偽分布式雖然只需要配置 fs.defaultFS 和 dfs.replication 就可以運行(官方教程如此),不過若沒有配置 hadoop.tmp.dir 參數,則默認使用的臨時目錄為 /tmp/hadoo-hadoop,而這個目錄在重啟時有可能被系統清理掉,導致必須重新執行 format 才行。所以我們進行了設置,同時也指定 dfs.namenode.name.dir 和 dfs.datanode.data.dir,否則在接下來的步驟中可能會出錯。

      配置完成后,執行 NameNode 的格式化:

      cd /usr/local/hadoop

      ./bin/hdfs namenode -format

      成功的話,會看到 “successfully formatted” 和 “Exitting with status 0” 的提示,若為 “Exitting with status 1” 則是出錯。

      如果在這一步時提示?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/hadoop-env.sh”,在里面找到“export JAVA_HOME=${JAVA_HOME}”這行,然后,把它修改成JAVA安裝路徑的具體地址,比如,“export JAVA_HOME=/usr/lib/jvm/default-java”,然后,再次啟動Hadoop。

      接著開啟 NameNode 和 DataNode 守護進程。

      cd /usr/local/hadoop

      ./sbin/start-dfs.sh #start-dfs.sh是個完整的可執行文件,中間沒有空格

      啟動時可能會出現如下 WARN 提示:WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable WARN 提示可以忽略,并不會影響正常使用。

      啟動 Hadoop 時提示 Could not resolve hostname

      如果啟動 Hadoop 時遇到輸出非常多“ssh: Could not resolve hostname xxx”的異常情況,如下圖所示:

      這個并不是 ssh 的問題,可通過設置 Hadoop 環境變量來解決。首先按鍵盤的?ctrl + c?中斷啟動,然后在 ~/.bashrc 中,增加如下兩行內容(設置過程與 JAVA_HOME 變量一樣,其中 HADOOP_HOME 為 Hadoop 的安裝目錄):

      export HADOOP_HOME=/usr/local/hadoop

      export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native

      保存后,務必執行?source ~/.bashrc?使變量設置生效,然后再次執行?./sbin/start-dfs.sh?啟動 Hadoop。

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

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

      運行Hadoop偽分布式實例

      上面的單機模式,grep 例子讀取的是本地數據,偽分布式讀取的則是 HDFS 上的數據。要使用 HDFS,首先需要在 HDFS 中創建用戶目錄:

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

      接著將 ./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

      復制完成后,可以通過如下命令查看文件列表:

      ./bin/hdfs dfs -ls 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/*

      結果如下,注意到剛才我們已經更改了配置文件,所以運行結果不同。

      我們也可以將運行結果取回到本地:

      rm -r ./output # 先刪除本地的 output 文件夾(如果存在)

      ./bin/hdfs dfs -get output ./output # 將 HDFS 上的 output 文件夾拷貝到本機

      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 程序時,為了防止覆蓋結果,程序指定的輸出目錄(如 output)不能存在,否則會提示錯誤,因此運行前需要先刪除輸出目錄。在實際開發應用程序時,可考慮在程序中加上如下代碼,能在每次運行時自動刪除輸出目錄,避免繁瑣的命令行操作:

      Configuration conf = new Configuration();

      Job job = new Job(conf);

      /* 刪除輸出目錄 */

      Path outputPath = new Path(args[1]);

      outputPath.getFileSystem(conf).delete(outputPath, true);

      若要關閉 Hadoop,則運行

      ./sbin/stop-dfs.sh

      注意

      下次啟動 hadoop 時,無需進行 NameNode 的初始化,只需要運行?./sbin/start-dfs.sh?就可以!

      Hadoop 分布式

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:三伏天里小試andriod 開發#華為云·尋找黑馬程序員#
      下一篇:Java網絡編程之實現資源下載詳解【王道Java】
      相關文章
      亚洲av无码专区在线观看下载| 国产精品亚洲片夜色在线| 亚洲国产精品成人精品小说| 国产精品亚洲w码日韩中文| 亚洲AV无码国产精品永久一区| 亚洲噜噜噜噜噜影院在线播放| 久久亚洲精品AB无码播放| 日本亚洲视频在线| 亚洲国产精品无码久久一区二区 | 亚洲伊人久久大香线焦| 亚洲欧洲日韩不卡| 亚洲国产精品一区二区久久hs| 最新精品亚洲成a人在线观看| av在线亚洲欧洲日产一区二区| 国产99久久亚洲综合精品| 亚洲国产成AV人天堂无码| 亚洲黄片手机免费观看| 国产91成人精品亚洲精品| 一区二区三区亚洲视频| 亚洲国产成人爱av在线播放| 婷婷综合缴情亚洲狠狠尤物| 亚洲国产一区二区三区| 亚洲AV无码一区二三区 | 亚洲精品无码Av人在线观看国产| 亚洲熟女少妇一区二区| 亚洲日韩VA无码中文字幕| 亚洲国产精品自产在线播放| 亚洲一级片免费看| 国产亚洲一区区二区在线| 亚洲阿v天堂在线| 亚洲综合国产精品| 亚洲fuli在线观看| 香蕉大伊亚洲人在线观看| 中文有码亚洲制服av片| 国产成人人综合亚洲欧美丁香花| 亚洲国产精品日韩| 国产亚洲无线码一区二区| 亚洲综合日韩中文字幕v在线| 亚洲国产美女精品久久| 亚洲愉拍一区二区三区| 深夜国产福利99亚洲视频|