Hadoop集群的搭建

◇◆丶佛笑我妖孽 提交于 2019-12-20 22:38:47

1、Hadoop集群搭建

1.1 虚拟机环境

VMware Workstation Pro 15.0
Centos 6.5 64bit
内存4G,硬盘50G,采用NAT方式联网。
安装好linux
/boot 200M
/swap 2g
/ 剩余

1.2 安装JDK(以root为例)

1.2.1卸载已有JDK

(1)查询系统是否安装JDK:

命令:rpm -qa | grep java

(2)如果安装的版本低于1.7,卸载该JDK:

root用户命令:rpm -e 软件包路径

(3)查看JDK安装路径:

命令:which java
1.2.2安装JDK

(1)上传jdk安装包 :
jdk-8u171-linux-x64.tar.gz
(2)解压安装包到指定目录:
tar -zxvf jdk-8u171-linux-x64.tar.gz -C /root/apps
(3)配置系统环境变量:
到系统配置文件中添加JAVA_HOME

vi /etc/profile

在profile文件中添加

export JAVA_HOME=/usr/local/soft/jdk1.8.0_171
export PATH=$PATH:$JAVA_HOME/bin

(4)刷新配置

source /etc/profile

(5) 检查安装是否成功

java -version

1.3 关闭防火墙,同步时间

1.3.1关闭防火墙

(1)查看防火墙状态

service iptables status

(2)关闭防火墙

service iptables stop

(3)查看防火墙开机启动状态

chkconfig iptables --list

(4)关闭防火墙开机启动

chkconfig iptables off
1.3.2 同步时间

(1)手动同步集群各机器时间

date -s "2019-12-20 10:10:10" 
yum install ntpdate

(2)网络同步时间

ntpdate cn.pool.ntp.org 

1.4 设置IP,改主机名,改网卡脚本文件

1.4.1 修改IP
编辑vim /etc/sysconfig/network-scripts/ifcfg-eth0

改成

DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.78.78
PREFIX=24
GATEWAY=192.168.78.2
DNS1=114.114.114.114
NAME="eth0"
1.4.2 修改主机名
编辑   vim /etc/sysconfig/network
改     HOSTNAME=新主机名
1.4.3改网卡脚本文件(新虚拟机不需要)
vim /etc/udev/rules.d/70-persistent-net.rules
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:CG:56:12:23:35", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:50:56:31:c7:25", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"

第一行删除
第二行最后NAME=“eth1”改成NAME=“eth0”

关闭虚拟机进行虚拟机克隆,每克隆一台需要重复上述步骤。

1.5 配置IP、主机名映射

配置/etc/hosts

命令: vi /etc/hosts    或    vim /etc/hosts

192.168.78.78     master
192.168.78.79     node1
192.168.78.80     node2

将hosts文件拷贝到node1和node2节点
命令:

scp /etc/hosts node1:/etc/hosts
scp /etc/hosts node2:/etc/hosts

可选操作

1、 创建一个一般用户,给他配置密码
useradd 用户名
passwd 密码

  1. 配置这个用户为sudoers
    vim /etc/sudoers
    在root ALL=(ALL) ALL
    添加 用户名 ALL=(ALL) NOPASSWD:ALL
    保存时wq!强制保存

1.6 配置免密登陆

(1) 生成密钥对

ssh-keygen -t rsa                三次回车

(2)发送公钥到本机

  ssh-copy-id hadoop102     输入一次密码

(3)分别ssh登陆一下所有虚拟机

   ssh hadoop103
   exit
   ssh hadoop104
   exit

(4)把/home/atguigu/.ssh 文件夹发送到集群所有服务器

   ssh-copy-id -i node1 
   ssh-copy-id -i node2

(5)实现主节点master本地免密码登录

 首先进入到/root 命令:
 cd  /root/.ssh
 然后将公钥写入本地执行命令:
  cat ./id_rsa.pub >> ./authorized_keys

1.7 在主节点上安装Hadoop

将hadoop的jar包先上传到虚拟机/usr/local/soft目录下,主节点。可以使用xshell拖拽.
解压:tar -zxvf hadoop-2.6.0.tar.gz 解压完后会出现 hadoop-2.6.0的目录

