大数据
-
2023年4月27日发(作者:此网站的安全证书有问题)⼤数据----2.基础环境搭建
⼤数据hadoop环境搭建
⼀、linux环境搭建
环境
是运⾏在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.关闭防⽕墙的⽅法:
⼀般我们的服务器在内容中数关闭防⽕墙的;防⽌访问的时候被防⽕墙拦截;
⼀般情况:我们不清楚该放⾏什么端⼝,所以索性让关上防⽕墙。
特殊情况:系统已有外部防⽕墙或第三⽅防⽕墙,所以关掉系统⾃带防⽕墙
第⼀种:防⽕墙firewall
Centos 7版本⾥默认的防⽕墙是firewall;每个服务都需要去设置才能放⾏,因为默认是拒绝。
1、查看防⽕墙运⾏状态
# firewall-cmd --state
# systemctl status e
2、关闭防⽕墙
# systemctl stop e
3、开启防⽕墙
# systemctl start e
4、重启防⽕墙
# systemctl restart e
以上操作:都是⼀次性的操作;重启后就回复了;
5**、在开机时启动⼀个服务****(这⾥启动防⽕墙)**
# systemctl enable e
6、在开机时禁⽌⼀个服务(这⾥禁⽌防⽕墙)
#systemctl disable e
第⼆种:iptables(这种是在centos6的上⾯操作)
默认是每个服务是允许,需要拒绝的才去限制。
CentOS 7默认使⽤的是firewall作为防⽕墙,使⽤iptables必须重新设置⼀下
1、直接关闭防⽕墙
systemctl stop e #停⽌firewall` systemctl systemctl disable e #禁⽌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 e #重启防⽕墙使配置⽣效` systemctl enable e #设置防⽕墙开机启动
最后重启系统使设置⽣效即可。
查看防⽕墙的命令: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的结构以及使⽤⽅法不⼀样罢了。
⼀般我们都使⽤第⼀种就可以了。
3.安装jdk和配置环境变量
默认的时候Centos7-卸载⾃带的jdk,我们需要对他进⾏卸载后再进⾏安装;
卸载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 7.x86_64
#rpm -e --nodeps 7.x86_64
#rpm -e --nodeps 7.x86_64
#rpm -e --nodeps 7.x86_64
步骤三:验证⼀下是还有jdk
#rpm -qa|grep java
#java -version
安装JDK8
步骤⼀:下载linux版本的jdk并上传到linux上
⼀般我们就放在usr /local/java⽂件夹中
步骤⼆:解压jdk包
tar -zxvf
步骤三:编辑/etc/profile⽂件,配置环境变量
#环境变量都在这个地⽅进⾏配置
export JAVA_HOME=/usr/local/java/jdk1.8.0_291
export CLASSPATH=.:JAVA_HOME/lib/:
JAVAOME/jre/lib/rt.jar:JAVAOME/lib/tools.jarexportPATH=
HH
PATH:$JAVA_HOME/bin
步骤四:⽣效profile
source /etc/profile
5安装数据库mysql
Mysql的安装⽅式:
1.先检查系统是否装有mysql
rpm -qa | grep mysql
2.下载mysql的repo源
如果报错: -bash: wget: 未找到命令
安装插件 yum -y install wget(wget就是给⼀个地址直接下载)
3.安装 包
sudo rpm -ivh
**4.**安装MySQL
sudo yum install mysql-server
5.重置MySQL密码
mysql -u root
如果报错:
ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/lib/mysql/’ (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;
6.重启MySQL服务
service mysqld restart
接着设置Root账户远程连接密码,账户和密码都是 root
mysql -u root -p
GRANT ALL PRIVILEGES ON *.* TO root@"%" IDENTIFIED BY “root”;
重启服务器
service mysqld restart
7.使⽤外⽹⼯具连接MySQL
连接mysql的⽤户名和密码都是 root
关闭防⽕墙
systemctl stop e
6.设置时间:
⼀般我们的服务器都和国家的服务器的时间进⾏同步;后边,节点服务器都是从我们的主服务器中同步时间,这样可以保证⼀个集群的时间
同步;
⼀、⼿动修改
1. date命令:查看当前时间
2. date -s 时分秒 :修改时间
还需要把⽇期改过来
3. date -s 完整⽇期时间(YYYY-MM-DD hh:mm[:ss]):修改⽇期、时间
时间要⽤双引号括起来,否则报错
⼿动修改会存在⼀定的时间误差
4. hwclock -w
将时间写⼊bios避免重启失效。
当我们进⾏完 Linux 时间的校时后,还需要以 hwclock 来更新 BIOS 的时间,因为每次重新启动的时候,系统会重新由 BIOS 将时间读出
来,所以, BIOS 才是重要的时间依据吶。
⼆、同步⽹络时间
1. 检查系统是否安装ntp服务
安装ntp服务命令:
apt-get install ntp 或者 yum install ntp
3. ntpdate 服务器IP:同步服务器时间
ntp常⽤服务器:
中国国家授时中⼼:210.72.145.44
NTP服务器(上海) :
美国:
复旦:
微软公司授时主机(美国) :
我们直接使⽤
ntpdate 更新服务器上的时间
NTP池正在为世界各地成百上千万的系统提供服务。 它是绝⼤多数主流Linux发⾏版和许多⽹络设备的默认“时间服务器”。
后边做集群的时候在使⽤时间定时任务进⾏更新;
7.克隆集群
⼤数据集群,都不是⼀个机器在⼯作。需要很多的机器⼀起⼯作。在实际的⽣活中是很多的物理机器(他可以使⽤磁盘克隆;或者⽹络分发
系统的⽅式来实现); 但是在虚拟机中我们直接可以通过克隆的⽅式;
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就不需要;
同样的⽅法对第三台节点服务器进⾏设置;
⼆ 、hadoop集群搭建
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.⽹络环境准备(配置⽹卡)
1. 采⽤NAT⽅式联⽹
2. ⽹关地址:
3. 3个服务器节点IP地址:.110、.120、.130
4. ⼦⽹掩码: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 root@192.168.120.204:/opt/soft/ /opt/soft/
这个是通过root⽤户从192.168.120.204 机器上/opt/soft/ 这个⽬录中赋值⽂件 到本地/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” root@192.168.0.12
or
ssh -q -o ‘StrictHostKeyChecking no’ -o ‘UserKnownHostsFile /dev/null’ root@192.168.0.12
例⼦:2
从远处复制⽬录到本地⽬录
scp -r root@192.168.120.204:/opt/soft/mongodb /opt/soft/
从192.168.120.204机器上的/opt/soft/中下载mongodb ⽬录到本地的/opt/soft/⽬录来。
-r 递归复制整个⽬录。
实例3:上传本地⽂件到远程机器指定⽬录
scp /opt/soft/ root@192.168.120.204:/opt/soft/scptest
复制本地opt/soft/⽬录下的⽂件 到远程机器192.168.120.204的opt/soft/scptest⽬录
实例4:上传本地⽬录到远程机器指定⽬录
scp -r /opt/soft/mongodb root@192.168.120.204:/opt/soft/scptest
本地⽬录中/opt/soft/mongodb上传到192.168.120.204的/opt/soft/scptest
以上这个⽅法:可以⽤来进⾏⽂件的下载和上传;但是每次都要输⼊密码⾮常的⿇烦;
可以通过配置映射(服务之间相互加好友的⽅式);进⾏不需要密码登录;
5.免密登录
后边我们要进⾏配置内容,如果⼀台⼀台的进⾏⾮常的⿇烦;并且还的输⼊密码;
就想scp的命令⼀样,每次都是需要输⼊密码;就是在⼀个机器上配置,然后分发到其他的节点中去;那就的免密登录;
每⼀次的都要进⾏写密码;⾮常的⿇烦;我们想没有密码进⾏登录;(我们在⼀个服务器中配置好,然后分发给其他所有服务器;但是这个
地⽅需要密码)
环境
三台虚拟机(IP):
192.168.219.110
192.168.219.120
192.168.219.130
1.修改主机名
修改三台主机名,以此类推,hadoop01,hadoop02,hadoop03
hostnamectl set-hostname
hostnamectl set-hostname hadoop01(hadoop02;hadoop03 等等)
修改完毕后要使⽤reboot进⾏重启;
2.修改映射关系
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 但是需要密码;)
3.服务器之间的免密登录:
(1)先各⾃⽣成⾃⼰的账号跟密码(⽣成公钥跟私钥):
ssh-keygen ⽣成公钥和私钥
1.在你的hadoop01上⽣成公钥和私钥
2.⽣成hadoop02的公钥和秘钥
3.⽣成hadoop03的公钥和秘钥(这个⾥边没有known-hosts 这个⽂件的原因是没有ssh连接过;hadoop01和hadoop02他们⾥边都有
这个⽂件的原因是;之前他们互相传递问过⽂件)
他们的公钥和私钥都在/root/.ssh/(如果没有⽣成公钥和私钥的时候他们是没有这个⽂件夹的)
(2)相互告诉对⽅⾃⼰的公钥和秘钥
(⽣成的公钥跟私钥也要告诉⾃⼰⼀份)
ssh-copy-id hadoop01
ssh-copy-id hadoop02
ssh-copy-id hadoop03
也就是在每⼀台服务器中执⾏;
使⽤同样的⽅法对hadoop02 和hadoop03进⾏相互添加
都执⾏完毕就可以了;
(3)测试免密:
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/
修改1(授权192.168.219.0-192.168.219.255⽹段上的所有机器可以从这台机器上查询和同步时间)
这⾥的⽹段要根据⾃⼰的配置,⽐如我的⽹关是192.168.219.1,那配置就如下
修改2(集群在局域⽹中,不使⽤其他互联⽹上的时间;如果要使⽤互联⽹上的时间;)
添加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集群的初级的配置信息基本就完成。
-
防火墙关闭后重启又开启了