CentOS7虛擬機配置、Hadoop搭建、wordCount DEMO運行


安裝虛擬機

  最開始先安裝虛擬機,我是12.5.7版本,如果要跟着我做的話,版本最好和我一致,不然后面可能會出一些莫名其妙的錯誤,下載鏈接如下(注冊碼也在里面了):

  鏈接:https://pan.baidu.com/s/1qoqeKcgMsjFKPFQFBFP6lg 
  提取碼:2aog 

  安裝虛擬機直接下一步、下一步就好了,沒什么可說的,安裝好后,虛擬機詢問是否更新,點不更新,更新了就改版本了。

配置虛擬機操作系統

  接下來開始配置虛擬機系統。首先下載CentOS7的鏡像,下載鏈接如下:

  鏈接:https://pan.baidu.com/s/17Guf4e0LKH2KfOgBlgBnNA 
  提取碼:skvu

  然后打開虛擬機:文件——新建虛擬機,打開新建虛擬機向導(然后配置如下):

  虛擬機向導完畢后,在左邊出現一個虛擬機選項:右鍵設置——CD/DVD(IDE)——使用ISO映像文件——瀏覽,選擇前面下載好的CentOS7鏡像——確定:

  點擊開啟此虛擬機:

  進入操作系統安裝界面,選擇Install CentOS 7,回車:

  待會還有一個回車要按,也可以等待一會它自動確認,然后會啟動安裝程序:

  然后再點+號,添加另一個分區:

  虛擬機系統安裝完畢!重啟后打開系統:

  輸入root用戶名,回車,密碼(就是你剛剛創建的密碼),回車:

  用root用戶進入操作系統界面(root用戶是權限最高的用戶,所以執行一些指令都不需要sudo):

配置虛擬機靜態NAT網絡

  接下來配置虛擬機的網絡。首先右鍵你的CentOS虛擬機——設置——網絡適配器,右邊網絡連接選項卡中選擇:NAT模式或自定義中的VMnet8,將操作系統網絡設置為網絡地址轉換(NAT)模式,這兩種選擇的效果是一樣的,都是通過VMnet8與物理主機互連,然后點擊確定(我這里選擇NAT模式選項)。

  設置好后,在虛擬機界面:編輯——虛擬網絡編輯器,點擊右下角的更改設置,修改NAT模式的子網等配置。操作如下兩張圖圖:

  然后在主機windows界面:網絡——屬性——更改適配器設置,看到里面有個VMware Network Adapter VMnet8,是虛擬器自動生成的,右鍵它——屬性——網絡選項卡——點中Internet協議版本4(TCP/IPv4)——屬性,修改如下圖:

  外部配置好了,現在開始配置虛擬機內CentOS的靜態網絡。打開虛擬機進入CentOS的命令界面,登錄Root用戶,輸入ip addr查看網卡名稱:

  接着輸入vi /etc/sysconfig/network-scripts/ifcfg-ens33(ens33是網卡名稱,如果你的不是ens33,就改成你的網卡名稱)(vi是使用一個編輯器的命令,vi 后面加一些文本類文件可以打開它進行編輯),進入網絡配置文件修改配置,按鍵盤Insert鍵進入編輯模式 ,修改如下圖:

  修改好后按ESC,從編輯模式進入命令模式,輸入:wq(w代表write,q代表quit,如輸入:q不保存直接退出)再按回車回到命令界面,不要忘記冒號“:”,如果冒號沒打,按w會進入recording模式記錄你的鍵盤操作,按q退出這個模式,再重新打:wq就行。然后在命令界面輸入service network restart,重新啟動網絡服務:

  再接着輸入網址,如ping www.baidu.com,就能聯網了:

  按鍵盤Ctrl+C退出聯網,回到命令行:

  還可以再試一試ping你剛剛填的VMnet8的IP地址,如我這里ping 192.168.157.2

  在Windows主機打開CMD也可以ping 虛擬機的IP試試,我這里ping 192.168.157.10

  可以看到三個ping都成功了,說明1、虛擬機能連接外網。2、虛擬機能和物理主機互連。3、物理主機能和虛擬機互連。這樣,一個CentOS的靜態NAT網絡就算配置完成了。

  ifconfig命令和ip addr命令差不多,也可以查看ip等信息,然而操作系統沒有這個命令,因為新安裝的Minimal系統中並沒有裝這個命令,可以用yum install net-tools.x86_64命令從網上下載安裝。

  講一個坑,害我找了半天的原因。虛擬機系統有時候會出錯,關閉不了,甚至直接用任務管理器關閉都不行,再次打開虛擬機那個系統還是被占用不能打開。如果系統里沒有保存什么重要的文件,或者有備份的話,就直接把那個系統移除了並在物理主機把它的文件刪了一勞永逸。而原來我在網上找了一個方法,說在外部windows的運行中輸入msconfig,打開啟動項,直接把VMware的服務全都停止了,然后系統會變好,其實並沒有用。這些服務中包含了VMware NAT service,一旦停了,虛擬機就不能通過NAT聯外部網絡了(不能ping www.baidu.com連接外部網絡,但是還能ping局域網IP如192.168.157.2),導致我后來浪費好幾個小時在這上面。

