1 創(chuàng)建hadoop用戶
su # 上述提到的以 root 用戶登錄# useradd -m hadoop -s /bin/bash # 創(chuàng)建新用戶hadoop
如下圖所示,這條命令創(chuàng)建了可以登陸的 hadoop 用戶,并使用 /bin/bash 作為shell。
# passwd hadoop
修改用戶的密碼
# visudo
為用戶增加管理員權(quán)限
如下圖,找到 root ALL=(ALL) ALL
這行(應(yīng)該在第98行,可以先按一下鍵盤上的 ESC
鍵,然后輸入 :98
(按一下冒號(hào),接著輸入98,再按回車鍵),可以直接跳到第98行 ),然后在這行下面增加一行內(nèi)容:hadoop ALL=(ALL) ALL
(當(dāng)中的間隔為tab),如下圖所示:
添加好內(nèi)容后,先按一下鍵盤上的 ESC
鍵,然后輸入 :wq
(輸入冒號(hào)還有wq,這是vi/vim編輯器的保存方法),再按回車鍵保存退出就可以了。
最后注銷當(dāng)前用戶(點(diǎn)擊屏幕右上角的用戶名,選擇退出->注銷),在登陸界面使用剛創(chuàng)建的 hadoop 用戶進(jìn)行登陸。(如果已經(jīng)是 hadoop 用戶,且在終端中使用 su
登錄了 root 用戶,那么需要執(zhí)行 exit
退出 root 用戶狀態(tài))
CentOS 默認(rèn)已安裝了 SSH client、SSH server,打開終端執(zhí)行如下命令進(jìn)行檢驗(yàn)
# rpm -qa | grep ssh
如果返回的結(jié)果如下圖所示,包含了 SSH client 跟 SSH server,則不需要再安裝
若需要安裝,則可以通過 yum 進(jìn)行安裝(安裝過程中會(huì)讓你輸入 [y/N],輸入 y 即可):
$ sudo yum install openssh-clients$ sudo yum install openssh-server
接著執(zhí)行如下命令測(cè)試一下 SSH 是否可用:
$ ssh localhost
此時(shí)會(huì)有如下提示(SSH首次登陸提示),輸入 yes 。然后按提示輸入密碼 hadoop,這樣就登陸到本機(jī)了。
但這樣登陸是需要每次輸入密碼的,我們需要配置成SSH無密碼登陸比較方便。
首先輸入 exit
退出剛才的 ssh,就回到了我們?cè)鹊慕K端窗口,然后利用 ssh-keygen 生成密鑰,并將密鑰加入到授權(quán)中:
$ exit # 退出剛才的 ssh localhost$ cd ~/.ssh/ # 若沒有該目錄,請(qǐng)先執(zhí)行一次ssh localhost$ ssh-keygen -t rsa # 會(huì)有提示,都按回車就可以$ cat id_rsa.pub >> authorized_keys # 加入授權(quán)$ chmod 600 ./authorized_keys # 修改文件權(quán)限
此時(shí)再用 ssh localhost
命令,無需輸入密碼就可以直接登陸了,如下圖所示。
(1)卸載自帶OPENJDK
用 java -version 命令查看當(dāng)前jdk版本信息
#java -version
用rpm -qa | grep java 命令查詢操作系統(tǒng)自身安裝的java
#rpm -qa | grep java
執(zhí)行結(jié)果如下
python-javapackages-3.4.1-11.el7.noarch java-1.7.0-openjdk-1.7.0.91-2.6.2.3.el7.x86_64 java-1.8.0-openjdk-headless-1.8.0.65-3.b17.el7.x86_64 tzdata-java-2015g-1.el7.noarch javapackages-tools-3.4.1-11.el7.noarch java-1.7.0-openjdk-headless-1.7.0.91-2.6.2.3.el7.x86_64 java-1.8.0-openjdk-1.8.0.65-3.b17.el7.x86_64
用rpm命令卸載下面這些文件(操作系統(tǒng)自身帶的java相關(guān)文件)
#rpm -e --nodeps java-1.7.0-openjdk-1.7.0.91-2.6.2.3.el7.x86_64 #rpm -e --nodeps java-1.8.0-openjdk-headless-1.8.0.65-3.b17.el7.x86_64 #rpm -e --nodeps tzdata-java-2015g-1.el7.noarch #rpm -e --nodeps java-1.7.0-openjdk-headless-1.7.0.91-2.6.2.3.el7.x86_64 #rpm -e --nodeps java-1.8.0-openjdk-1.8.0.65-3.b17.el7.x86_64
如果卸載錯(cuò)了,可使用yum install 來安裝
(2)下載解壓jdk
$ sudo yum install java-1.7.0-openjdk java-1.7.0-openjdk-devel
Java 環(huán)境可選擇 Oracle 的 JDK,或是 OpenJDK,現(xiàn)在一般 Linux 系統(tǒng)默認(rèn)安裝的基本是 OpenJDK,如 CentOS 6.4 就默認(rèn)安裝了 OpenJDK 1.7。Hadoop 在 OpenJDK 1.7 下運(yùn)行是沒問題的。需要注意的是,CentOS 6.4 中默認(rèn)安裝的只是 Java JRE,而不是 JDK,為了開發(fā)方便,我們還是需要通過 yum 進(jìn)行安裝 JDK,安裝過程中會(huì)讓輸入 [y/N],輸入 y 即可:
通過上述命令安裝 OpenJDK,默認(rèn)安裝位置為 /usr/lib/jvm/java-1.7.0-openjdk(該路徑可以通過執(zhí)行 rpm -ql java-1.7.0-openjdk-devel | grep '/bin/javac'
命令確定,執(zhí)行后會(huì)輸出一個(gè)路徑,除去路徑末尾的 “/bin/javac”,剩下的就是正確的路徑了)。OpenJDK 安裝后就可以直接使用 java、javac 等命令了。
接著需要配置一下 JAVA_HOME 環(huán)境變量,為方便,我們?cè)?~/.bashrc 中進(jìn)行設(shè)置.
$ vim ~/.bashrc
在文件最后面添加如下單獨(dú)一行(指向 JDK 的安裝位置),并保存:
export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.171-2.6.13.0.el7_4.x86_64
$ source ~/.bashrc # 使變量設(shè)置生效
設(shè)置好后我們來檢驗(yàn)一下是否設(shè)置正確:
$ echo $JAVA_HOME # 檢驗(yàn)變量值$ java -version$ $JAVA_HOME/bin/java -version # 與直接執(zhí)行 java -version 一樣
如果設(shè)置正確的話,$JAVA_HOME/bin/java -version
會(huì)輸出 java 的版本信息,且和 java -version
的輸出結(jié)果一樣
下載hadoop-2.6.5.tar.gz 解壓到
$ sudo tar -zxf ~/下載/hadoop-2.6.5.tar.gz -C /usr/local # 解壓到/usr/local中
$ cd /usr/local/
$ sudo mv ./hadoop-2.6.5/ ./hadoop # 將文件夾名改為hadoop
$ sudo chown -R hadoop:hadoop ./hadoop # 修改文件權(quán)限
Hadoop 解壓后即可使用。輸入如下命令來檢查 Hadoop 是否可用,成功則會(huì)顯示 Hadoop 版本信息
$ cd /usr/local/hadoop$ ./bin/hadoop version
5 hadoop集群配置
完成上面的基礎(chǔ)為配置hadoop集群的基礎(chǔ)。準(zhǔn)備兩臺(tái)機(jī)子Master(主節(jié)點(diǎn)),slave1(子節(jié)點(diǎn))在兩個(gè)節(jié)點(diǎn)上配置hadoop用戶,java環(huán)境,ssh無密碼登錄,hadoop安裝。
如果使用的是虛擬機(jī)安裝的系統(tǒng),那么需要更改網(wǎng)絡(luò)連接方式為橋接(Bridge)模式,才能實(shí)現(xiàn)多個(gè)節(jié)點(diǎn)互連,例如在 VirturalBox 中的設(shè)置如下圖。此外,如果節(jié)點(diǎn)的系統(tǒng)是在虛擬機(jī)中直接復(fù)制的,要確保各個(gè)節(jié)點(diǎn)的 Mac 地址不同(可以點(diǎn)右邊的按鈕隨機(jī)生成 MAC 地址,否則 IP 會(huì)沖突)
為了便于區(qū)分,可以修改各個(gè)節(jié)點(diǎn)的主機(jī)名(在終端標(biāo)題、命令行中可以看到主機(jī)名,以便區(qū)分)。在 Ubuntu/CentOS 7 中,我們?cè)?Master 節(jié)點(diǎn)上執(zhí)行如下命令修改主機(jī)名(即改為 Master,注意是區(qū)分大小寫的)
$ sudo vim /etc/hostname
如果是用 CentOS 6.x 系統(tǒng),則是修改 /etc/sysconfig/network 文件,改為 HOSTNAME=Master,如下圖所示:
然后執(zhí)行如下命令修改自己所用節(jié)點(diǎn)的IP映射:
$ sudo vim /etc/hosts
我們?cè)?/etc/hosts 中將該映射關(guān)系填寫上去即可,如下圖所示(一般該文件中只有一個(gè) 127.0.0.1,其對(duì)應(yīng)名為 localhost,如果有多余的應(yīng)刪除,特別是不能有 “127.0.0.1 Master” 這樣的記錄):
修改完成后需要重啟一下,重啟后在終端中才會(huì)看到機(jī)器名的變化。接下來的教程中請(qǐng)注意區(qū)分 Master 節(jié)點(diǎn)與 Slave 節(jié)點(diǎn)的操作。
配置好后需要在各個(gè)節(jié)點(diǎn)上執(zhí)行如下命令,測(cè)試是否相互 ping 得通,如果 ping 不通,后面就無法順利配置成功
ping Master -c 3 # 只ping 3次,否則要按 Ctrl+c 中斷ping Slave1 -c 3
例如我在 Master 節(jié)點(diǎn)上 ping Slave1
,ping 通的話會(huì)顯示 time,顯示的結(jié)果如下圖所示
繼續(xù)下一步配置前,請(qǐng)先完成所有節(jié)點(diǎn)的網(wǎng)絡(luò)配置,修改過主機(jī)名的話需重啟才能生效。
這個(gè)操作是要讓 Master 節(jié)點(diǎn)可以無密碼 SSH 登陸到各個(gè) Slave 節(jié)點(diǎn)上。
首先生成 Master 節(jié)點(diǎn)的公匙,在 Master 節(jié)點(diǎn)的終端中執(zhí)行(因?yàn)楦倪^主機(jī)名,所以還需要?jiǎng)h掉原有的再重新生成一次)
$ cd ~/.ssh # 如果沒有該目錄,先執(zhí)行一次ssh localhost$ rm ./id_rsa* # 刪除之前生成的公匙(如果有)$ ssh-keygen -t rsa # 一直按回車就可以
讓 Master 節(jié)點(diǎn)需能無密碼 SSH 本機(jī),在 Master 節(jié)點(diǎn)上執(zhí)行:
cat ./id_rsa.pub >> ./authorized_keys
完成后可執(zhí)行 ssh Master
驗(yàn)證一下(可能需要輸入 yes,成功后執(zhí)行 exit
返回原來的終端)。接著在 Master 節(jié)點(diǎn)將上公匙傳輸?shù)?Slave1 節(jié)點(diǎn):
$ scp ~/.ssh/id_rsa.pub hadoop@Slave1:/home/hadoop/
scp 是 secure copy 的簡(jiǎn)寫,用于在 Linux 下進(jìn)行遠(yuǎn)程拷貝文件,類似于 cp 命令,不過 cp 只能在本機(jī)中拷貝。執(zhí)行 scp 時(shí)會(huì)要求輸入 Slave1 上 hadoop 用戶的密碼(hadoop),輸入完成后會(huì)提示傳輸完畢,如下圖所示:
接著在 Slave1 節(jié)點(diǎn)上,將 ssh 公匙加入授權(quán):
$ mkdir ~/.ssh # 如果不存在該文件夾需先創(chuàng)建,若已存在則忽略$ cat ~/id_rsa.pub >> ~/.ssh/authorized_keys$ rm ~/id_rsa.pub # 用完就可以刪掉了
如果有其他 Slave 節(jié)點(diǎn),也要執(zhí)行將 Master 公匙傳輸?shù)?Slave 節(jié)點(diǎn)、在 Slave 節(jié)點(diǎn)上加入授權(quán)這兩步。
這樣,在 Master 節(jié)點(diǎn)上就可以無密碼 SSH 到各個(gè) Slave 節(jié)點(diǎn)了,可在 Master 節(jié)點(diǎn)上執(zhí)行如下命令進(jìn)行檢驗(yàn),如下圖所示:
$ ssh Slave1
集群/分布式模式需要修改 /usr/local/hadoop/etc/hadoop 中的5個(gè)配置文件,更多設(shè)置項(xiàng)可點(diǎn)擊查看官方說明,這里僅設(shè)置了正常啟動(dòng)所必須的設(shè)置項(xiàng): slaves、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml 。
1, 文件 slaves,將作為 DataNode 的主機(jī)名寫入該文件,每行一個(gè),默認(rèn)為 localhost,所以在偽分布式配置時(shí),節(jié)點(diǎn)即作為 NameNode 也作為 DataNode。分布式配置可以保留 localhost,也可以刪掉,讓 Master 節(jié)點(diǎn)僅作為 NameNode 使用。
本教程讓 Master 節(jié)點(diǎn)僅作為 NameNode 使用,因此將文件中原來的 localhost 刪除,只添加一行內(nèi)容:Slave1。
2, 文件 core-site.xml 改為下面的配置:
<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://Master:9000</value></property> <property> <name>hadoop.tmp.dir</name> <value>file:/usr/local/hadoop/tmp</value> <description>Abase for other temporary directories.</description> </property></configuration>
3, 文件 hdfs-site.xml,dfs.replication 一般設(shè)為 3,但我們只有一個(gè) Slave 節(jié)點(diǎn),所以 dfs.replication 的值還是設(shè)為 1
<configuration> <property> <name>dfs.namenode.secondary.http-address</name> <value>Master:50090</value> </property> <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>
4, 文件 mapred-site.xml (可能需要先重命名,默認(rèn)文件名為 mapred-site.xml.template),然后配置修改如下:
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapreduce.jobhistory.address</name> <value>Master:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>Master:19888</value> </property></configuration>
5, 文件 yarn-site.xml:
<configuration> <property> <name>yarn.resourcemanager.hostname</name> <value>Master</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property></configuration>
配置好后,將 Master 上的 /usr/local/Hadoop 文件夾復(fù)制到各個(gè)節(jié)點(diǎn)上。因?yàn)橹坝信苓^偽分布式模式,建議在切換到集群模式前先刪除之前的臨時(shí)文件。在 Master 節(jié)點(diǎn)上執(zhí)行:
$ cd /usr/local$ sudo rm -r ./hadoop/tmp # 刪除 Hadoop 臨時(shí)文件$ sudo rm -r ./hadoop/logs/* # 刪除日志文件$ tar -zcf ~/hadoop.master.tar.gz ./hadoop # 先壓縮再復(fù)制$ cd ~$ scp ./hadoop.master.tar.gz Slave1:/home/hadoop
在 Slave1 節(jié)點(diǎn)上執(zhí)行:
$ sudo rm -r /usr/local/hadoop # 刪掉舊的(如果存在)$ sudo tar -zxf ~/hadoop.master.tar.gz -C /usr/local$ sudo chown -R hadop /usr/local/hadoop
同樣,如果有其他 Slave 節(jié)點(diǎn),也要執(zhí)行將 hadoop.master.tar.gz 傳輸?shù)?Slave 節(jié)點(diǎn)、在 Slave 節(jié)點(diǎn)解壓文件的操作。
首次啟動(dòng)需要先在 Master 節(jié)點(diǎn)執(zhí)行 NameNode 的格式化:
$ hdfs namenode -format # 首次運(yùn)行需要執(zhí)行初始化,之后不需要
聯(lián)系客服