1、准备服务器,并规划服务器角色
3台 虚拟机Linux
s-hadoop01.lele.com 4G 内存 40G (机子配置较差 1G) NameNode ResourceManager DataNode NodeManager
s-hadoop02.lele.com 2G 内存 40G (1G) DataNode SecondaryNameNode NodeManager
s-hadoop03.lele.com 2G 内存 40G (1G) DataNode NodeManager
生产环境:NameNode 单独一台服务器 ResourceManager与NameNode一般在同一台服务器
SecondaryNameNode与NameNode一定要部署在不同的服务器上
SecondaryNameNode的配置(内存)需要与NameNode保持一致
DataNode与NodeManager同一台服务器
2、安装环境准备
网络准备使用:
(1)、检查受网络管理器管理的网络接口: nmcli dev status或者nmcli connection show
(2)、卸载虚拟机自带网卡(也可以不卸载): 打开 vi /etc/sysconfig/network-scripts/ifcfg-eth33(每个机子都可能不一样,但格式会是“ifcfg-eth数字”),
把ONBOOT=no,改为ONBOOT=yes
修改/etc/yum/pluginconf.d/fastestmirror.conf中的enable,设置为0
sudo yum groupremove "Virtualization"
sudo yum remove libvirt
(3)、自定义静态ip: vim /etc/sysconfig/network-scripts/ifcfg-ens33
内容模版:
TYPE="Ethernet"
BOOTPROTO="static"
IPADDR=192.168.1.126
GATEWAY=192.168.1.1
NETMASK=255.255.255.0
DNS1=192.168.1.1
NM_CONTROLLED=no
DEFROUTE="yes"
PEERDNS="yes"
PEERROUTES="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_PEERDNS="yes"
IPV6_PEERROUTES="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
//这个不能改UUID=66c93861-628b-48ca-a3cb-e50e7cddce0b
DEVICE=ens33
ONBOOT="yes"
(4)、重启网络服务 sudo systemctl restart network.service
(5)、修改dns: nmcli con mod UUID ipv4.dns "114.114.114.114 8.8.8.8"(将UUID改成自己的mac地址)
(6)、dns重生效: nmcli con up UUID(UUID改称自己的mac地址)
IP,主机名以及主机名与IP的映射关系
$ ping s-hadoop01.lele.com
JDK与JAVA_HOME环境变量
javac -version
查询自带的openjdk有哪些
rpm -qa | grep java
然后使用rpm -e --nodeps jdk名称来卸载
配置环境变量:vim /etc/profile
export JAVA_HOME=/opt/modules/jdk1.7.0_67
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
3)时间同步(重点)切换到root用户
a.先选择其中一台作为ntp时间服务器
s-hadoop01.lele.com
安装ntpd服务
# yum -y install ntp
开启ntpd服务
# service ntpd start
# chkconfig ntpd on
# chkconfig ntpd --list | grep ntpd
修改/etc/ntp.conf配置文件
1) 去掉restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap注释,同时修改IP与你的主机IP在同一网段
2)注释掉外部ntp时间服务器
##server 0.centos.pool.ntp.org iburst
##server 1.centos.pool.ntp.org iburst
##server 2.centos.pool.ntp.org iburst
##server 3.centos.pool.ntp.org iburst
3) 添加一下两行内容
server 127.127.1.0 # local clock
fudge 127.127.1.0 stratum 10
# service ntpd restart
验证:
在其他服务器上通过ntpdate命令来进行时间同步
ntpdate -u ip/主机名
同步时,看下防火墙设置
关闭ntp服务器的防火墙
# systemctl stop firewalld.service
禁止防火墙开机启动
systemctl disable firewalld.service
在另外一台上进行同步时间
# ntpdate -u s-hadoop01.lele.com
29 May 09:48:18 ntpdate[1377]: adjust time server 192.168.199.144 offset 0.000066 sec
让BIOS时钟时间与系统时间进行同步(所有服务器上)
# hwclock --localtime
# hwclock --localtime -w
修改配置文件
# vim /etc/sysconfig/ntpd
在首行添加————设置是否允许BIOS与系统时间进行同步。
SYNC_HWCLOCK=yes
b.其他服务器与这台ntp时间服务器进行时间同步
通过crontab定时任务进行
每10分钟进行时间同步
0-59/10 * * * * /usr/sbin/ntpdate -u s-hadoop01.lele.com
4)防火墙关闭
systemctl stop firewalld.service
# systemctl disable httpd.service
# systemctl list-units --type=service | grep firewalld
3、hadoop完全分布式安装
将hadoop文件夹改成普通用户: sudo chown -R brifeng:lele hadoop
先在其中一台服务器上进行解压安装,并修改好配置,然后通过scp分发到其他服务器上
前提:要求所有服务器上的用户名、密码,以及目录保持一致
/opt/modules/hadoop
安装目录
解压安装
修改配置文件
http://hadoop.apache.org/docs/r2.5.2/hadoop-project-dist/hadoop-common/ClusterSetup.html
1) hadoop-env.sh
export JAVA_HOME=/opt/modules/jdk1.7.0_67
export HADOOP_CONF_DIR=/opt/modules/hadoop-2.5.0-cdh5.3.6/etc/hadoop
2)core-site.xml
//@前面是用户名,后面是ip地址或者主机名
//修改的时候要注意ip地址和主机名都要注明,否则连接的就是root用户。。
//以上纯属扯淡
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop.lele.org:8020</value>
<description>The name of the default file system. A URI whose
scheme and authority determine the FileSystem implementation. The
uri's scheme determines the config property (fs.SCHEME.impl) naming
the FileSystem implementation class. The uri's authority is used to
determine the host, port, etc. for a filesystem.</description>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/modules/hadoop-2.5.0-cdh5.3.6/tmp/data/</value>
<description>A base for other temporary directories.</description>
</property>
3)hdfs-site.xml
secondaryNamenode http https
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop.lele.org03:50090</value>
<description>
The secondary namenode http server address and port.
</description>
</property>
<property>
<name>dfs.namenode.secondary.https-address</name>
<value>hadoop.lele.org03:50091</value>
<description>
The secondary namenode HTTPS server address and port.
</description>
</property>
4) mapred-site.xml
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
<description>The runtime framework for executing MapReduce jobs.
Can be one of local, classic or yarn.
</description>
</property>
5) yarn-site.xml
<property>
<description>The hostname of the RM.</description>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop.lele.org02</value>
</property>
<property>
<description>the valid service name should only contain a-zA-Z0-9_ and can not start with numbers</description>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
6)slaves masters
$ vim slaves
配置datanode
namenode@namenode
secondarynamenode@snamenode
datanode@datanode
$ vim masters
配置secondaryNamenode
secondarynamenode@snamenode
7)scp分发
$ rm -rf doc/
$ scp -r hadoop-2.5.0/ [email protected]:/opt/modules/hadoop/
$ scp -r hadoop-2.5.0/ [email protected]:/opt/modules/hadoop/
8)ssh免密码登录设置(针对具体用户起作用)
1) 在各服务器生成公钥、私钥文件
2)分发公钥文件给对方
1)$ ssh-keygen
在用户的home的.ssh目录下生成公钥、私钥文件
id_rsa id_rsa.pub
2)把公钥文件传给对方,并且在对方机器上将公钥文件追写到authorized_keys
免密码登录到本机
$ ssh-copy-id -i localhost
$ssh localhost
$ exit
ssh 免密码登录到其他服务器
$ ssh-copy-id -i s-hadoop01.lele.com
$ ssh-copy-id -i s-hadoop02.lele.com
$ ssh-copy-id -i s-hadoop03.lele.com
9)启动集群
格式化NameNode
$ bin/hdfs namenode -format
Storage directory /opt/modules/hadoop/hadoop-2.5.0/tmp/data/dfs/name has been successfully formatted.(namenode元数据存放目录)
启动集群
1)启动hdfs
在NameNode所在的节点上执行
sbin/start-dfs.sh
NameNode ---> DataNode ---> SecondaryNameNode
2)启动YARN
在ResourceManager所在的节点上执行
sbin/start-yarn.sh
ResourceManager ---> NodeManager
停止:
1)停止HDFS
在NameNode所在的节点上执行
$ sbin/stop-dfs.sh
2)停止YARN
在ResourceManager节点上执行
$ ./stop-yarn.sh
4、通过web页面访问
知识点补充:
1、查看端口:sudo lsof -i:50070 -P
会输出内容,找到PID,然后根据PID杀掉进程
kill掉端口:sudo kill -9 PID