搭建hadoop3.1.2 三節點完全分佈式環境。
安裝步驟
安裝過程總體分爲下面幾個部分:
(1)準備需要的主機
(2)安裝JDK 和hadoop
(3)配置Hadoop。
(4)配置SSH無密碼連接。
(5)格式化HDFS。
(6)啓動Hadoop並驗證安裝。
-
(1)準備需要的主機
本教程搭建三節點hadoop集羣,需要三臺主機。可以是虛擬機或者雲主機。虛擬機需要配置好靜態IP,並設置好主機名。(可以採用默認主機名,這裏爲配置管理方便使用下面主機名)
IP 主機名稱 作用 192.168.111.200 master namenode 192.168.111.201 slaver01 datanode1 192.168.111.202 slaver02 datanode2 #查看主機名命令 cat /etc/hosts #修改主機名命令 hostnamectl set-hostname master
配置Hosts如下:
192.168.111.200 master 192.168.111.201 slaver01 192.168.111.202 slaver02
準備好主機後,開始下一步。
-
(2)安裝JDK和Hadoop (三臺機器都操作一遍)
安裝jdk,下載比較穩定的jdk1.8安裝包後解壓到/opt下
tar -zxf jdk-8u201-linux-x64.tar.gz -C /opt/ cd /opt/ mv jdk1.8.0_201 java
安裝hadoop3.1.2,下載hadoop3.1.2安裝包後解壓:
tar -zxf hadoop-3.1.2.tar.gz -C /opt/
配置環境變量
vim /etc/profile
添加如下內容:
#java環境變量 export JAVA_HOME=/opt/java export PATH=$JAVA_HOME/bin:$PATH export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar #hadoop環境變量 export HADOOP_HOME=/opt/hadoop-3.1.2 export PATH=.:$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
使環境變量生效
source /etc/profile
測試jdk和hadoop:安裝成功會輸出相關版本信息
java -version hadoop version
-
(3)配置hadoop(只在master操作,後邊通過複製配置文件到另兩臺)
- 修改hadoop的java環境變量
vi /opt/hadoop-3.1.2/etc/hadoop/hadoop-env.sh
-
core-site.xml
vim /opt/hadoop-3.1.2/etc/hadoop/core-site.xml
配置下面信息:
<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://master:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/root/zx/bigdata</value> </property> <property> <name>hadoop.proxyuser.root.hosts</name> <value>*</value> </property> <property> <name>hadoop.proxyuser.root.groups</name> <value>*</value> </property> </configuration>
-
hdfs-site.xml
vim /opt/hadoop-3.1.2/etc/hadoop/hdfs-site.xml
配置如下:
<configuration> <property> <name>dfs.datanode.data.dir</name> <value>/opt/hadoop-3.1.2/dfs/data</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>/opt/hadoop-3.2.1/dfs/name</value> </property> <property> <name>dfs.webhdfs.enabled</name> <value>true</value> </property> <property> <name>dfs.replication</name> <value>2</value> </property> <property> <name>dfs.permissions</name> <value>false</value> </property> </configuration>
-
mapred-site.xml
vim /opt/hadoop-3.1.2/etc/hadoop/mapred-site.xml
配置如下:
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapreduce.map.memory.mb</name> <value>4096</value> </property> <property> <name>mapreduce.reduce.memory.mb</name> <value>8192</value> </property> <property> <name>yarn.app.mapreduce.am.env</name> <value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value> </property> <property> <name>mapreduce.map.env</name> <value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value> </property> <property> <name>mapreduce.reduce.env</name> <value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value> </property> </configuration>
-
yarn-site.xml
vim /opt/hadoop-3.1.2/etc/hadoop/yarn-site.xml
配置如下:
<configuration> <property> <name>yarn.resourcemanager.hostname</name> <value>master</value> </property> <property> <name>yarn.resourcemanager.webapp.address</name> <value>master:8088</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name> <value>org.apache.hadoop.mapred.ShuffleHandler</value> </property> <property> <name>yarn.resourcemanager.resource-tracker.address</name> <value>master:8035</value> </property> </configuration>
-
workers
vim /opt/hadoop-3.1.2/etc/hadoop/workers
配置worker
slaver01 192.168.111.201 slaver02 192.168.111.202
-
配置命令腳本的用戶權限
cd /opt/hadoop-3.1.2/sbin
start-dfs.sh 和stop-dfs.sh添加如下:
HDFS_DATANODE_USER=root HDFS_DATANODE_SECURE_USER=hdfs HDFS_NAMENODE_USER=root HDFS_SECONDARYNAMENODE_USER=root
star-yarn.sh和stop-yarn.sh添加:
YARN_RESOURCEMANAGER_USER=root HADOOP_SECURE_DN_USER=yarn YARN_NODEMANAGER_USER=root
-
複製配置文件到另外兩個從節點
for node in slaver01 slaver02; do scp /opt/hadoop-3.1.2/etc/hadoop/* $node:/opt/hadoop-3.1.2/etc/hadoop/; scp /opt/hadoop-3.1.2/sbin/* $node:/opt/hadoop-3.1.2/sbin/; done
-
(4)配置SSH無密碼連接。
三節點上分別執行:(如果都已經有生成過公鑰,可跳過)
ssh-keygen -t rsa
master節點執行:
master to slaver01
ssh-copy-id -i ~/.ssh/id_rsa.pub root@slaver01 ssh slaver01 chmod 600 ~/.ssh/authorized_keys exit
master to slaver02
ssh-copy-id -i ~/.ssh/id_rsa.pub root@slaver02 ssh slaver02 chmod 600 ~/.ssh/authorized_keys exit
master to master
shh master cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys exit
slaver01節點執行:
slaver01 to master
ssh-copy-id -i ~/.ssh/id_rsa.pub root@master ssh master chmod 600 ~/.ssh/authorized_keys exit
slaver01 to slaver02
ssh-copy-id -i ~/.ssh/id_rsa.pub root@slaver02 ssh slaver02 chmod 600 ~/.ssh/authorized_keys exit
slaver01 to slaver01
shh slaver01 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys exit
slaver02節點執行:
slaver02 to master
ssh-copy-id -i ~/.ssh/id_rsa.pub root@master ssh master chmod 600 ~/.ssh/authorized_keys exit
slaver02 to slaver01
ssh-copy-id -i ~/.ssh/id_rsa.pub root@slaver01 ssh slaver01 chmod 600 ~/.ssh/authorized_keys exit
slaver02 to slaver02
shh slaver02 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys exit
-
(4)格式化HDFS
hdfs namenode -format
-
(5)啓動Hadoop並驗證安裝。
start-all.sh
通過jps命令可以查看java進程:
root@master:~# jps 16836 ResourceManager 17383 Jps 16328 NameNode
訪問HDFS管理界面:
http://192.168.111.200:9870
訪問hadoop管理界面:
http://192.168.111.200:8088
問題總結
jps命令失效
jps名令是查看系統java檢查的命令。需要配置jdk的環境變量到 /root/.bash_profile中
vim /root/.bash_profile
//增加jdk的環境變量,可以通過 which java查看路徑
source /root/.bash_profile
幾種配置文件的區別
在CentOs中:
/etc/profile
/etc/bashrc
~/.bashrc
~/.bash_profile
在Ubuntu,Debian中:
/etc/profile
/etc/bash.bashrc
~/.bashrc
~/.profile
1./etc/profile
用來設置系統環境參數,比如$PATH. 這裏面的環境變量是對系統內所有用戶生效的。
2./etc/bashrc
這個文件設置系統bash shell相關的東西,對系統內所有用戶生效。只要用戶運行bash命令,那麼這裏面的東西就在起作用。
3.~/.bash_profile
用來設置一些環境變量,功能和/etc/profile 類似,但是這個是針對用戶來設定的,也就是說,你在/home/user1/.bash_profile 中設定了環境變量,那麼這個環境變量只針對 user1 這個用戶生效.
4.~/.bashrc
作用類似於/etc/bashrc, 只是針對用戶自己而言,不對其他用戶生效。
一些命令
防火牆
centos:
systemctl status firewalld
1、直接關閉防火牆
systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall開機啓動
ubuantu查看:
ufw status
ufw disable
端口進程相關
查看某端口占用情況
netstat -anp |grep 8787
查看某進程名或者進程id的應用
ps axu|grep 進程名稱 或者id
查看某個端口進程的命令:lsof -i:端口號