Hadoop-3.2.1集群搭建笔记
一、准备
版本准备:Centos7,hadoop-3.2.1
1.设置固定IP
v i / e t c / s y s c o n f i g / n e t w o r k − s c r i p t s / i f c f g − e n s 33 : \color{blue}{vi /etc/sysconfig/network-scripts/ifcfg-ens33 :} vi/etc/sysconfig/network−scripts/ifcfg−ens33:
BOOTPROTO=static
ONBOOT=yes
IPADDR=192.168.5.11
NETMASK=255.255.255.0
GATEWAY=192.168.5.2
DNS1=202.96.128.86
DNS2=223.5.5.5
2.修改主机名称:
vi /etc/sysconfig/network:
NETWORKING=yes
HOSTNAME=master
3.建立主机名和IP的映射:
v i / e t c / h o s t s : \color{blue}{vi /etc/hosts:} vi/etc/hosts:
192.168.5.11 master
192.168.5.12 slave1
192.168.5.13 slave2
192.168.5.14 slave3
4.重新安装JDK:
(1)首先卸载不要的Java版本
a.用rpm -qa | grep java查看包含java字符串的文件
b.用rpm -e --nodeps [filename]删除卸载open Java,包含noarch的文件不必删除
c.再次用java -version查看
(2)下载安装JDK
a.配置环境变量
v i / e t c / p r o f i l e \color{blue}{vi /etc/profile} vi/etc/profile
export JAVA_HOME=/opt/jdk
export PATH=$JAVA_HOME/bin:$PATH
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ln -s /opt/jdk/bin/java /usr/bin/java (由于一些自己注册的linux服务(如springboot的jar注册的服务),默认情况下从/usr/bin/java路径使用java,yum安装的时候,这个超链接会自动创建,如果你自己下载包安装的话,这个超链接就需要你手动创建了。不过,source之后你就可以将这段删去,否则它会一直跳提示)
5.关闭防火墙
systemctl stop firewalld # 停止防火墙服务
systemctl disable firewalld # 禁止开机启动
systemctl status firewalld #查看防火墙状态
二、Hadoop的安装和配置:
master 节点的配置
镜像网站:http://apache.fayea.com/hadoop/common/ 用wget命令比较好,解压配置:
1.配置环境变量:
export JAVA_HOME=/opt/jdk
export PATH=$JAVA_HOME/bin:$PATH
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export HADOOP_HOME=/opt/hadoop
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
2.配置core-site.xml
<property>
<!-- 配置NameNode所在节点 -->
<name>fs.defaultFS</name>
<value>hdfs://master:8020</value>
</property>
<property>
<!-- 配置数据存放位置 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/hadoop/tmp</value>
</property>
<property>
<name>fs.trash.interval</name> //垃圾箱
<value>4320</value>
</property>
#####3.修改hadoop-env.sh
export JAVA_HOME=/opt/jdk
4.修改yarn-env.sh
export JAVA_HOME=/opt/jdk
5.修改mapred-site.xml
<property>
<!-- 指定Hadoop以后MR运行在YARN上,默认值为local -->
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!-- jobhistory properties -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>master:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19888</value>
</property>
6.修改yarn-site.xml:
<property>
<!-- 指定YARN的ResourceManager的地址,由于只有一台服务器所以填本机即可 -->
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>${yarn.resourcemanager.hostname}:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>${yarn.resourcemanager.hostname}:8030</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>${yarn.resourcemanager.hostname}:8088</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.https.address</name>
<value>${yarn.resourcemanager.hostname}:8090</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>${yarn.resourcemanager.hostname}:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>${yarn.resourcemanager.hostname}:8033</value>
</property>
<property>
<name>yarn.nodemanager.local-dirs</name>
<value>/data/hadoop/yarn/local</value>
</property>
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<name>yarn.nodemanager.remote-app-log-dir</name>
<value>/data/tmp/logs</value>
</property>
<property>
<name>yarn.log.server.url</name>
<value>http://master:19888/jobhistory/logs/</value>
<description>URL for job history server</description>
</property>
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
<property>
<!-- 指定NodeManager获取数据的方式 -->
<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.nodemanager.resource.memory-mb</name>
<value>2048</value>
</property>
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>512</value>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>4096</value>
</property>
<property>
<name>mapreduce.map.memory.mb</name>
<value>2048</value>
</property>
<property>
<name>mapreduce.reduce.memory.mb</name>
<value>2048</value>
</property>
<property>
<name>yarn.nodemanager.resource.cpu-vcores</name>
<value>1</value>
</property>
7.修改workers文件,删除原有内容,添加
slave1
slave2
slave3
该文件的作用为指定DataNode和NodeManager节点所在位置,这里hadoop3与hadoop2的配置是有区别的,hadoop2中的配置文件为slaves,而3中已被修改为workers
8.修改hdfs-site.xml:
<configuration>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///opt/hadoop/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///opt/hadoop/dfs/data</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>0.0.0.0:50090</value>
</property>
<!-- 配置文件副本数,由于我们是完全分布式只有一台服务器所以配置成3 -->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
dfs.namenode.http-address在hadoop-3.2.0版本上的默认值是 0.0.0.0:9870 ,在hadoop-2.9.2版本上的默认值是0.0.0.0:50070,所以不同版本可以通过不同端口访问NameNode。
9.修改hosts文件
192.168.5.11 master master
192.168.5.12 slave1 slave1
192.168.5.13 slave2 slave2
192.168.5.14 slave3 slave3
10.权限赋予
赋予hadoop以root权限运行(若未赋权,启动的时候将报错)
vi /opt/hadoop/sbin/start-dfs.sh
HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
vi /opt/hadoop/sbin/start-yarn.sh
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root
赋予hadoop 关闭权限(若未赋权,将无法关闭)
vi /opt/hadoop/sbin/stop-yarn.sh
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root
vi /opt/hadoop/sbin/stop-dfs.sh
HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
三、slave1,2,3的配置
1.克隆虚拟机slave1,2,3
2.删除/etc/udev/rules.d/70-persistent-ipoib.rules //注:2和3没删,好像不影响
3.修改/etc/sysconfig/network-scripts/ifcfg-ens33
#UUID=969e9664-e3e7-46fc-8688-f1f47094c86a
IPADDR=192.168.5.12
4.修改机器名vim /etc/sysconfig/network并重启reboot
NETWORKING=yes
HOSTNAME=slave1
5.SSH配置
ssh-keygen -t rsa一路回车
cd ~/.ssh
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys #复制公钥
chmod 644 authorized_keys #赋权
for i in 1 2 3;do scp -r ~/.ssh/id_rsa.pub slave$i:~/.ssh/;done #传输文件
ssh IP/HOSTNAME #查看
6.安装NTP并设置master为NTP服务主节点
yum install ntp ntpdate ntp-doc
systemctl enable ntpd #登录即开启
在master节点
v i m / e t c / n t p . c o n f \color{blue}{vim /etc/ntp.conf} vim/etc/ntp.conf
#注释掉以server开头的行
#添加以下内容,允许内网其他机器同步时间,如果不添加该约束默认允许所有IP访问本机同步服务
restrict 192.168.0.0 mask 255.255.255.0 nomodify notrap
server 127.127.1.0
fudge 127.127.1.0 stratum 10
在slave1,2,3节点
先注释掉以server开头的行,添加
server master
# 配置允许上游时间服务器主动修改本机的时间
restrict master nomodify notrap noquery
7.启动NTP服务:
(1)在master
a.在master节点上输入启动命令
systemctl start ntpd
b.查看网络中的NTP服务器,同时显示客户端和每个服务器的关系:
ntpq -p
c.查看时间同步状态
ntpstat
这个一般需要5-10分钟后才能成功连接和同步。所以,服务器启动后需要稍等下。
刚启动的时候,执行ntpstat,会显示unsynchronised:
同步成功以后,会显示:
synchronised to local net (127.127.1.0) at stratum 11
time correct to within 12 ms
polling server every 64 s
(2)在slave
a.在slave1,2,3上输入ntpdate -u master 使时间和master同步
b.输入启动命令 systemctl start ntpd
c.设置开机自启动ntp服务:systemctl enable ntpd
2.格式化 hdfs
hdfs namenode -format
出现 I N F O c o m m o n . S t o r a g e : S t o r a g e d i r e c t o r y / o p t / h a d o o p / c u r r e n t / d f s / n a m e h a s b e e n s u c c e s s f u l l y f o r m a t t e d . \color{red}{INFO common.Storage: Storage directory /opt/hadoop/current/dfs/name has been successfully formatted.} INFO common.Storage: Storage directory /opt/hadoop/current/dfs/name has been successfully formatted.
则说明格式化成功(这一行代码可以在倒数八九行找找)
注:如果需要重新格式化NameNode,需要先将原来NameNode和DataNode下的文件全部删除
3.启动
sbin/start-dfs.sh
sbin/start-yarn.sh
sbin/mr-jobhistory-daemon.sh start historyserver
4.关闭
sbin/stop-yarn.sh # 关闭hadoop-1上的ResourceManager和
slaves文件中指定节点的NodeManager
sbin/stop-dfs.sh # 关闭hadoop-1上的NameNode、
Secondary NameNode和slaves文件中指定节点的DataNode
sbin/mr-jobhistory-daemon.sh stop historyserver
检查
(1)使用jps
若有相关组件启动,则成功
master上应该有以下几个进程:
NameNode
SecondaryNameNode
ResourceManager
slave上都应该有以下几个进程:
DataNode
NodeManager
(2)使用
http://master:9870
防火墙不同版本命令
CentOS-6
service iptables stop #暂时关闭防火墙
service stop iptables # 停止防火墙服务
chkconfig iptables off # 禁止开机启动
chkconfig iptables off #永久关闭防火墙
service iptables status #查看防火状态
service iptables restart #重启防火墙
CentOS-7
systemctl stop firewalld #暂时关闭防火墙
systemctl stop firewalld # 停止防火墙服务
systemctl disable firewalld # 禁止开机启动
systemctl disable firewalld #永久关闭防火墙
systemctl status firewalld #查看防火状态
systemctl enable firewalld #重启防火墙