hadoop目录结构如下:
bin:Hadoop最基本的管理脚本和使用脚本的目录,这些脚本是sbin目录下管理脚本的基础实现,用户可以直接使用这些脚本管理和使用Hadoop。
etc:Hadoop配置文件所在的目录,包括core-site,xml、hdfs-site.xml、mapred-site.xml等从Hadoop1.0继承而来的配置文件和yarn-site.xml等Hadoop2.0新增的配置文件。
include:对外提供的编程库头文件(具体动态库和静态库在lib目录中),这些头文件均是用C++定义的,通常用于C++程序访问HDFS或者编写MapReduce程序。
lib:该目录包含了Hadoop对外提供的编程动态库和静态库,与include目录中的头文件结合使用。
libexec:各个服务对用的shell配置文件所在的目录,可用于配置日志输出、启动参数(比如JVM参数)等基本信息。
sbin:Hadoop管理脚本所在的目录,主要包含HDFS和YARN中各类服务的启动/关闭脚本。
share:Hadoop各个模块编译后的jar包所在的目录。

1.8 Hadoop配置文件修改

Hadoop安装主要就是配置文件的修改,一般在主节点进行修改,完毕后scp下发给其他各个从节点机器。

首先配置hadoop-env.sh,yarn-env.sh,mapred-env.sh文件,配置Java_HOME
在每个文件第二行添加 export JAVA_HOME=/usr/local/soft/jdk1.8.0_171

1.8.1. hadoop-env.sh

文件中设置的是Hadoop运行时需要的环境变量。JAVA_HOME是必须设置的,即使我们当前的系统中设置了JAVA_HOME,它也是不认识的,因为Hadoop即使是在本机上执行,它也是把当前的执行环境当成远程服务器。
vi hadoop-env.sh
export JAVA_HOME=/usr/local/soft/jdk1.8.0_171

1.8.2. core-site.xml

hadoop的核心配置文件,有默认的配置项core-default.xml。
core-default.xml与core-site.xml的功能是一样的,如果在core-site.xml里没有配置的属性,则会自动会获取core-default.xml里的相同属性的值。

<configuration>
<!-- 指定HDFS中NameNode的地址 -->
<!-- 用于设置Hadoop的文件系统,由URI指定 -->
    <property>
            <name>fs.defaultFS</name>
            <value>hdfs://master:9000</value>
    </property>
    <!-- 配置Hadoop的临时目录,默认/tmp/hadoop-${user.name} -->
    <!-- 指定Hadoop运行时产生文件的存储目录 -->
    <property>
            <name>hadoop.tmp.dir</name>
            <value>/usr/local/soft/hadoop-2.6.0/tmp</value>
    </property>
    <property>
             <name>fs.trash.interval</name>
             <value>1440</value>
    </property>
1.8.3. hdfs-site.xml

HDFS的核心配置文件,有默认的配置项hdfs-default.xml。
hdfs-default.xml与hdfs-site.xml的功能是一样的,如果在hdfs-site.xml里没有配置的属性,则会自动会获取hdfs-default.xml里的相同属性的值。

<configuration>
    <!-- secondary namenode 所在主机的ip和端口->
    <property>
 		 <name>dfs.namenode.secondary.http-address</name>
  		 <value>192.168.78.78:50090</value>
    </property>
    <!-- 指定HDFS副本的数量 -->
     <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
    <property>
        <name>dfs.permissions</name>
        <value>false</value>
    </property>
</configuration>

1.8.4. mapred-site.xml

MapReduce的核心配置文件,有默认的配置项mapred-default.xml。
mapred-default.xml与mapred-site.xml的功能是一样的,如果在mapred-site.xml里没有配置的属性,则会自动会获取mapred-default.xml里的相同属性的值。

修改 mapred-site.xml(将mapred-site.xml.template 复制一份为 mapred-site.xml
命令:cp mapred-site.xml.template mapred-site.xml)

<configuration>
<!-- 指定mr运行时框架,这里指定在yarn上,默认是local -->
   <property>
		<name>mapreduce.framework.name</name>
		<value>yarn</value>
	</property>
	  <!-- 历史服务器端地址 -->
    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>node1:10020</value>
    </property>  
    <!-- 历史服务器web端地址 -->
	<property>  
		<name>mapreduce.jobhistory.webapp.address</name>  
		<value>master:19888</value>  
	</property> 
