Hadoop 系列(二)安裝配置
Hadoop 官網:http://hadoop.apache.or
一、Hadoop 安裝
1.1 Hadoop 依賴的組件
-
JDK :從 Oracle 官網下載,設置環境變量(JAVA_HOME、PATH 和 CLASSPATH)。
-
SSH(安全外殼標議) :推薦安裝 Openssh。
Hadoop 需要通過 SSH 來啟動 Slave 列表中各台主機的守護進程,因此 SSH 也是必須安裝的,即使是安裝偽分布式版本(因為 Hadoop 並沒有區分開集群式和偽分布式)。對於偽分布式, Hadoop 會采用與集群相同的處理方式,即按次序啟動文件 conf/slaves 中記載的主機上的進程;只不過在偽分布式中 Salve 為 localhost(即為自身),所以對於偽分布式 Hadoop,SSH 一樣是必需的。
1.2 Hadoop 安裝
(1) 創建 hadoop 用戶
groupadd hadoop # 創建用戶組
useradd -g hadoop -m -s /bin/bash hadoop # 創建用戶
passwd hadoop # 設置 hadoop 密碼為 hadoop
為 hadoop 用戶增加管理員權限:
vim /etc/sudoers
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
hadoop ALL=(ALL) ALL
(2) 安裝並配置 SSH 無密碼登陸
CentOS 默認已安裝了 SSH client、SSH server,打開終端執行如下命令進行檢驗
rpm -qa | grep ssh
如果返回的結果如下圖所示,包含了 SSH client 跟 SSH server,則不需要再安裝
若需要安裝,則可以通過 yum 進行安裝:
yum -y install openssh-clients openssh-server
接着執行如下命令測試一下 SSH 是否可用:
ssh localhost
此時會有如下提示(SSH 首次登陸提示),輸入 yes 。然后按提示輸入密碼,這樣就登陸到本機了。
[root@mdw home]# ssh localhost
The authenticity of host 'localhost (::1)' can't be established.
ECDSA key fingerprint is bd:66:a8:94:98:d5:0b:f3:bc:e9:5c:41:4c:ca:b3:d4.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.
root@localhost's password:
Last login: Fri Apr 20 07:07:31 2018 from 192.168.2.1
但這樣登陸是需要每次輸入密碼的,我們需要配置成SSH無密碼登陸比較方便。
首先輸入 exit 退出剛才的 ssh,就回到了我們原先的終端窗口,然后利用 ssh-keygen 生成密鑰,並將密鑰加入到授權中:
exit # 退出剛才的 ssh localhost
cd ~/.ssh/ # 若沒有該目錄,請先執行一次ssh localhost
rm ./id_rsa* # 刪除之前生成的公匙(如果有)
ssh-keygen -t rsa # 會有提示,都按回車就可以
cat id_rsa.pub >> authorized_keys # 加入授權
chmod 600 ./authorized_keys # 修改文件權限,否則無法登陸,親測
注意: 一定要 chmod 來一下,不然無法起作用。此時再用 ssh localhost 命令,無需輸入密碼就可以直接登陸了。
(3) Hadoop 安裝
wget http://mirrors.hust.edu.cn/apache/hadoop/common/hadoop-3.1.0/hadoop-3.1.0.tar.gz
tar -zxvf hadoop-3.1.0.tar.gz
sudo mv ./hadoop-3.1.0/ ./hadoop # 將文件夾名改為 hadoop
sudo chown -R hadoop:hadoop ./hadoop # 修改文件權限
Hadoop 解壓后即可使用。輸入如下命令來檢查 Hadoop 是否可用,成功則會顯示 Hadoop 版本信息
/usr/local/hadoop/bin/hadoop version
[hadoop@mdw ~]$ hadoop version
Hadoop 3.1.0
Source code repository https://github.com/apache/hadoop -r 16b70619a24cdcf5d3b0fcf4b58ca77238ccbe6d
Compiled by centos on 2018-03-30T00:00Z
Compiled with protoc 2.5.0
From source with checksum 14182d20c972b3e2105580a1ad6990
This command was run using /usr/local/hadoop/share/hadoop/common/hadoop-common-3.1.0.jar
(4) 環境變量
vim /etc/profile.d/start.sh
# hadoop
HADOOP_HOME=/home/hadoop/
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
二、Hadoop 集群配置
(1) 網絡配置
配置主機名:
vim /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=master
配置 IP/主機名 的映射關系
vim /etc/hosts
192.168.2.101 master
192.168.2.102 slave1
修改完成后需要重啟一下,重啟后在終端中才會看到機器名的變化。
配置好后需要在各個節點上執行如下命令,測試是否相互 ping 得通,如果 ping 不通,后面就無法順利配置成功
ping master -c 3 # 只ping 3次,否則要按 Ctrl+c 中斷
ping slave1 -c 3
(2) SSH 無密碼登陸節點配置
這個操作是要讓 master 節點可以無密碼 SSH 登陸到各個 slave 節點上。
首先生成 master 節點的公匙,在 master 節點的終端中執行(因為改過主機名,所以還需要刪掉原有的再重新生成一次)
cd ~/.ssh # 如果沒有該目錄,先執行一次 ssh localhost
rm ./id_rsa* # 刪除之前生成的公匙(如果有)
ssh-keygen -t rsa # 一直按回車就可以
chmod 600 ./authorized_keys # 修改文件權限
讓 master 節點需能無密碼 SSH 本機,在 master 節點上執行:
cat ./id_rsa.pub >> ./authorized_keys
完成后可執行 ssh master 驗證一下(可能需要輸入 yes,成功后執行 exit 返回原來的終端)。接着在 master 節點將上公匙傳輸到 slave1 節點:
scp ~/.ssh/id_rsa.pub hadoop@slave1:/home/hadoop/
scp 是 secure copy 的簡寫,用於在 Linux 下進行遠程拷貝文件,類似於 cp 命令,不過 cp 只能在本機中拷貝。執行 scp 時會要求輸入 slave1 上 hadoop 用戶的密碼(hadoop),輸入完成后會提示傳輸完畢,如下圖所示:
接着在 Slave1 節點上,將 ssh 公匙加入授權:
mkdir ~/.ssh # 如果不存在該文件夾需先創建,若已存在則忽略
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ./authorized_keys # 修改文件權限
rm ~/id_rsa.pub # 用完就可以刪掉了
如果有其他 slave 節點,也要執行將 master 公匙傳輸到 slave 節點,在 slave 節點上加入授權這兩步。
這樣,在 master 節點上就可以無密碼 SSH 到各個 slave 節點了,可在 master 節點上執行如下命令進行檢驗:
ssh slave1
(3) 配置集群/分布式環境配置
集群/分布式模式需要修改 /usr/local/hadoop/etc/hadoop 中的 5 個配置文件,這里僅介紹了正常啟動所必須的設置項: workers、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml 。
-
配置 workers
workers 將作為 DataNode 的主機名寫入該文件,每行一個,默認為 localhost,所以在偽分布式配置時,節點即作為 NameNode 也作為 DataNode。分布式配置可以保留 localhost,也可以刪掉,讓 Master 節點僅作為 NameNode 使用。
本教程讓 master 節點僅作為 NameNode 使用,因此將文件中原來的 localhost 刪除,只添加一行內容:slave1。
-
配置 conf/core-site.xml
<configuration> <!-- 配置默認的文件系統,地址最好使用主機名而不是IP --> <property> <name>fs.defaultFS</name> <value>hdfs://localhost:9090</value> </property> <!-- Hadoop 運行時產生文件的存儲目錄 --> <property> <name>hadoop.tmp.dir</name> <value>/usr/local/hadoop/data</value> </property> </configuration>
-
配置 conf/hdfs-site.xml
dfs.replication 一般設為 3,但我們只有一個 slave 節點,所以 dfs.replication 的值還是設為 1
<configuration> <!-- 配置 Hadoop 中 HDFS,默認為 3,單機版需要改為 1 --> <property> <name>dfs.replication</name> <value>1</value> </property> </configuration>
-
配置 conf/mapred-site.xml
<configuration> <!-- 指定 mr 運行在 yarn 上 --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>
-
配置 conf/yarn-site.xml
<configuration> <!-- 指定 yarn 的老大(ResourceManager)的地址 --> <property> <name>yarn.resourcemanager.hostname</name> <value>localhost</value> </property> <!-- reduce 獲取數據的方式 --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> </configuration>