分布式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