CentOS主機名修改

  接下來進行CentOS的主機名修改。這里面有三個“主機名”容易弄混淆:hosts文件保存的主機名、hostname文件保存的主機名、network文件保存的主機名。這三者解釋如下:

  1、hosts保存的是IP地址和域名的對應,比如局域網里有個主機域名叫node1,它的ip是192.168.3.3,那你保存這個對應進去以后,ping node1就等於ping 192.168.3.3。

  2、network里面保存的就主機域名,現在暫時看不出啥用,因為hosts里面的域名不都是自己寫的嗎,和別的主機取域名叫啥好像沒啥關系,但是為了便於辨認,就要修改。

  3、hostname保存的是你這個操作系統的名稱,自己看的名稱而已,與網絡沒什么關系,為了辨認最好修改成和network里面的域名一樣。

  這三個文件分別這樣修改(下面的vim命令是vi的升級版,沒有這個命令就yum -y install vim安裝一下):

  network文件:

  hosts文件:

  hostname文件:

  改好名以后關閉防火牆並取消開機啟動,命令如下:

systemctl stop firewalld
systemctl disable firewalld

  復制命令可能會出錯,最好自己手打。然后reboot重啟機器,進入root用戶,再輸入hostname,就可以看到主機名是master:

CentOS安裝JDK

  系統配置完畢,現在給系統安裝JDK(Java SE Development Kit)。因為是最簡的系統,所以不能用圖形界面,我們可以使用物理windows主機下載好jdk傳給虛擬機來安裝。傳輸文件需要用到XShell和XFtp這兩個軟件,以下是下載鏈接:

  鏈接:https://pan.baidu.com/s/1dsLbd5pDZcSXqy1K5M_0qQ 
  提取碼:y80z

  XFtp是直接用的,無需安裝,但是在用之前要先雙擊一下里面的綠化(重要,別忘了),把XFtp破解一下,它會把注冊表信息寫進去,這樣在XShell里面要用XFtp的時候才會自動打開XFtp。XShell需要安裝,直接下一步下一步就好了。安裝好后打開Xshell:文件——新建,填入虛擬機系統的IP點擊確定就可以實現和虛擬機系統的連接(當然虛擬機系統要打開進入root用戶)。

  雙擊新建會話:

  root用戶,然后輸入操作系統的密碼,確定,連接完畢!界面和虛擬機里面的命令行一模一樣,但是可以復制和粘貼代碼哦~

  連接好了以后,就可以點擊上方的綠色按鈕,Xshell會打開電腦中安裝好的XFtp,讓XFtp和虛擬機的操作系統連接,並且可以傳輸文件。(Xshell和XFtp是同一家公司出的,所以可以相互調用,但是我很奇怪都是連接操作系統,為什么不把功能集中到一個軟件)

  然后使用mkdir命令在/usr/local/里面創建一個java文件夾,其實也可以直接用XFtp進行創建,特別方便,就和圖形界面一樣:

  把下載好的JDK壓縮包拖進Java文件夾。我的使用的JDK包:

  鏈接:https://pan.baidu.com/s/1jxsH25gdGTw1AK_yD24C8w 
  提取碼:wifb

  然后在命令行中(虛擬機命令行或Xshell里都行)cd /usr/local/java進入java文件夾,tar -xvf jdk-8u231-linux-x64.tar.gz解壓JDK,-xvf后面的名稱對應的是你下載的JDK壓縮包名稱,如果使用的是我的JDK包,那就一樣,別復制錯了(后面版本問題我都不再提醒了,包括hadoop、mysql、mysql-connector-java等等,其中mysql和mysql-connector-java版本是有對應的,這是大坑,如果你的兩個版本不對應的話,后面出錯原因會很難找到,所以這些版本什么都和我一致最好,鏈接都提供了呢,這么良心的博主哪里找)。解壓好后,可以用命令

