安裝虛擬機
最開始先安裝虛擬機,我是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