分布式hadoop集群分布
服務器功能規劃
node-1:namenode,datanode,nodemanager,historyserver
node-2:resourcemanage,datanode,nodemanager
node-3:datanode,nodemanager,secondarynamenode
#在node-1上
$ bin/hdfs namenode -format
$ sbin/start-dfs.sh --啟動HDFS
$ sbin/mr-jobhistory-daemon.sh start historyserver
#在node-2上:
$ sbin/start-yarn.sh --啟動YARN
一、集群規劃
01 02 03
HDFS namenode SecondaryNamenode
datanode datanode datanode
historyserver
YARN resourcemanager
nodemanager nodemanager nodemanager
二、準備系統環境
1. Vi /etc/sysconfig/network 主機名
master.comslave1.comslave2.com
2. Vi /etc/hosts 主機名和ip地址的映射 三臺服務器
192.168.174.130 master.com192.168.174.131 slave1.com192.168.174.132 slave2.com
3. 關閉iptables和selinux 三臺服務器
service iptables stop 關閉防火墻Chkconfig iptables off 讓iptables開啟不啟動Vi /etc/sysconfig/selinux SELINUX=disabled
4. 創建普通用戶 [root用戶] [三臺服務器]
# useradd bigdata
# echo 123456 | passwd --stdin bigdata
5. 配置靜態IP和DNS [root用戶] [三臺服務器]
# vi /etc/sysconfig/network-scripts/ifcfg-eth0
IPADDR=192.168.201.130
NETMASK=255.255.255.0
GATEWAY=192.168.201.2
DNS1=192.168.201.2
# service network restart
6. 把系統啟動級別改成“字符模式” [root用戶] [后面兩臺服務器]
安裝類型選擇“Basic”
# vi /etc/inittab
id:3:initdefault:
7. 卸載服務器JDK [root用戶] [三臺服務器]
# rpm -qa |grep java
# rpm -e --nodeps java軟件包
三、配置NTP時間服務器[root用戶]
- 把01這臺服務器配置為時間服務器
- 然后集群內其他服務器都來同步這臺服務器的時間
- 目的:集群內部所有服務器時間一致
1. 調整時間(三臺服務器)
# date -R --檢查當前系統時區
Thu, 25 Aug 2021 14:51:07 +0800
# rm -rf /etc/localtime --如果時區不是+0800
# ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
2. bigdata01.com
2.1 同步時間# service ntpd stop# ntpdate cn.pool.ntp.org --同步當前服務器時間## 必須在 ntpd 進程關閉的情況下才能同步別的 ntp 服務器時間,反之可能出現問題:“the NTP socket is in use, exiting”錯誤。問題分析:出現該錯誤的原因是系統 ntpd 服務器正在運行中,通過 ps aux | grep ntpd 或者 service ntpd status 查看,會看到 ntpd 正在運行。解決方法: # service ntpd stop2.2 檢查軟件包# rpm -qa | grep ntp --查看ntp軟件包是否已安裝ntp-4.2.4p8-3.el6.centos.x86_64# yum -y install ntp --如果沒有安裝需要安裝ntp2.3 修改ntp配置文件# vi /etc/ntp.conf####去掉下面這行前面的# ,并把網段修改成自己的網段restrict 192.168.201.0 mask 255.255.255.0 nomodify notrap####注釋掉以下幾行#server 0.centos.pool.ntp.org#server 1.centos.pool.ntp.org#server 2.centos.pool.ntp.org####把下面兩行前面的#號去掉,如果沒有這兩行內容,需要手動添加server 127.127.1.0 # local clockfudge 127.127.1.0 stratum 102.4 重啟ntp服務# service ntpd start# chkconfig ntpd on
3. bigdata.com [后兩臺服務器02、03]
3.1 關閉ntpd進程,默認關閉# service ntpd stop# chkconfig ntpd off3.2 去同步第一臺服務器時間# ntpdate bigdata01.com --去第一臺服務器同步時間25 Aug 15:16:47 ntpdate[2092]: adjust time server 192.168.201.128 offset 0.311666 sec3.3 制定計劃任務,周期性同步時間# crontab -e*/10 * * * * /usr/sbin/ntpdate master01[分 時 日 月 星期]# service crond restart
四、免密登錄
linux 自帶的已經安裝了 ssh 客戶端,還需要安裝 ssh 服務端
sudo apt-get install openssh-server
ssh localhost
cd ~/.ssh
Ssh-keygen -t rsa
cat ./id_rsa.pub >> ./authorized_keys 加入授權
bigdata01.com –> bigdata01.com
bigdata02.com
bigdata03.combigdata02.com --> bigdata01.combigdata02.combigdata03.combigdata03.com --> bigdata01.combigdata02.combigdata03.com
在01上: [用普通用戶bigdata]
$ ssh-keygen -t rsa --一直回車,生成一對公私鑰對 ** 在/home/bigdata/.ssh/ 文件夾生成兩個秘鑰文件,如果生成錯誤,可以刪除重新生成id_rsa id_rsa.pub
$ ssh-copy-id master --把自己的公鑰拷貝給01
$ ssh-copy-id node1
$ ssh-copy-id node2
在02上: [用普通用戶bigdata]
$ ssh-keygen -t rsa$ ssh-copy-id bigdata01.com$ ssh-copy-id bigdata02.com$ ssh-copy-id bigdata03.com
在03上: [用普通用戶bigdata]
$ ssh-keygen -t rsa$ ssh-copy-id bigdata01.com$ ssh-copy-id bigdata02.com$ ssh-copy-id bigdata03.com
使用 ssh hostname 校驗,使用 ssh 無秘登錄后,一定要退出 exit;
五、安裝配置JDK [root用戶] [三臺服務器]
# mkdir /opt/modules/
# mkdir /opt/softwares/
# chown bigdata:bigdata /opt/modules/
# chown bigdata:bigdata /opt/softwares/# su - bigdata
$ tar -vzxf /opt/softwares/jdk-7u67-linux-x64.tar.gz -C /opt/modules/Vi .~/.bashrc
Source ~/.bashrc
環境變量 [root用戶] [三臺服務器]
# vi /etc/profile
## JAVA HOME
JAVA_HOME=/opt/modules/jdk1.7.0_67
export PATH=$PATH:$JAVA_HOME/bin
# source /etc/profile
# java -version
[bigdata用戶]第一臺安裝,拷貝 jdk 目錄給后面兩臺服務器
# mkdir /opt/modules/
# chown bigdata:bigdata /opt/modules/
# su - bigdata
$ scp -r jdk1.7.0_79/ node1:/opt/modules/
$ scp -r jdk1.7.0_79/ node2:/opt/modules/
六、模式
6.1 單機模式
cd /opt/modules/hadoop-2.6.0
mkdir input
cp ./etc/hadoop/*.xml ./input
./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep ./input ./output 'dfs[a-z.]+'
cat ./output/* 查看運行結果
hadoop默認不會覆蓋結果文件,如果要再次運行,就需要將output文件刪除:rm -r ./output
6.2 偽分布式模式
core-site.xml
<configuration><property><name>hadoop.tmp.dir</name>
臨時保存文件,若沒有配置將會使用臨時文件 /tmp/hadoo-hadoop, 而這個目錄在 hadoop 重啟時,可能被系統清理掉<value>file:/opt/modules/hadoop-2.6.0/tmp</value></property><property><name>fs.defaultFS</name><value>hdfs://localhost:9000</value></property>
</configuration>
hdfs-site.xml
<configuration><property><name>dfs.replication</name> <value>1</value></property><property><name>dfs.namenode.name.dir</name><value>file:/opt/modules/hadoop-2.6.0/tmp/dfs/name</value></property><property><name>dsf.datanode.data.dir</name><value>file:/opt/modules/hadoop-2.6.0/tmp/dfs/data</value></property>
</configuration>
名稱節點的格式化
./bin/hdfs namenode -format
啟動hadoop
./sbin/start-dfs.sh
錯誤:若在啟動hadoop過程中出現很多ssh:could not resolve hostname xxx
按ctil + c中斷啟動過程
在~/.bashrc文件最上邊開始位置
export HADOOP_HOME=/opt/modules/hadoop-2.6.0
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
保存該文件后,執行 source ~/.bashrc 使變量環境設置生效,然后再次啟動 hadoop
運行 hadoop 偽分布式實例
要使用 hdfs 上的數據,首先需要在 hdfs 中創建用戶目錄
./bin/hdfs dfs -mkdir -p /user/hadoop
./bin/hdfs dfs -mkdir input
./bin/hdfs dfs -put ./etc/hadoop/*.xml input
./bin/hdfs dfs -ls input 查看input文件
./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep ./input ./output 'dfs[a-z.]+'
./bin/hdfs dfs -cat output/*./bin/hdfs dfs rm -r output刪除output文件
6.3 偽分布式下啟動yarn
./sbin/start-dfs.sh
mv ./etc/hadoop/mapred-site.xml.template ./etc/hadoop/mapred-site.xml重命名
vi ./etc/hadoop/mapred-site.xml
<configuration><property><name>mapreduce.framework.name</name> <value>yarn</value></property>
</configuration>
vi ./etc/hadoop/yarn-site.xml
<configuration><property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value></property>
</configuration>
./sbin/start-dfs.sh
./sbin/start-yarn.sh
./sbin/mr-jonhistory-daemon.sh start historyserver
./sbin/stop-yarn.sh
./sbin/mr-jonhistory-daemon.sh stop historyserver
./sbin/stop-dfs.sh
不想啟動 yarn,則務必將 mapred-site.xml 重命名,改成 mapred-site.xml.template 需要用時改回來即可,否則只啟動 hdfs 不啟動 yarn 會提示retrying connect to server:0.0.0.0/0.0.0.0:8032 錯誤
path環境
在~/.bashrc
export PATH=$PATH:/opt/modules/hadoop-2.6.0/sbin:/opt/modules/hadoop-2.6.0/bin
6.4 分布式模式配置
sudo vi /etc/hostname
sudo vi /etc/hosts
ping master -c 3
Master:
cd ~/.ssh
rm ./id_rsa *
ssh-keygen -t rsa
cat ./id_rsa.pub >> ./authorized_keys
scp ~/.ssh/id_rsa.pub root@slave1
Slave:
mkdir ~/.ssh若無ssh
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys 在slave節點加入授權
rm ~/id_rsa.pub