rm -rf  jdk-8u221-linux-x64.tar.gz

  刪除原來的壓縮包(強迫症,你不刪除也行),當然在XFtp中也能右鍵刪除。然后配置環境,vim /etc/profile編輯文件,在最后一行加上:

  加上后按ESC,輸入:wq再回車,退出編輯,在命令行里輸入source /etc/profile,編譯剛剛改過的文件,就完成JDK的配置了。然后可以用 java -version 和javac -version 命令測試JDK是否成功安裝:

配置安裝hadoop

  JDK裝好了,現在正式開始裝hadoop。先下載hadoop鏡像:

  鏈接:https://pan.baidu.com/s/17h4kxK9RoqjNE0mIHpsReQ 
  提取碼:nujr

  在local下面創建hadoop文件夾,把鏡像拖進去,tar -zxvf hadoop,tab鍵,自動出現剩余的壓縮包名稱,解壓tar包,然后刪除壓縮包。

  vim /etc/profile修改環境變量:

HADOOP_HOME=/usr/local/hadoop/hadoop-2.8.5
PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin

  :wq保存並退出編輯,source /etc/profile,編譯剛剛的配置,然后在命令行輸入hado,按Tab鍵,如果自動補全為hadoop,說明配置好了。然后在hadoop下創建四個文件夾,分別是tmp、hdfs、name和data,其中name在hdfs下,命令如下:

mkdir /usr/local/hadoop/tmp
mkdir -p /usr/local/hadoop/hdfs/name
mkdir /usr/local/hadoop/hdfs/data

  接下來進入hadoop文件 /etc/hadoop 目錄:

cd /usr/local/hadoop/hadoop-2.8.5/etc/hadoop

  里面存放的是hadoop的配置文件,要修改一些配置,分別是hadoop-env.sh、yarn-env.sh、core-site.xml 、hdfs-site.xml,修改如下(我直接通過XFtp修改了,你也可以用命令行修改):

export JAVA_HOME=/usr/local/java/jdk1.8.0_231/

<!-- 插入core-site.xml的代碼 -->
    <property>
        <name> fs.default.name </name>
        <value>hdfs://master:9000</value>
        <description>指定HDFS的默認名稱</description>
    </property>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://master:9000</value>
        <description>HDFS的URI</description>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/usr/local/hadoop/tmp</value>
        <description>節點上本地的hadoop臨時文件夾</description>
    </property>

<!-- 插入hdfs-site.xml的代碼 -->
    <property>
        <name> fs.default.name </name>
        <value>hdfs://master:9000</value>
        <description>指定HDFS的默認名稱</description>
    </property>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://master:9000</value>
        <description>HDFS的URI</description>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/usr/local/hadoop/tmp</value>
        <description>節點上本地的hadoop臨時文件夾</description>
    </property>

  改好文件后,還是在/usr/local/hadoop/hadoop-2.8.5/etc/hadoop目錄,輸入cp mapred-site.xml.template mapred-site.xml,將mapred-site.xml.template文件復制到當前目錄,並重命名為mapred-site.xml。然后繼續修改mapred-site.xml文件:

<!-- 插入mapred-site.xml的代碼 -->
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
        <description>指定mapreduce使用yarn框架</description>
    </property>

  接着修改yarn-site.xml 文件:

