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 密码
- 配置这个用户为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
来源:CSDN
作者:小白Tate
链接:https://blog.csdn.net/qq_41580613/article/details/103637470