大数据----2.基础环境搭建

大数据hadoop环境搭建

一、linux环境搭建

1.linux环境

1.hadoop是运行在linux系统之上; 但是也有windows版本的hadoop; 学习的时候使用linux来进行学习;

​ 使用虚拟机虚拟一个linux操作系统出来:(先做好单台服务器的相关配置,然后直接克隆其他节点服务器即可)

​ 1.设置虚拟机的的ip地址;(一般都是设置为静态地址)

​ 第一种操作:安装桌面版的centos系统(自动来获取地址;)

image-20210526122821106

image-20210526124535346

第二种操作 使用静态地址进行网络连接

先查看自己的网卡信息: ip addr

image-20210526152344716

eno16777736 这个网卡的的名称,一般都不要改;因为这个是要对应;

接着输入以下指令修改inet的配置 # vi /etc/sysconfig/network-scripts/ifcfg-eno16777736

image-20210526155755030

查看网络的配置发现网卡没有打开,按下键盘 i 键后修改,将no改为yes。修改完成按下 esc 键,然后输入 :wq 保存退出。

输入指令 # service network restart 重新启动网络服务

image-20210526160302256

查看新的地址:

image-20210526160416213

查看 网络连接情况(一定要能够访问外网)

image-20210526160502097

2.设置单台linux服务器的的防火墙

​ 1.服务器的防火墙的作用:就是阻止外界的非法的访问:

image-20210530154338490

在公司业务服务外部会有服务进行限制; 我们的内部服务都是通过云服务器厂商进行映射进来;云服务会提前进行规则的判断定;-----所以在一个公司业务内部服务中不需要进行防火墙的开启;

2.关闭防火墙的方法:

一般我们的服务器在内容中数关闭防火墙的;防止访问的时候被防火墙拦截;
一般情况:我们不清楚该放行什么端口,所以索性让关上防火墙。
特殊情况:系统已有外部防火墙或第三方防火墙,所以关掉系统自带防火墙

第一种:防火墙firewall

Centos 7版本里默认的防火墙是firewall;每个服务都需要去设置才能放行,因为默认是拒绝。

1、查看防火墙运行状态
     # firewall-cmd --state

image-20210531160643847

 # systemctl status firewalld.service

image-20210531160804662

2、关闭防火墙
      # systemctl stop firewalld.service

image-20210531161125399

3、开启防火墙
      # systemctl start firewalld.service

image-20210531161224991

4、重启防火墙
    # systemctl restart firewalld.service

image-20210531162041020

以上操作:都是一次性的操作;重启后就回复了;

5**、在开机时启动一个服务****(这里启动防火墙)**
      # systemctl enable firewalld.service

image-20210531163325343

6、在开机时禁止一个服务(这里禁止防火墙)
      #systemctl disable firewalld.service

image-20210531162554471

第二种:iptables(这种是在centos6的上面操作)

参考: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

image-20210531170832166

# 停止防火墙

service iptables stop

image-20210531171010301

# 启动防火墙

service iptables start

image-20210531171102583

# 重启防火墙

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 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

安装JDK8

步骤一:下载linux版本的jdk并上传到linux上

image-20210602175636567

image-20210602175509746

在这里插入图片描述

一般我们就放在usr /local/java文件夹中

步骤二:解压jdk包

tar -zxvf dk-8u144-linux-x64.tar.gz

步骤三:编辑/etc/profile文件,配置环境变量

#环境变量都在这个地方进行配置
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

image-20210602180005915

步骤四:生效profile

source /etc/profile
5安装数据库mysql

Mysql的安装方式:

1.先检查系统是否装有mysql

rpm -qa | grep mysql

2.下载mysql的repo源

wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm

如果报错: -bash: wget: 未找到命令

安装插件 yum -y install wget(wget就是给一个地址直接下载)

3.安装 mysql-community-release-el7-5.noarch.rpm包

sudo rpm -ivh mysql-community-release-el7-5.noarch.rpm

**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/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;

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 firewalld.service

6.设置时间:

一般我们的服务器都和国家的服务器的时间进行同步;后边,节点服务器都是从我们的主服务器中同步时间,这样可以保证一个集群的时间同步;

一、手动修改

  1. date命令:查看当前时间

img

  1. date -s 时分秒 :修改时间

img

还需要把日期改过来

  1. date -s 完整日期时间(YYYY-MM-DD hh:mm[:ss]):修改日期、时间

img

时间要用双引号括起来,否则报错

手动修改会存在一定的时间误差

  1. hwclock -w

img

将时间写入bios避免重启失效。

当我们进行完 Linux 时间的校时后,还需要以 hwclock 来更新 BIOS 的时间,因为每次重新启动的时候,系统会重新由 BIOS 将时间读出来,所以, BIOS 才是重要的时间依据吶。

二、同步网络时间

  1. 检查系统是否安装ntp服务

