我自己配置Hadoop的過程挺艱難的,東拼西湊找遍教程,可算把這配好了。特此寫一個記錄,以防日後所需,同時也希望能幫到大家。
目錄
事先準備
軟件 | 下載地址 |
---|---|
CentOS 7.4 | https://www.centos.org/download/ |
VirtualBox 6.0 | https://www.virtualbox.org/wiki/Downloads |
JDK 1.8 | https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html |
Hadoop 2.6 | https://hadoop.apache.org/releases.html |
XShell 6 | https://www.netsarang.com/zh/xshell/ |
XFtp 6 | https://www.netsarang.com/zh/xftp/ |
VirtualBox
安裝CentOS
- 新建虛擬機
類型:Linux;版本:Red Hat 32/64依自身情況 - 掛載鏡像文件
- 啓動並安裝 ;安裝時選擇最小安裝即可
配置網絡環境
-
網卡1
-
網卡2(這裏使用的是WIFI,如果是有線網絡 見3)
-
網卡2(有線網絡)
-
CentOS中的網絡設置:
首先在windows中輸入ipconfig /all
查看網絡配置。如圖,我的虛擬機軟件所分配到的ipv4爲192.168.56.1;那麼我們實際在虛擬機中的ipv4地址的範圍應該是192.168.56.2~192.168.56.255。接下來在CentOS中操作:
輸入ip add
查看網絡配置1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 08:00:27:e7:0e:5b brd ff:ff:ff:ff:ff:ff inet 192.168.56.2/24 brd 192.168.56.255 scope global enp0s3 valid_lft forever preferred_lft forever inet6 fe80::9f23:fc55:29a7:6e2c/64 scope link valid_lft forever preferred_lft forever 3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 08:00:27:6d:1e:ed brd ff:ff:ff:ff:ff:ff inet6 2408:84ef:22:eab6:3cd8:95a0:8ce9:4ad9/64 scope global noprefixroute dynamic valid_lft 3363sec preferred_lft 3363sec inet6 fe80::22ed:6b14:3db9:426f/64 scope link valid_lft forever preferred_lft forever
輸入
vi /etc/sysconfig/network-scripts/ifcfg-enp0s3
編輯enp0s3網卡
修改其中的ONBOOT
;IPADDR
;NETMASK
;GATEWAY
TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=static DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=enp0s3 UUID=8b84fb8e-0a8c-4ed8-9d81-b33f2043980c DEVICE=enp0s3 ONBOOT=yes IPADDR=192.168.56.2 NETMASK=255.255.255.0 GATEWAY=192.168.1.1 PREFIX=24 DNS1=114.114.114.114
設置完成後輸入
service network restart
來重啓網絡
方便起見,這裏可以先把防火牆關了,輸入systemctl stop firewalld.service
輸入systemctl status firewalld.service
確認防火牆已被關閉
如圖: 防火牆已被關閉Active: inactive (dead)
測試與實體機的連接
ping 192.168.43.1
,Ctrl/Command + Z停止ping
測試與外網的連接ping www.baidu.com
回到實體機,打開cmd,輸入ping 192.168.56.2
測試與虛擬機的連接
Linux常用命令
管理員權限:sudo
(下文配置時的指令操作如果出現錯誤,就在指令前加sudo
)
防火牆狀態:systemctl status firewalld.service
關閉防火牆:systemctl stop firewalld.service
編輯enp0s3網卡:vi /etc/sysconfig/network-scripts/ifcfg-enp0s3
重啓network:service network restart
更改DNS
查看當前啓動的連接:nmcli connection show
更改DNS:nmcli con mod enp0s3 ipv4.dns 114.114.114.114
配置生效:nmcli con up enp0s3
配置hadoop文件:cd /usr/local/hadoop-2.6.0/etc/hadoop
取消當前指令:Ctrl/Command + Z
保存文件並退出:先按Esc;然後 Shift + ; (即輸入“:”)最後輸入wq
XFtp 連接 CentOS
左上角新建連接
連接成功後,左邊爲本機文件,右邊爲虛擬機文件;可以通過右鍵本機文件將其上傳至虛擬機
XShell 連接 CentOS
左上角新建連接
點擊用戶身份驗證,輸入用戶名和密碼
安裝JDK
下載JDK 1.8: 鏈接;
利用XFtp將文件發送到CentOS中。
輸入tar -zxvf jdk-8u202-linux-x64.tar.gz
解壓文件
輸入mv jdk1.8.0_202 /usr/local/
將解壓好的文件夾移動到usr/local文件夾下(個人習慣問題,可不移)
輸入vim /etc/profile
配置JDK環境;在文件最下面輸入:
export JAVA_HOME=/usr/local/jdk1.8.0_202/
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
如圖
輸入source /etc/profile
使方纔的修改生效
輸入java -version
測試是否生效,如圖:
Hadoop配置前期準備(Hadoop安裝&SSH免密登錄)
-
下載Hadoop 2.6 鏈接
利用XFtp將文件發送到CentOS中。
輸入tar -zxvf hadoop-2.6.0.tar.gz
解壓文件
輸入mv hadoop-2.6.0 /usr/local/
將解壓好的文件夾移動到usr/local文件夾下(個人習慣問題,可不移)
輸入vim /etc/profile
配置Hadoop環境;在文件最下面輸入:export HADOOP_HOME=/usr/local/hadoop-2.6.0/ export PATH=.:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$JAVA_HOME/bin:$PATH
如圖:
輸入
source /etc/profile
使方纔的修改生效
輸入hadoop version
測試是否生效,如圖:
-
首先爲了方便我們訪問,先分別爲三臺虛擬機設置主機名
hostnamectl set-hostname master
hostnamectl set-hostname node1
hostnamectl set-hostname node2
設置好後輸入vim /etc/hosts
配置hosts文件;在文件最下面輸入192.168.56.2 master 192.168.56.3 node1 192.168.56.4 node2
如圖:
可使用ping node1
測試是否連通 -
SSH配置
輸入rpm –qa | grep ssh
查看是否已經安裝了SSH
如果未安裝,輸入yum install ssh -y
安裝SSH
輸入ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
生成密鑰(過程中無需輸入參數,直接回車即可)
如圖:這邊已經生成過一次了,所以輸入y
覆蓋
注意圖中的:Your public key has been saved in /home/robinjohn/.ssh/id_rsa.pub.
得知,我們的密鑰被保存在了/home/robinjohn/.ssh/路徑下
輸入cd /home/robinjohn/.ssh/
切換到該路徑下
輸入ls
顯示該目錄下的文件,如圖:
可以看到我們已經生成了id_rsa和id_rsa.pub文件
在該目錄下,輸入cat id_rsa.pub >> authorized_keys
生成公鑰
輸入ls
顯示該目錄下的文件,如圖:
可以看到我們已經生成了authorized_keys文件
由於authorized_keys文件權限必須是600,所以我們輸入chmod 600 authorized_keys
修改其權限
修改完成後輸入systemctl restart sshd.service
重啓服務使其生效
輸入ssh localhost
或ssh master
使用SSH登錄當前master主機,如圖:
可以看到我們已經不需要密碼了,測試完後別忘了使用exit
登出。
輸入scp ~/.ssh/authorized_keys node1:~/.ssh
將我們的密鑰發給node1結點;同理,輸入scp ~/.ssh/authorized_keys node2:~/.ssh
將密鑰發給node2結點;如圖:
輸入ssh node1
和ssh node2
分別測試兩個結點的免密登錄,如圖:
可以看到我們已經不需要密碼了,測試完後別忘了使用exit
登出。
此時,我們已經實現了master->node的免密登錄,即:接下來,我們在node1和node2上分別執行
cat id_rsa.pub >> ~/.ssh/authorized_keys
保存公鑰
cd ~/.ssh/
切換到保存公鑰的路徑
並輸入chmod 600 authorized_keys
修改其權限
修改完後別忘了輸入systemctl restart sshd.service
重啓下服務
輸入scp ~/.ssh/authorized_keys master:~/.ssh
將公鑰發送給master
好啦,我們來測試下能不能免密連上master,輸入ssh master
成功!~ 測試完別忘了exit
退出登錄。現在,我們實現了node->master的免密登錄(雙向),即:
Hadoop配置
1. 修改配置文件
由於我先前用mv hadoop-2.6.0 /usr/local/
將解壓好的文件夾移動到了usr/local文件夾下,那麼我的配置文件目錄則爲/usr/local/hadoop-2.6.0/etc/hadoop/
如圖:
輸入cd /usr/local/hadoop-2.6.0/etc/hadoop
切換到該目錄下,並輸入ls
查看文件
我們一共需要修改7個文件:
hadoop-env.sh
yarn-env.sh
slaves
core-site.xml
hdfs-site.xml
mapred-site.xml
yarn-site.xml
首先我們輸入vim hadoop-env.sh
打開hadoop-env.sh文件
由於hadoop在配置文件中需要JDK的絕對路徑,所以。
在export JAVA_HOME=${JAVA_HOME}
前加#
對其註釋
另起一行,寫入export JAVA_HOME=/usr/local/jdk1.8.0_202
,即:
#export JAVA_HOME=${JAVA_HOME}
export JAVA_HOME=/usr/local/jdk1.8.0_202
如圖:
輸入vim yarn-env.sh
打開yarn-env.sh文件
在文件末尾加上export JAVA_HOME=/usr/local/jdk1.8.0_202
,如圖:
輸入vim slaves
修改slaves文件;slaves直譯過來有奴隸的意思,我們把這個文件原來的內容全部刪除,並往這個文件中添加
node1
node2
如圖:
輸入vim core-site.xml
打開core-site.xml文件,做如下修改:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop-2.6.0/tmp</value>
</property>
</configuration>
輸入vim hdfs-site.xml
打開hdfs-site.xml文件,做如下修改:
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/usr/local/hadoop-2.6.0/hdfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/usr/local/hadoop-2.6.0/hdfs/data</value>
</property>
</configuration>
輸入vim mapred-site.xml
打開mapred-site.xml文件,做如下修改:
<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>
<property>
<name>mapred.job.tracker</name>
<value>master:9001</value>
</property>
</configuration>
輸入vim yarn-site.xml
打開yarn-site.xml文件,做如下修改:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>master:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>master:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>master:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>master:8088</value>
</property>
</configuration>
到這,master的hadoop已配置完成;剩下node1和node2結點按照上面的步驟一樣配置。
很麻煩?不用怕;
輸入scp -r /usr/local/hadoop-2.6.0 node1:/usr/local/hadoop-2.6.0
將我們所有配置好的hadoop文件發送到node1結點上;
同理輸入scp -r /usr/local/hadoop-2.6.0 node2:/usr/local/hadoop-2.6.0
發送給node2。
2. 初始化並開啓Hadoop
接下來的操作只需要在master中執行即可
首先輸入cd /usr/local/hadoop-2.6.0/bin
來到hadoop下的bin文件夾中
輸入./hadoop namenode -format
爲第一次的開啓執行初始化
注意圖中的
19/06/03 15:39:19 INFO util.ExitUtil: Exiting with status 0
如果最後的數字不是0,意味着在執行的時候出了某些錯誤;有可能是權限不足,在命令前加sudo
再執行一次試試;
輸入cd /usr/local/hadoop-2.6.0/sbin
來到sbin文件夾中
輸入./start-all.sh
啓動Hadoop
打開Hadoop的管理頁面 http://192.168.56.2:50070 ;如圖:
至此,Hadoop就成功配置完成了!
使用完後別忘了關閉,輸入./stop-all.sh
3. 一些常用的管理頁面地址
master結點ip + :端口號
如 http://192.168.56.2:50070
50070
8088
19888
3306