1.hadoop是运行在linux系统之上; 但是也有windows版本的hadoop; 学习的时候使用linux来进行学习;
使用虚拟机虚拟一个linux操作系统出来:(先做好单台服务器的相关配置,然后直接克隆其他节点服务器即可)
1.设置虚拟机的的ip地址;(一般都是设置为静态地址)
第一种操作:安装桌面版的centos系统(自动来获取地址;)
第二种操作 使用静态地址进行网络连接
先查看自己的网卡信息: ip addr
eno16777736 这个网卡的的名称,一般都不要改;因为这个是要对应;
接着输入以下指令修改inet的配置 # vi /etc/sysconfig/network-scripts/ifcfg-eno16777736
查看网络的配置发现网卡没有打开,按下键盘 i 键后修改,将no改为yes。修改完成按下 esc 键,然后输入 :wq 保存退出。
输入指令 # service network restart 重新启动网络服务
查看新的地址:
查看 网络连接情况(一定要能够访问外网)
2.设置单台linux服务器的的防火墙
1.服务器的防火墙的作用:就是阻止外界的非法的访问:
在公司业务服务外部会有服务进行限制; 我们的内部服务都是通过云服务器厂商进行映射进来;云服务会提前进行规则的判断定;-----所以在一个公司业务内部服务中不需要进行防火墙的开启;
2.关闭防火墙的方法:
一般我们的服务器在内容中数关闭防火墙的;防止访问的时候被防火墙拦截;
一般情况:我们不清楚该放行什么端口,所以索性让关上防火墙。
特殊情况:系统已有外部防火墙或第三方防火墙,所以关掉系统自带防火墙
Centos 7版本里默认的防火墙是firewall;每个服务都需要去设置才能放行,因为默认是拒绝。
# firewall-cmd --state
# systemctl status firewalld.service
# systemctl stop firewalld.service
# systemctl start firewalld.service
# systemctl restart firewalld.service
以上操作:都是一次性的操作;重启后就回复了;
# systemctl enable firewalld.service
#systemctl disable firewalld.service
参考:https://www.jb51.net/article/101576.htm
默认是每个服务是允许,需要拒绝的才去限制。
CentOS 7默认使用的是firewall作为防火墙,使用iptables必须重新设置一下
1、直接关闭防火墙
systemctl stop firewalld.service #停止firewall` systemctl systemctl disable firewalld.service #禁止firewall开机启动
2、设置 iptables service
yum -y installiptables-services
如果要修改防火墙配置,如增加防火墙端口3306
vi /etc/sysconfig/iptables
增加规则
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
保存退出后
systemctl restart iptables.service #重启防火墙使配置生效` systemctl enable iptables.service #设置防火墙开机启动
最后重启系统使设置生效即可。
查看防火墙的命令:service iptables status
# 停止防火墙
service iptables stop
# 启动防火墙
service iptables start
# 重启防火墙
service iptables restart
# 永久关闭防火墙
chkconfig iptables off
# 永久关闭后重启
chkconfig iptables on
临时关闭防火墙:service iptables stop (重新启动以后,又自动开启)
永久关闭防火墙:chkconfig iptables off (注意:只有先临时关闭,才可以永久关闭)
两种防火墙的底层原理:
firewalld自身并不具备防火墙的功能,而是和iptables一样需要通过内核的netfilter来实现,也就是说firewalld和 iptables一样,他们的作用都是用于维护规则,而真正使用规则干活的是内核的netfilter,只不过firewalld和iptables的结构以及使用方法不一样罢了。
一般我们都使用第一种就可以了。
默认的时候Centos7-卸载自带的jdk,我们需要对他进行卸载后再进行安装;
Centos7一般都会带有自己的openjdk,我们一般都回用oracle的jdk,所以要卸载
步骤一:查询系统是否以安装jdk
#rpm -qa|grep java
或 #rpm -qa|grep jdk
或 #rpm -qa|grep gcj
或 #rpm -qa|grep gcj
步骤二:卸载已安装的jdk
#rpm -e --nodeps java-1.8.0-openjdk-1.8.0.131-11.b12.el7.x86_64
#rpm -e --nodeps java-1.7.0-openjdk-1.7.0.141-2.6.10.5.el7.x86_64
#rpm -e --nodeps java-1.8.0-openjdk-headless-1.8.0.131-11.b12.el7.x86_64
#rpm -e --nodeps java-1.7.0-openjdk-headless-1.8.0.131-11.b12.el7.x86_64
步骤三:验证一下是还有jdk
#rpm -qa|grep java
#java -version
一般我们就放在usr /local/java文件夹中
tar -zxvf dk-8u144-linux-x64.tar.gz
#环境变量都在这个地方进行配置
export JAVA_HOME=/usr/local/java/jdk1.8.0_291
export CLASSPATH=.: J A V A H O M E / j r e / l i b / r t . j a r : JAVA_HOME/jre/lib/rt.jar: JAVAHOME/jre/lib/rt.jar:JAVA_HOME/lib/dt.jar: J A V A H O M E / l i b / t o o l s . j a r e x p o r t P A T H = JAVA_HOME/lib/tools.jar export PATH= JAVAHOME/lib/tools.jarexportPATH=PATH:$JAVA_HOME/bin
source /etc/profile
Mysql的安装方式:
rpm -qa | grep mysql
wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
如果报错: -bash: wget: 未找到命令
安装插件 yum -y install wget(wget就是给一个地址直接下载)
sudo rpm -ivh mysql-community-release-el7-5.noarch.rpm
sudo yum install mysql-server
mysql -u root
如果报错:
ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’ (2)
原因:原因是/var/lib/mysql的访问权限问题。
chown root /var/lib/mysql/
重启MySQL服务
service mysqld restart
接着登陆设置密码
mysql -u root
use mysql;
update user set password=password(‘123456’) where user=‘root’;
exit;
service mysqld restart
接着设置Root账户远程连接密码,账户和密码都是 root
mysql -u root -p
GRANT ALL PRIVILEGES ON *.* TO root@"%" IDENTIFIED BY “root”;
重启服务器
service mysqld restart
连接mysql的用户名和密码都是 root
关闭防火墙
systemctl stop firewalld.service
一般我们的服务器都和国家的服务器的时间进行同步;后边,节点服务器都是从我们的主服务器中同步时间,这样可以保证一个集群的时间同步;
一、手动修改
还需要把日期改过来
时间要用双引号括起来,否则报错
手动修改会存在一定的时间误差
将时间写入bios避免重启失效。
当我们进行完 Linux 时间的校时后,还需要以 hwclock 来更新 BIOS 的时间,因为每次重新启动的时候,系统会重新由 BIOS 将时间读出来,所以, BIOS 才是重要的时间依据吶。
二、同步网络时间
安装ntp服务命令:
apt-get install ntp 或者 yum install ntp
ntp常用服务器:
中国国家授时中心:210.72.145.44
NTP服务器(上海) :ntp.api.bz
美国:time.nist.gov
复旦:ntp.fudan.edu.cn
微软公司授时主机(美国) :time.windows.com
我们直接使用
ntpdate pool.ntp.org 更新服务器上的时间
NTP池正在为世界各地成百上千万的系统提供服务。 它是绝大多数主流Linux发行版和许多网络设备的默认“时间服务器”。
后边做集群的时候在使用时间定时任务进行更新;
大数据集群,都不是一个机器在工作。需要很多的机器一起工作。在实际的生活中是很多的物理机器(他可以使用磁盘克隆;或者网络分发系统的方式来实现); 但是在虚拟机中我们直接可以通过克隆的方式;
1.先把一个虚拟机(物理机)需要的软件都先安装上;(jdk;mysql等等)
2.关机 poweroff 要把这个系统关闭(虚拟机;物理机)
3.设置机器的机器名字: centos7和centos6不一样;
centos6是修改主机名字
vi /etc/sysconfig/network
centos7 的设置方法:
问题:打开**/etc/sysconfig/network文件,发现为空,手动添加HOSTNAME = ***,没有生效**
这时候使用命令行 hostnamectl set-hostname ** ,来修改hostname
4.开始克隆:
这个地方选择创建新的克隆:不然就是一个连接;还是原来的机器;
5.修改网络地址(因为通过的是克隆出来的,地址也就是一样的;所以在启动的时候不能启动两个;会出现ip地址冲突; 一般我们把克隆出来的机器修改ip地址后,再启动第一台机器;)
如果是centos6还需要删除克隆出来的网卡;
克隆会多出来一块网卡,把第一块网卡删掉,并把第二块网卡的eth1改成eth0
vi /etc/udev/ruXXX/70-XXXnXXX
如果是centos7就不需要;
同样的方法对第三台节点服务器进行设置;
1.开始前的服务准备: 首先hadoop是运行在linux系统之上的(也可以部署windows的hadoop集群)
2.本集群搭建案例,以3节点为例进行搭建,角色分配如下:
hadoop01 NameNode(文件和文件树管理) SecondaryNameNode(监控hdfs的后台管理) ResourceManager (资源管理)
hadoop02 DataNode NodeManager (数据节点(工作节点)管理)
hadoop03 DataNode NodeManager (数据节点(工作节点)管理)
3.服务器的准备:
本案例使用虚拟机服务器来搭建HADOOP集群,所用软件及版本:
Vmware 12.0
Centos 7.5 64bit
6.网络环境准备(配置网卡)
采用NAT方式联网
网关地址:192.168.xx.xx
3个服务器节点IP地址:192.168.xx.110、192.168.xx.120、192.168.xx.130
子网掩码:255.255.255.0
第一种操作:安装桌面版的centos系统(自动来获取地址;)
第二种操作 使用静态地址进行网络连接
先查看自己的网卡信息: ip addr
eno16777736 这个网卡的的名称,一般都不要改;因为这个是要对应;
接着输入以下指令修改inet的配置 # vi /etc/sysconfig/network-scripts/ifcfg-eno16777736
查看ient的配置发现网卡没有打开,按下键盘 i 键后修改,将no改为yes。修改完成按下 esc 键,然后输入 :wq 保存退出。
输入指令 # service network restart 重新启动网络服务
查看新的地址:
查看 网络连接情况(一定要能够访问外网)
同样的方法对其他的三台服务器进行修
4.服务器之间资料互传(scp)
scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的。可能会稍微影响一下速度。当你服务器硬盘变为只读 read only system时,用scp可以帮你把文件移出来。另外,scp还非常不占资源,不会提高多少系统负荷,在这一点上,rsync就远远不及它了。虽然 rsync比scp会快一点,但当小文件众多的情况下,rsync会导致硬盘I/O非常高,而scp基本不影响系统正常使用。
例子:1
从远处复制文件到本地目录
scp [email protected]:/opt/soft/nginx-0.5.38.tar.gz /opt/soft/
这个是通过root用户从192.168.120.204 机器上/opt/soft/ 这个目录中赋值文件nginx-0.5.38.tar.gz 到本地/opt/soft/
Warning: Permanently added ‘192.168.219.110’ (ECDSA) to the list of known hosts.
Warning: Permanently added ‘192.168.219.110’ (ECDSA) to the list of known hosts.
这个是连接 的时候使用的私钥;(重新在来一次即可) 也可以忽略
ssh -q -o “trictHostKeyChecking no” [email protected]
or
ssh -q -o ‘StrictHostKeyChecking no’ -o ‘UserKnownHostsFile /dev/null’ [email protected]
例子:2
从远处复制目录到本地目录
scp -r [email protected]:/opt/soft/mongodb /opt/soft/
从192.168.120.204机器上的/opt/soft/中下载mongodb 目录到本地的/opt/soft/目录来。
-r 递归复制整个目录。
实例3:上传本地文件到远程机器指定目录
scp /opt/soft/nginx-0.5.38.tar.gz [email protected]:/opt/soft/scptest
复制本地opt/soft/目录下的文件nginx-0.5.38.tar.gz 到远程机器192.168.120.204的opt/soft/scptest目录
实例4:上传本地目录到远程机器指定目录
scp -r /opt/soft/mongodb [email protected]:/opt/soft/scptest
本地目录中/opt/soft/mongodb上传到192.168.120.204的/opt/soft/scptest
以上这个方法:可以用来进行文件的下载和上传;但是每次都要输入密码非常的麻烦;
可以通过配置映射(服务之间相互加好友的方式);进行不需要密码登录;
5.免密登录
后边我们要进行配置内容,如果一台一台的进行非常的麻烦;并且还的输入密码;
就想scp的命令一样,每次都是需要输入密码;就是在一个机器上配置,然后分发到其他的节点中去;那就的免密登录;
每一次的都要进行写密码;非常的麻烦;我们想没有密码进行登录;(我们在一个服务器中配置好,然后分发给其他所有服务器;但是这个地方需要密码)
三台虚拟机(IP):
修改三台主机名,以此类推,hadoop01,hadoop02,hadoop03
hostnamectl set-hostname <hostname>
hostnamectl set-hostname hadoop01(hadoop02;hadoop03 等等)
修改完毕后要使用reboot进行重启;
1.在 hadoop01 的 /etc/hosts
文件下添加如下内容;其他服务器的地址和名字;(就相当是我们添加微信一样;加了之后相互就可以发文件了(然后添加私钥,就不需要验证))
相互之间都进行添加;
2.也可以使用上传的方法进行:(通过循环的方法给我们的hadoop02和hadoop03的服务器)
for a in {1..3} ; do scp /etc/hosts hadoop0$a:/etc/hosts ; done
查看有没有修改:
for a in {1..3} ; do ssh hadoop0$a cat /etc/hosts ; done
都已经修改好了;
(其实centos7不用配置映射关系就可以进行传递文件 scp 但是需要密码;)
(1)先各自生成自己的账号跟密码(生成公钥跟私钥):
ssh-keygen 生成公钥和私钥
1.在你的hadoop01上生成公钥和私钥
2.生成hadoop02的公钥和秘钥
3.生成hadoop03的公钥和秘钥(这个里边没有known-hosts 这个文件的原因是没有ssh连接过;hadoop01和hadoop02他们里边都有这个文件的原因是;之前他们互相传递问过文件)
他们的公钥和私钥都在/root/.ssh/(如果没有生成公钥和私钥的时候他们是没有这个文件夹的)
(生成的公钥跟私钥也要告诉自己一份)
ssh-copy-id hadoop01
ssh-copy-id hadoop02
ssh-copy-id hadoop03
也就是在每一台服务器中执行;
使用同样的方法对hadoop02 和hadoop03进行相互添加
都执行完毕就可以了;
hadoop01给hadoop02传文件没有需要密码;
scp -r /usr/local/java/apache-tomcat-9.0.46 hadoop02:/usr/local/
hadoop02给hadoop03传递文件不需要输入密码;
scp -r /usr/local/apache-tomcat-9.0.46 hadoop03:/usr/local/
同样道理hadoop01给hadoop03也可以免密操作:
scp -r /usr/local/java/apache-tomcat-9.0.46 hadoop03:/usr/local/
到这里就可以进行集群的免密操作了;后边有继续同样的方法进行即可;
6.集群时间同步
时间的更新我们可以使用同时执行的方式:
但是这种方法其实就是给每个服务发送了更新数据的语句,从服务器中进行更新;
我们要做一个主服务器;他定时更新时间服务(使用服务器的时间,也可以用本地时间);然后让其他的服务器节点的时间走我们这个服务的时间;定时可以主服务器进行同步;
例子:
三台服务器分别是hadoop01,hadoop02、hadoop03,这里是以01作为时间服务器(服务端),02、03作为客户端同步01的时间。
1.检查hadoop01 安装时间ntp
rpm -qa|grep ntp
2.修改ntp配置文件
vi /etc/ntp.conf
修改1(授权192.168.219.0-192.168.219.255网段上的所有机器可以从这台机器上查询和同步时间)
这里的网段要根据自己的配置,比如我的网关是192.168.219.1,那配置就如下
修改2(集群在局域网中,不使用其他互联网上的时间;如果要使用互联网上的时间;pool.net.org)
添加3(当该节点丢失网络连接,依然可以采用本地时间作为时间服务器为集群中的其他节点提供时间同步)
server 127.127.1.0
fudge 127.127.1.0 stratum 10
3.修改/etc/sysconfig/ntpd 文件
vi /etc/sysconfig/ntpd
(让硬件时间与系统时间一起同步)
SYNC_HWCLOCK=yes
4.重新启动ntpd服务
查看下ntpd的状态;
service ntpd status
启动ntpd服务:
service ntpd start
查看启动的状态:
设置ntpd服务开机启动
chkconfig ntpd on
5.其他机器配置(必须root用户)
(1)在其他机器配置1分钟(或者时间自己设置)与时间服务器同步一次
分别在hadoop02;和hadoop03中进行设置定时任务(他们对应的就是同一个服务hadoop01);
*/1 * * * * /usr/sbin/ntpdate hadoop01
(2) 分别在hadoop02;和hadoop03中设置时间;查看他在一分钟后更新;
hadoop02
hadoop03
说明:测试的时候可以将分钟调整为1分钟,节省时间。
hadoop集群的初级的配置信息基本就完成。