安装ntp服务命令:

apt-get install ntp 或者 yum install ntp

  1. ntpdate 服务器IP:同步服务器时间

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发行版和许多网络设备的默认“时间服务器”。

image-20210602181645208

后边做集群的时候在使用时间定时任务进行更新;

7.克隆集群

大数据集群,都不是一个机器在工作。需要很多的机器一起工作。在实际的生活中是很多的物理机器(他可以使用磁盘克隆;或者网络分发系统的方式来实现); 但是在虚拟机中我们直接可以通过克隆的方式;

1.先把一个虚拟机(物理机)需要的软件都先安装上;(jdk;mysql等等)

2.关机 poweroff 要把这个系统关闭(虚拟机;物理机)

3.设置机器的机器名字: centos7和centos6不一样;

centos6是修改主机名字
vi /etc/sysconfig/network

image-20210603094822135

centos7 的设置方法:

问题:打开**/etc/sysconfig/network文件,发现为空,手动添加HOSTNAME = ***,没有生效**

image-20210603094931327

这时候使用命令行 hostnamectl set-hostname ** ,来修改hostname

image-20210603095335526

4.开始克隆:

image-20210603100030985

这个地方选择创建新的克隆:不然就是一个连接;还是原来的机器;

image-20210603100219928

5.修改网络地址(因为通过的是克隆出来的,地址也就是一样的;所以在启动的时候不能启动两个;会出现ip地址冲突; 一般我们把克隆出来的机器修改ip地址后,再启动第一台机器;)

image-20210603104254217

如果是centos6还需要删除克隆出来的网卡;

克隆会多出来一块网卡,把第一块网卡删掉,并把第二块网卡的eth1改成eth0
vi /etc/udev/ruXXX/70-XXXnXXX

如果是centos7就不需要;

image-20210603105731924

同样的方法对第三台节点服务器进行设置;

image-20210603111053400

二 、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. 网关地址:192.168.xx.xx

  3. 3个服务器节点IP地址:192.168.xx.110、192.168.xx.120、192.168.xx.130

  4. 子网掩码:255.255.255.0

第一种操作:安装桌面版的centos系统(自动来获取地址;)

image-20210526122821106

image-20210526124535346

第二种操作 使用静态地址进行网络连接

先查看自己的网卡信息: ip addr

image-20210526152344716

eno16777736 这个网卡的的名称,一般都不要改;因为这个是要对应;

接着输入以下指令修改inet的配置 # vi /etc/sysconfig/network-scripts/ifcfg-eno16777736

image-20210526155755030

查看ient的配置发现网卡没有打开,按下键盘 i 键后修改,将no改为yes。修改完成按下 esc 键,然后输入 :wq 保存退出。

输入指令 # service network restart 重新启动网络服务

image-20210526160302256

查看新的地址:

image-20210526160416213

查看 网络连接情况(一定要能够访问外网)

image-20210526160502097

同样的方法对其他的三台服务器进行修

image-20210603115808866

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/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.

image-20210605130749247

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 递归复制整个目录。

image-20210605165716782

image-20210605170303870

实例3:上传本地文件到远程机器指定目录

scp /opt/soft/nginx-0.5.38.tar.gz root@192.168.120.204:/opt/soft/scptest

复制本地opt/soft/目录下的文件nginx-0.5.38.tar.gz 到远程机器192.168.120.204的opt/soft/scptest目录

image-20210605171357515

image-20210605171458501

实例4:上传本地目录到远程机器指定目录

scp -r /opt/soft/mongodb root@192.168.120.204:/opt/soft/scptest

本地目录中/opt/soft/mongodb上传到192.168.120.204的/opt/soft/scptest

image-20210605172045327

image-20210605172120261

以上这个方法:可以用来进行文件的下载和上传;但是每次都要输入密码非常的麻烦;

可以通过配置映射(服务之间相互加好友的方式);进行不需要密码登录;

5.免密登录

后边我们要进行配置内容,如果一台一台的进行非常的麻烦;并且还的输入密码;

就想scp的命令一样,每次都是需要输入密码;就是在一个机器上配置,然后分发到其他的节点中去;那就的免密登录;

每一次的都要进行写密码;非常的麻烦;我们想没有密码进行登录;(我们在一个服务器中配置好,然后分发给其他所有服务器;但是这个地方需要密码)

环境

三台虚拟机(IP):

  • 192.168.219.110
  • 192.168.219.120
  • 192.168.219.130

1.修改主机名

修改三台主机名,以此类推,hadoop01,hadoop02,hadoop03

hostnamectl set-hostname <hostname>
hostnamectl set-hostname hadoop01(hadoop02;hadoop03 等等)

修改完毕后要使用reboot进行重启;

2.修改映射关系

