Contents
Linux上面安裝hadoop3.2.0教程
一、安裝java并配置環(huán)境變量
linux 終端顯示光標可用 echo -e "\033[?25h"
,隱藏光標可用 echo -e "\033[?25l"
1.安裝 Java
官網(wǎng)下載最新的 [jdk]:https://www.oracle.com/technetwork/java/javase/downloads/jdk12-downloads-5295953.html
勾選accept. linux環(huán)境選擇64位,下載debain版本.deb后綴或者.tar.gz后綴。我用的是.deb
- 下載好后進入文件目錄我的在Downloads/
hadoop@機械革命:/home/jackmin/Downloads$ ls
jdk-12.0.2_linux-x64_bin.deb
安裝jdk輸入命令 **
dpkg -i jdk-12.0.2_linux-x64_bin.deb
**-
安裝后不知道目錄怎么查看?
先看dpkg 的列表里面有沒有安裝
dpkg -l jdk*
hadoop@機械革命:/home/jackmin/Documents$ dpkg -l jdk*
期望狀態(tài)=未知(u)/安裝(i)/刪除(r)/清除(p)/保持(h)
| 狀態(tài)=未安裝(n)/已安裝(i)/僅存配置(c)/僅解壓縮(U)/配置失敗(F)/不完全安裝(H)/觸發(fā)器等待(W)/觸發(fā)器未決(T)
|/ 錯誤?=(無)/須重裝(R) (狀態(tài),錯誤:大寫=故障)
||/ 名稱 版本 體系結(jié)構(gòu) 描述
+++-==============-============-============-===============================================
ii jdk-12.0.2 12.0.2-1 amd64 Java Platform Standard Edition Development Kit
? 查看所在位置 dpkg -L jdk-12.0.2
hadoop@機械革命:/home/jackmin/Documents$ dpkg -L jdk-12.0.2
/.
/usr
/usr/lib
/usr/lib/jvm
/usr/lib/jvm/jdk-12.0.2
/usr/lib/jvm/jdk-12.0.2/release
....
? 可以知道在/usr/lib/jvm里面.完全可以一開始就創(chuàng)建一個可以讀寫(chmod)的目錄,然后安裝時指定到這個目錄 中
- 可以進入目錄查看/usr/lib/jvm/jdk-12.0.2/
hadoop@機械革命:/usr/lib/jvm/jdk-12.0.2$ ls
bin conf include jmods legal lib man release
2. 配置linux下 **java環(huán)境變量 **
打開 /etc/profile
添加JAVA_HOMEM 和 JAVA_PATH 和 CLASSPATH
hadoop@機械革命:/usr/lib/jvm/jdk-12.0.2/bin$ vim /etc/profile
(如果提示沒有讀寫權(quán)限,用chmod,見前面內(nèi)容)
shift + g
迅速定位到最后一行行首,新添加一行輸入:
# 等號'='兩邊不能有空格
export JAVA_HOME=/usr/lib/jvm/jdk-12.0.2 # 根據(jù)具體路徑添加
export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH # 添加/bin /jre/bin
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_home/jre/lib # 注意前面.: 添加/lib /jre/lib
保存退出 :wq
為了使環(huán)境變量生效,需要進行 source /etc/profile
$ source /etc/profile
$ java -version
java version "12.0.2" 2019-07-16
Java(TM) SE Runtime Environment (build 12.0.2+10)
Java HotSpot(TM) 64-Bit Server VM (build 12.0.2+10, mixed mode, sharing)
Bingo!!!
二、安裝配置hadoop
1. 安裝 hadoop
- 選擇binary,然后復(fù)制新頁面的推薦地址 http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-3.2.0/hadoop-3.2.0.tar.gz
- 復(fù)制后命令行安裝: wget http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-3.2.0/hadoop-3.2.0.tar.gz
結(jié)束后可在當前路徑看到生成了一個文件夾
hadoop@機械革命:~$ ls
hadoop-3.2.0 hadoop-3.2.0.tar.gz
2. hadoop 環(huán)境變量和配置
$ vim /etc/profile # 添加hadoop_home,以及/bin;/sbin路徑
export HADOOP_HOME=/home/hadoop/hadoop-3.2.0
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$JAVA_HOME/jre/bin:$PATH
$ source /etc/profile # 使環(huán)境變量生效
- 查看是否安裝完成
hadoop@機械革命:~$ hadoop version
Hadoop 3.2.0
Source code repository https://github.com/apache/hadoop.git -r e97acb3bd8f3befd27418996fa5d4b50bf2e17bf
Compiled by sunilg on 2019-01-08T06:08Z
Compiled with protoc 2.5.0
ok
-
設(shè)置修改hadoop配置(偽分布模式)
在原來/home/hadoop/hadoop-3.2.0/文件下 新建一個tmp文件夾,在tmp下新建兩個文件夾命名為name,data注意文件夾的權(quán)限
- 首先修改 /etc/hadoop/core-site.xml
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/home/hadoop/hadoop-3.2.0/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
- 修改 .../hadoop-3.2.0/etc/hadoop/hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/home/hadoop/hadoop-3.2.0/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/home/hadoop/hadoop-3.2.0/tmp/dfs/data</value>
</property>
</configuration>
- 然后修改
hadoop-env.sh
將里面的java_home改為之前的java_home地址
JAVA_HOME=/usr/lib/jvm/jdk-12.0.2
- 最后修改mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
- 這時候先不啟動,還沒有配置ssh
三、SSH免密登錄
1.SSH 原理簡述
簡單來說,SSH是一種網(wǎng)絡(luò)協(xié)議,用于網(wǎng)絡(luò)主機之間的加密協(xié)議.
-
使用ssh登錄的簡單流程:
- 用戶使用
ssh user@host
命令對遠程主機發(fā)起登陸; - 遠程主機將自己的公鑰返回給請求主機;
- 請求主機使用公鑰對用戶輸入的密碼(遠程主機的密碼)進行加密;
- 請求主機將加密后的密碼發(fā)送給遠程主機;
- 遠程主機使用私鑰對密碼進行解密;
- 最后,遠程主機判斷解密后的密碼是否與用戶密碼一致,一致就同意登陸,否則反之。
- 用戶使用
PS:
- SSH不像https協(xié)議那樣,SSH協(xié)議的公鑰是沒有證書中心(CA)公證(可信第三方)的,容易遭受中間人攻擊.
- 對于給出的遠程主機公鑰指紋fingerprint是否可信,由用戶自己決定,
如果確信,則公鑰被接受保存在
~ /.ssh/known_hosts
中,下次登錄該主機的時候就直接讀取known_hosts,忽略警告,當遠程主機公鑰修改了時,連接時會提醒需要刪除本地的known_hosts(見后面4.8)
-
使用ssh免密登錄的原理是:
根據(jù)前面的原理可以知道想登錄遠程需要生成 公私密鑰對:用
ssh-keygen -t rsa
生成密鑰對,再用ssh-copy-id -i ~/.ssh/id_rsa.pub user@host
將公鑰發(fā)給遠程主機的~/.ssh/authorized_keys
里面.而登錄本機則直接用$ ssh-keygen -t rsa # 會有提示,都按回車就可以 $ cat ./id_rsa.pub >> ./authorized_keys # 加入授權(quán)
-
免密登錄簡單流程:
- 用戶使用
ssh user@host
命令對遠程主機發(fā)起登陸; - 遠程主機對用戶返回一個隨機串;
- 用戶所在主機使用私鑰對這個隨機串進行加密,并將加密的隨機串返回至遠程主機;
- 遠程主機使用分發(fā)過來的公鑰對加密隨機串進行解密;
- 如果解密成功,就證明用戶的登陸信息是正確的,則允許登陸;否則反之。
- 用戶使用
2. SSH 免密登錄
如果你想登錄其他主機,就需要將本機生成的公鑰id_rsa.pub
(私鑰為id_rsa)復(fù)制給其他主機的authorized_keys.
默認hadoop進行本機免密登錄也是需要提前將id_rsa_pub復(fù)制給本機authorized_keys
- 嘗試登錄localhost
hadoop@機械革命:/etc/ssh$ ssh localhost
Command 'ssh' not found, but can be installed with:
sudo apt install openssh-client
表明本機沒有安裝ssh,如果提示 ssh: connect to host localhost port 22: Connection refused,可能是沒有開啟服務(wù)等問題. 切換root用戶,如下操作:
- 卸載SSH
sudo apt-get autoremove openssh-server
sudo apt-get autoremove openssh-client
sudo apt-get purge openssh-server # 徹底卸載ssh服務(wù)
- 重新安裝SSH
sudo apt-get install openssh-server
sudo apt-get install openssh-client
-
ssh的啟動
查看
服務(wù)
是否正確啟動ps -ef |grep ssh
root@機械革命:/etc/ssh# ps -ef |grep ssh
jackmin 9048 8957 0 19:20 ? 00:00:00 /usr/bin/ssh-agent /usr/bin/im-launch /usr/bin/zsh /home/jackmin/.xsession
root 16213 15077 0 23:14 tty3 00:00:00 grep --color=auto ssh
沒有出現(xiàn)上面的ssh-agent 和 sshd等內(nèi)容時,需要完全卸載重新執(zhí)行.
輸入下面命令,開啟服務(wù),之后再重新查看服務(wù)
sudo service ssh start
* Starting OpenBSD Secure Shell server sshd [ok]
root@機械革命:/etc/ssh# ps -ef |grep ssh
jackmin 9048 8957 0 19:20 ? 00:00:00 /usr/bin/ssh-agent /usr/bin/im-launch /usr/bin/zsh /home/jackmin/.xsession
root 16293 1 0 23:31 ? 00:00:00 /usr/sbin/sshd
root 16305 15077 0 23:35 tty3 00:00:00 grep --color=auto ssh
- 切換到ssh目錄 cd /etc/ssh/
# cd /etc/ssh/
root@機械革命:/etc/ssh#
-
復(fù)制導(dǎo)入公鑰,ssh連接需要公鑰認證
root@機械革命:/home# ssh-keygen -t rsa -P "" Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): /root/.ssh/id_rsa #需要輸入 Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: SHA256:iOego.... $ cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
-
切換到hadoop用戶(我安裝在新建的用戶hadoop上面,如果不切換,可直接在接著上面步驟)執(zhí)行:
進入/etc/ssh/ 修改權(quán)限并編輯sshd_config 文件,添加兩行:
PubkeyAuthentication yes
以及PermitRootLogin yes
hadoop@機械革命:/home/jackmin$ cd /etc/ssh/
# 更改/etc/ssh/sshd_config權(quán)限
hadoop@機械革命:/etc/ssh$ sudo chmod ugo+rwx sshd_config
[sudo] hadoop 的密碼:
# 編輯sshd_config添加:PubkeyAuthentication yes以及PermitRootLogin yes
hadoop@機械革命:/etc/ssh$ vim sshd_config
# 重新啟動ssh服務(wù)
hadoop@機械革命:/etc/ssh$ sudo /etc/init.d/ssh restart
* Restarting OpenBSD Secure Shell server sshd
-
嘗試ssh localhost
woo!!!出現(xiàn)了這個
hadoop@機械革命:/etc/ssh$ ssh localhost @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! Someone could be eavesdropping on you right now (man-in-the-middle attack)! It is also possible that a host key has just been changed. The fingerprint for the ECDSA key sent by the remote host is SHA256:L/i20njmxWwRGPeuHi/6OeoR6yxgyG00Az8ga9/MzNI. Please contact your system administrator. Add correct host key in /home/hadoop/.ssh/known_hosts to get rid of this message. Offending ECDSA key in /home/hadoop/.ssh/known_hosts:1 remove with: ssh-keygen -f "/home/hadoop/.ssh/known_hosts" -R "localhost" ECDSA host key for localhost has changed and you have requested strict checking. Host key verification failed.
應(yīng)該是我之前折騰導(dǎo)入秘鑰導(dǎo)致known_hosts被更改了,根據(jù)提示先刪除, 執(zhí)行
ssh-keygen -f “/hadoop/hadoop/.ssh/known_hosts" -R “l(fā)ocalhost"
hadoop@機械革命:/etc/ssh$ sudo ssh-keygen -f "/home/hadoop/.ssh/known_hosts" -R "localhost" # Host localhost found: line 1 /home/hadoop/.ssh/known_hosts updated. Original contents retained as /home/hadoop/.ssh/known_hosts.old
9.再次運行ssh localhost 提示需要輸入密碼hadoop@localhost's password: 按
ctrl+c
然后exit
退出剛才的ssh服務(wù),進入/.sshcd ~/.ssh
然后 ssh-keygen -t rsa 然后按幾下回車.$ ssh-keygen -t rsa # 會有提示,都按回車就可以 $ cat ./id_rsa.pub >> ./authorized_keys # 加入授權(quán)
運行ssh localhost 輸入yes
10. 這里還要修改相應(yīng)的ssh文件權(quán)限,有的沒有讀寫權(quán)利Stopping secondary namenodes [機械革命]
機械革命: Failed to add the host to the list of known hosts (/home/hadoop/.ssh/known_hosts)
修改/home/hadoop/.ssh權(quán)限和 /home/hadoop/.ssh/known_hosts
hadoop@機械革命:~/hadoop-3.2.0/sbin$ sudo chmod 644 ~/.ssh/known_hosts
hadoop@機械革命:~/hadoop-3.2.0/sbin$ sudo chmod 755 ~/.ssh
執(zhí)行ssh localhost成功
四、啟動hadoop
1. namenode格式化
$ hdfs namenode -format
因為我們配置 hadoop.tmp.dir
參數(shù),并不是默認使用的 /tmp/hadoo-hadoop
執(zhí)行一次格式化即可以后不用了,如果沒有配置,則每次系統(tǒng)重啟后都需要 -format
2. 啟動NameNode,DataNode daemon進程
$ start-dfs.sh
一般不建議直接 start-all.sh
應(yīng)該先啟動hdfs再依次啟動其他的構(gòu)件.
3. 查看是否成功啟動hadoop
$ jps
7061 Jps
3174 NameNode
3593 SecondaryNameNode
再從瀏覽器輸入:http://localhost:9870 回車即可看到一片綠~
轉(zhuǎn) 載 注 明 出 處 謝 謝!!! ^ _ ^