<!-- 插入yarn-site.xml的代碼 -->
    <property>    
        <name>yarn.resourcemanager.hostname</name>
        <value>master</value>
        <description>指定resourcemanager所在的hostname</description>
    </property>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
        <description>
            NodeManager上運行的附屬服務。
            需配置成mapreduce_shuffle,才可運行MapReduce程序
        </description>
    </property>

  最后修改slaves文件:

  現在一台主機弄好了,下面添加其他的節點虛擬機系統。在虛擬機軟件中,右鍵虛擬主機,管理——克隆,打開克隆虛擬機向導:

  克隆好node1后,右鍵node1虛擬機,設置——網絡適配器

  點擊確定,回到虛擬機主界面,打開node1,因為是克隆master,所以用戶名密碼都是一樣的,命令行的記錄都還在。現在要修改三個文件:ifcfg-ens33、network、hostname,命令忘了就按鍵盤的上往前翻,改完ESC,:wq保存並退出:

  改完輸入reboot,重啟一下,可以看到機器名變node1了,能ping百度還有外部主機(192.168.157.2)了,你如果把master打開也能ping的通:

  node1克隆、配置好后,同樣的克隆、配置node2:物理地址重新生成一下,把ifcfg-ens33、hostname、network對應的地方改一下,重啟一下,OK!

  最后配置ssh,打開master、node1、node2,登錄root用戶。操作如下:

  1、在master機器上輸入 ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa 創建一個無密碼的公鑰。

  2、在master機器上輸入 cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys 將公鑰id_dsa.pub添加進keys,這樣就可以實現無密登陸ssh。

  3、在master機器上輸入 ssh master 測試免密碼登陸。

  4、出現詢問,輸入yes,回車繼續。

  截圖如下:

  5、在node1主機上執行 mkdir ~/.ssh,在node2主機上執行 mkdir ~/.ssh()。

  6、在master機器上輸入 scp ~/.ssh/authorized_keys root@node1:~/.ssh/authorized_keys 將主節點的公鑰信息導入node1節點,導入時要輸入一下node1機器的登陸密碼。

  7、在master機器上輸入 scp ~/.ssh/authorized_keys root@node2:~/.ssh/authorized_keys 將主節點的公鑰信息導入node2節點,導入時要輸入一下node2機器的登陸密碼。

  67兩步截圖如下:

  8、在三台機器上分別執行 chmod 600 ~/.ssh/authorized_keys 賦予密鑰文件權限。

  9、在master節點上分別輸入 ssh node1 和 ssh node2 測試是否配置ssh成功:

  10、在master機器上,任意目錄輸入 hdfs namenode -format 格式化namenode,第一次使用需格式化一次,之后就不用再格式化。(但如果改了一些配置文件,可能還需要再次格式化):

  到這里,hadoop終於完全搭建好了!在master機器上,進入hadoop的sbin目錄,輸入 ./start-all.sh ,就可以啟動hadoop:

  輸入 jps 查看當前java的進程,該命令是JDK1.5開始有的,作用是列出當前java進程的PID和Java主類名,nameNode節點除了JPS,還有3個進程,啟動成功!如圖:

  node1、node2輸入jps查看進程如下:

  在瀏覽器訪問192.168.157.10的8088端口和50070端口可以查看hadoop的運行狀況(如果打不開,有可能是master虛擬機的防火牆沒有關閉,檢查一下)。

  8088端口:

  50070端口:

WordCount運行

  配置好hadoop后,現在可以運行數據庫世界的"Hello world!"程序了,WordCount就是數據庫的"Hello world!",WordCount是用來統計一個文本每個詞匯的出現數量的程序。hadoop文件里面自帶有WordCount作為hadoop的demo,我們直接運行它。首先進入hadoop文件夾:cd /usr/local/hadoop/hadoop-2.8.5,里面有個LISENCE.txt,寫有有很多英語單詞,這里就統計它的詞匯。

  先用命令cat LISENCE.txt查看一下:

  用hadoop fs -mkdir /input命令在hadoop庫中創建input目錄,然后hadoop fs -ls /查看一下:

  用hadoop fs -put LICENSE.txt /input把LISENCE.txt放到input目錄下,hadoop fs -ls /input查看:

  接下來用命令(不同版本可能程序位置不同,注意修改命令中的位置)

hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.5.jar wordcount /input /output

  對input中的txt進行統計:

  使用命令hadoop fs -ls /看出,HDFS系統下多了個/output 和/tmp目錄。打開/output目錄可以看到下面有兩個文件(_SUCCESS和part-r-00000),說明已經運行成功了:

  命令hadoop fs -cat /output/part-r-00000,打開part-r-00000查看結果:

參考鏈接

  CentOS7搭建:https://www.osyunwei.com/archives/7829.html

  WordCount運行:https://blog.csdn.net/u010285974/article/details/81636719


免責聲明!

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



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