1.在 hadoop01 的 /etc/hosts 文件下添加如下内容;其他服务器的地址和名字;(就相当是我们添加微信一样;加了之后相互就可以发文件了(然后添加私钥,就不需要验证))

image-20210605232815916

相互之间都进行添加;

2.也可以使用上传的方法进行:(通过循环的方法给我们的hadoop02和hadoop03的服务器)

for a in {1..3} ; do scp /etc/hosts hadoop0$a:/etc/hosts ; done

image-20210605234109807

查看有没有修改:

for a in {1..3} ; do ssh hadoop0$a cat /etc/hosts ; done

image-20210605234838739

都已经修改好了;

(其实centos7不用配置映射关系就可以进行传递文件 scp 但是需要密码;)

3.服务器之间的免密登录:

(1)先各自生成自己的账号跟密码(生成公钥跟私钥):
ssh-keygen 生成公钥和私钥

1.在你的hadoop01上生成公钥和私钥

image-20210606211759340

2.生成hadoop02的公钥和秘钥

image-20210606212034100

3.生成hadoop03的公钥和秘钥(这个里边没有known-hosts 这个文件的原因是没有ssh连接过;hadoop01和hadoop02他们里边都有这个文件的原因是;之前他们互相传递问过文件)

image-20210606213519413

他们的公钥和私钥都在/root/.ssh/(如果没有生成公钥和私钥的时候他们是没有这个文件夹的)

(2)相互告诉对方自己的公钥和秘钥

(生成的公钥跟私钥也要告诉自己一份)

ssh-copy-id hadoop01
ssh-copy-id hadoop02
ssh-copy-id hadoop03

也就是在每一台服务器中执行;

image-20210606220216000

使用同样的方法对hadoop02 和hadoop03进行相互添加

image-20210606220435880

都执行完毕就可以了;

(3)测试免密:

hadoop01给hadoop02传文件没有需要密码;

scp -r /usr/local/java/apache-tomcat-9.0.46 hadoop02:/usr/local/

image-20210606221247992

image-20210606221326280

hadoop02给hadoop03传递文件不需要输入密码;

scp -r /usr/local/apache-tomcat-9.0.46 hadoop03:/usr/local/

image-20210606221600278

同样道理hadoop01给hadoop03也可以免密操作:

scp -r /usr/local/java/apache-tomcat-9.0.46 hadoop03:/usr/local/

image-20210606222103638

到这里就可以进行集群的免密操作了;后边有继续同样的方法进行即可;

6.集群时间同步

时间的更新我们可以使用同时执行的方式:

image-20210604221915862

但是这种方法其实就是给每个服务发送了更新数据的语句,从服务器中进行更新;

我们要做一个主服务器;他定时更新时间服务(使用服务器的时间,也可以用本地时间);然后让其他的服务器节点的时间走我们这个服务的时间;定时可以主服务器进行同步;

例子:

三台服务器分别是hadoop01,hadoop02、hadoop03,这里是以01作为时间服务器(服务端),02、03作为客户端同步01的时间。

1.检查hadoop01 安装时间ntp

rpm -qa|grep ntp

image-20210607173909827

2.修改ntp配置文件

vi /etc/ntp.conf

修改1(授权192.168.219.0-192.168.219.255网段上的所有机器可以从这台机器上查询和同步时间)

这里的网段要根据自己的配置,比如我的网关是192.168.219.1,那配置就如下

image-20210607174138619

修改2(集群在局域网中,不使用其他互联网上的时间;如果要使用互联网上的时间;pool.net.org)

image-20210607174546529

添加3(当该节点丢失网络连接,依然可以采用本地时间作为时间服务器为集群中的其他节点提供时间同步)

server 127.127.1.0
fudge 127.127.1.0 stratum 10

image-20210607174913395

3.修改/etc/sysconfig/ntpd 文件

vi /etc/sysconfig/ntpd

(让硬件时间与系统时间一起同步)

SYNC_HWCLOCK=yes

image-20210607175721031

4.重新启动ntpd服务

​ 查看下ntpd的状态;

service ntpd status

image-20210607180340608

启动ntpd服务:

service ntpd start

image-20210607180442367

查看启动的状态:

image-20210607180556320

设置ntpd服务开机启动

chkconfig ntpd on

image-20210607180701006

5.其他机器配置(必须root用户)

(1)在其他机器配置1分钟(或者时间自己设置)与时间服务器同步一次

分别在hadoop02;和hadoop03中进行设置定时任务(他们对应的就是同一个服务hadoop01);

*/1 * * * * /usr/sbin/ntpdate hadoop01

image-20210607182256930

(2) 分别在hadoop02;和hadoop03中设置时间;查看他在一分钟后更新;

hadoop02

image-20210607182634589

hadoop03

image-20210607182816501

说明:测试的时候可以将分钟调整为1分钟,节省时间。

hadoop集群的初级的配置信息基本就完成。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值