</configuration>

1.8.5. yarn-site.xml

YARN的核心配置文件,有默认的配置项yarn-default.xml。
yarn-default.xml与yarn-site.xml的功能是一样的,如果在yarn-site.xml里没有配置的属性,则会自动会获取yarn-default.xml里的相同属性的值。

<configuration>
<!-- 指定YARN的老大(ResourceManager)的地址 -->
        <property>
     		<name>yarn.resourcemanager.hostname</name>
			<value>master</value>
	  </property>
	  <!-- NodeManager上运行的附属服务。需配置成mapreduce_shuffle,才可运行MapReduce程序默认值:"" -->
	 <property>
		<name>yarn.nodemanager.aux-services</name>
		<value>mapreduce_shuffle</value>
	 </property>
	   <!-- 日志聚集功能使能 -->
	 <property>
		<name>yarn.log-aggregation-enable</name>
		<value>true</value>
	 </property>
	   <!-- 日志保留时间设置7天 -->
	 <property>
		<name>yarn.log-aggregation.retain-seconds</name>
		<value>604800</value>
	 </property>
</configuration>

1.8.6. slaves

slaves文件里面记录的是集群主机名。一般有以下两种作用:
一是:配合一键启动脚本如start-dfs.sh、stop-yarn.sh用来进行集群启动。这时候slaves文件里面的主机标记的就是从节点角色所在的机器。
二是:可以配合hdfs-site.xml里面dfs.hosts属性形成一种白名单机制。
dfs.hosts指定一个文件,其中包含允许连接到NameNode的主机列表。必须指定文件的完整路径名。如果值为空,则允许所有主机。例如:

删除原来的所有内容,修改为如下 
node1
node2

那么所有在slaves中的主机才可以加入的集群中。

1.9. Hadoop环境变量

编辑环境变量的配置文件:
vi /etc/profile

export HADOOP_HOME=/usr/local/soft/hadoop-2.6.0
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

保存配置文件,刷新配置文件:
source /etc/profile

将hadoop的安装目录分别拷贝到其他子节点

scp -r /usr/local/soft/hadoop-2.6.0 node1:/usr/local/soft/
scp -r /usr/local/soft/hadoop-2.6.0 node2:/usr/local/soft/

2.0. 格式化Namenode

  hdfs namenode -format

2.1启动集群

如果集群是第一次启动,需要格式化NameNode(注意格式化之前,一定要先停止上次启动的所有namenode和datanode进程,然后再删除tmp和log数据)
启动集群后不要轻易在格式化,经常格式化容易改变DataNode的ID和主节点的ID不同,后面启动集群时只能启动namenode,DataNode无法启动,这时需要修改字节DataNode的ID与主节点一致。

在配置了namenode和Resourcemanager机器上分别启动

start-dfs.sh    
start-yarn.sh 

注意:NameNode和ResourceManger如果不是同一台机器,不能在NameNode上启动 YARN,应该在ResouceManager所在的机器上启动YARN。

2.2 关闭集群

stop-dfs.sh
stop-yarn.sh

2.3 启动历史服务器

sbin/mr-jobhistory-daemon.sh start historyserver
查看历史服务器是否启动
jps
查看JobHistory
关闭:
sbin/mr-jobhistory-daemon.sh stop historyserver

2.4日志聚集概念

应用运行完成以后,将程序运行日志信息上传到HDFS系统上。
日志聚集功能好处:可以方便的查看到程序运行详情,方便开发调试。
注意:开启日志聚集功能,需要重新启动NodeManager 、ResourceManager和HistoryManager。

验证hdfs:

NameNode http://192.168.78.78:50070/ 默认50070.
ResourceManager http://192.168.1.80:8088/ 默认 8088.

可以登录浏览器地址:192.168.78.78:50070 (ip地址是master的地址)
看到下面页面证明 hdfs装好了
在这里插入图片描述

如果第一次启动失败了,请重新检查配置文件或者哪里步骤少了。

stop-dfs.sh
stop-yarn.sh
再次重启的时候
需要手动将每个节点的tmp目录删除:
rm -rf /usr/local/soft/hadoop-2.6.0/tmp
然后执行将namenode格式化
在主节点执行命令:
./bin/hdfs namenode -format

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!