hadoop集群搭建

hadoop集群搭建

1.准备虚拟机

1.准备一台最小化安装的虚拟机

2.修改配置文件

vi /etc/sysconfig/network-scripts/ifcfg-env33
onboot=yes

网卡接口配置

ONBOOT是指明在系统启动时是否激活网卡,只有在激活状态的网卡才能去连接网络,进行网络通讯

修改临时id

注意:新创建虚拟机不能使用vim,需要yum云安装

​ 说清楚情况阿,一般linux默认不带vim的,都是vi。。。vim需要自己安装

3.重启network服务

systemctl restart network

4.获取IP地址(图形化界面连接)

ip addr show
ifconfig

5.连接fianlshell

6.下载linux系统环境

[root@hadoop100 ~]# yum install -y epel-release
[root@hadoop100 ~]# yum install -y psmisc nc net-tools rsync vim lrzsz ntp libzstd openssl-static tree iotop git

​ ----使用yum安装需要虚拟机可以正常上网,yum安装前可以先测试下虚拟机联网情况

[root@hadoop100 ~]# ping www.baidu.com
PING www.baidu.com (14.215.177.39) 56(84) bytes of data.
64 bytes from 14.215.177.39 (14.215.177.39): icmp_seq=1 ttl=128 time=8.60 ms
64 bytes from 14.215.177.39 (14.215.177.39): icmp_seq=2 ttl=128 time=7.72 ms

7.创建新用户并修改用户密码

useradd atguigu
passwd atguigu

8.修改atguigu用户权限(方便执行root权限的命令 加sudo)

vim /etc/sudoers
或者   visudo
atguigu   ALL=(ALL)   NOPASSWD:ALL

设置 普通用户具有root权限 并且设置无密码登录

id atguigu 查看用户所属组

9.在atguigu下创建两个文件夹并修改所属主和所属组

/opt 系统分配的安装目录

module 解压安装目录

software jar包安装位置

同一目录下创建多个文件夹 空格直接加路径

创建多级目录 -P

递归修改所属权 -R

mkdir /opt/module  /opt/software
chown -R atguigu:atguigu /opt/module  /opt/software

10.关闭防火墙

systemctl stop firewalld
systemctl disable firewalld

11.修改本机静态IP

vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
BOOTPROTO=static
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.159.102
UUID=14a6ebe4-ae2e-44b3-bb14-1340cdc82a00
PREFIX=24
GATEWAY=192.168.159.2
DNS1=192.168.159.2

BOOTPROTO=static

IPADDR=192.168.159.102 ip地址

PREFIX=24 255.255.255.0
GATEWAY=192.168.159.2 网关
DNS1=192.168.159.2 解析域名

12.修改静态hostname

hostnamectl --static set-hostname hadoop102
vim /etc/hostname
hadooop102

13.修改hosts文件(配置映射)

vim /etc/hosts

添加内容

192.168.159.100 hadoop100
192.168.159.101 hadoop101
192.168.159.102 hadoop102
192.168.159.103 hadoop103
192.168.159.104 hadoop104
192.168.159.105 hadoop105
192.168.159.106 hadoop106
192.168.159.107 hadoop107
192.168.159.108 hadoop108

或编写脚本添加

for((i=100,i<110,i++))
do
	echo "192.168.159.$i hadoop$i">>/etc/hosts
done

14.关机、快照、克隆

1.修改静态ip

2.修改克隆机名hostname

3.关闭防护墙

4.重启克隆机(使配置文件生效)

15.修改windows主机hosts文件

C:\windows\system32\drivers\etc\hosts

192.168.159.100 hadoop100
192.168.159.101 hadoop101
192.168.159.102 hadoop102
192.168.159.103 hadoop103
192.168.159.104 hadoop104
192.168.159.105 hadoop105
192.168.159.106 hadoop106
192.168.159.107 hadoop107
192.168.159.108 hadoop108

2.在102部署JDK和Hadoop环境

1.卸载现有虚拟机(如果有)
rpm -qa |grep -i java |xargs -nl sudo rpm -e --nodeps

-qa 查rpm包

-i 忽略大小写

xargs 将查寻结果传到后边

-nl 1个1个卸载

-e 卸载

2.导入JDK和Hadoop的jar包到/opt/software
3.解压jar包到module
tar -zxvf  jdk-8u212-linux-x64.tar.gz  -C /opt/module
tar -zxvf  hadoop-3.1.3.tar.gz  -C /opt/module

-C 指定解压到目录

4.配置环境变量

​ <1.>新建/etc/profile.d/my_env.sh

sudo vim /etc/profilre.d/my_env.sh

​ <2>提升环境变量为全局变量(随处可以调用)

#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_212
export PATH=$PATH:$JAVA_HOME/bin

#HADOOP_HOME
export HADOOP=/opt/module/hadoop-3.1.3
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin

​ <3>保存退出 :wq ==shift zz

5.让修改配置文件生效
source /etc/profile     或重启

3.配置远程同步脚本xsync

3.1scp

​ 安全拷贝(全部拷贝)

scp -r /opt/module/hadoop-3.1.3    hadoop103:/opt 
命令  递归  文件目录				目标路径

3.2rsync

​ 远程同步,用于备份和镜像 速度快(只对差异文件更新)

rsync -av  /opt/module/hadoop-3.1.3    atguigu@hadoop103:/opt
     -a归档拷贝							目的用户@主机:路径
     -v显示详情

3.3xsync

​ 脚本实现循环复制文件到所有节点上

语法:xsync 要发送的目录

<1>在bin目录下创建xsync文件(任意路径,最后发送到/bin)可以直接在==/home/atguigu/bin==下
cd /home/atguigu
mkdir bin
cd bin
vim xsync

$# 获取参数个数 用于循环

#!/bin/bash
#1. 判断参数个数
if [ $# -lt 1 ]
then
  echo Not Enough Arguement!
  exit;
fi
#2. 遍历集群所有机器
for host in hadoop102 hadoop103 hadoop104
do
  echo ====================  $host  ====================
  #3. 遍历所有目录,挨个发送
  for file in $@
  do
    #4 判断文件是否存在
    if [ -e $file ]
    then
      #5. 获取父目录
      pdir=$(cd -P $(dirname $file); pwd)
      #6. 获取当前文件的名称
      fname=$(basename $file)
      ssh $host "mkdir -p $pdir"
      rsync -av $pdir/$fname $host:$pdir
    else
      echo $file does not exists!
    fi
  done
done
<2>修改脚本执行权
chmod +x xsync
<3>将脚本复制到/bin目录中,以便全局调用
sudo cp xsync /bin/
<4>删除当前xsync
rm xsync

4.免密登录

想要root用户下的资料也可以免密共享,需要在root用户下也要分发.ssh文件

4.1生成密钥对

ssh-keygen -t rsa
ssh -keygen -t ecdsa

其他默认(敲空格)

4.2将公钥拷贝到要免密登录的目标机器上

<1>逐一发送

ssh-copy-id hadoop102
ssh-copy-id hadoop103
ssh-copy-id hadoop104

注意:在每台机器的atguigu用户下都要生成并分发密钥对

<2>.ssh文件夹下(~/.ssh)的文件功能解释

known_hosts记录ssh访问过计算机的公钥(public key)
id_rsa生成的私钥
id_rsa.pub生成的公钥
authotized_keys存放授权过的乌木登录服务器公钥

<3>集体发送(第一次需要密码)三台机器都要发送一次

xsync ~/.ssh

5.集群部署规划

HDFS nn dn znn

YARN rm nm

2nn是备份nn 不能和nn装在同一台机器上

recourseManger占资源较大 也不能和nn、2nn装在一台机器上

hadoop102hadoop103hadoop104
HDFSNameNodeDataNodeDataNodesecondaryNamenodeDataNode
YARNNodeManagerRecourseManagerNodeManagerNodeManager

6.集群配置

/opt/module/hadoop-3.1.3/etc/hadoop

6.1修改core-site.xml

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
	<!-- 指定NameNode的地址 -->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://hadoop102:9820</value>
</property>
<!-- 指定hadoop数据的存储目录 -->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/module/hadoop-3.1.3/data</value>
</property>

<!-- 配置HDFS网页登录使用的静态用户为atguigu -->
    <property>
        <name>hadoop.http.staticuser.user</name>
        <value>atguigu</value>
</property>

<!-- 配置该atguigu(superUser)允许通过代理访问的主机节点 -->
    <property>
        <name>hadoop.proxyuser.atguigu.hosts</name>
        <value>*</value>
</property>
<!-- 配置该atguigu(superUser)允许通过代理用户所属组 -->
    <property>
        <name>hadoop.proxyuser.atguigu.groups</name>
        <value>*</value>
</property>
</configuration>

6.2修改hdfs-site.xml

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
	<!-- nn web端访问地址-->
	<property>
        <name>dfs.namenode.http-address</name>
        <value>hadoop102:9870</value>
    </property>
	<!-- 2nn web端访问地址-->
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>hadoop104:9868</value>
    </property>
</configuration>

6.3修改mapreduce-site.xml

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
	<!-- 指定MapReduce程序运行在Yarn上 -->
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>

6.4修改yarn-site.xml

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
	<!-- 指定MR走shuffle -->
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
</property>
<!-- 指定ResourceManager的地址-->
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>hadoop103</value>
</property>
<!-- 环境变量的继承 -->
    <property>
        <name>yarn.nodemanager.env-whitelist</name>
        <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
</property>
<!-- yarn容器允许分配的最大最小内存 -->
    <property>
        <name>yarn.scheduler.minimum-allocation-mb</name>
        <value>512</value>
    </property>
    <property>
        <name>yarn.scheduler.maximum-allocation-mb</name>
        <value>4096</value>
</property>
<!-- yarn容器允许管理的物理内存大小 -->
    <property>
        <name>yarn.nodemanager.resource.memory-mb</name>
        <value>4096</value>
</property>
<!-- 关闭yarn对物理内存和虚拟内存的限制检查 -->
    <property>
        <name>yarn.nodemanager.pmem-check-enabled</name>
        <value>false</value>
    </property>
    <property>
        <name>yarn.nodemanager.vmem-check-enabled</name>
        <value>false</value>
    </property>
</configuration>

6.5修改workers

hadoop102
hadoop103
hadoop104

7.同步配置文件及资源启动

7.1.同步配置文件

xsync /opt/module/hadoop-3.1.3/etc

7.2.格式化nn在102上执行

如果集群是第一次启动

需要在hadoop102节点格式化NameNode(注意格式化NameNode,会产生新的集群id,导致NameNode和DataNode的集群id不一致,集群找不到已往数据。如果集群在运行过程中报错,需要重新格式化NameNode的话,一定要先停止namenode和datanode进程,并且要删除所有机器的data和logs目录,然后再进行格式化。)

hdfs namenode -format

7.3.启动集群资源

102上启动HDFS

start-dfs.sh

103上启动YARN(配置了Recoursemanager)

start-yarn.sh

7.4.查看网址

hadoop102:9820

hadoop103:8088

7.5.集群测试

<1.>上传文件到集群 hadoop fs -put

小文件直接上传

大文件上传tar包

hadoop fs -mkdir /input
hadoop fs -put $HADOOP_HOME/wcinput/word.txt /input

<2>文件存放位置

/opt/module/hadoop-3.1.3/data/dfs/data/current/BP-938951106-192.168.10.107-1495462844069/current/finalized/subdir0/subdir0

<3>文件以块的形式存储,可以拼接>>

cat blk_1073741836>>tmp.tar.gz

<4>下载文件 hadoop fs -get

hadoop fs -get /jdk-8u212-linux-x64.tar.gz ./

<5>执行wordcount程序

hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-
				文件路径
3.1.3.jar wordcount /input /output
					输入文件  输出位置(不允许存在)

8.集群启动/停止方式

8.1各个服务组件逐一启动/停止

<1>分别启动/停止HDFS组件

hdfs --daemon start/stop namenode/datanode/secondarynamenode

<2>分开启动YARN

yarn --daemon start/stop  resourcemanager/nodemanager

8.2各个模块分开启动/停止

<1>整体启动HDFS

start-dfs.sh    /stop-dfs.sh

<2>整体启动YARN

start-yarn.sh     /stop-yarn.sh

9.配置历史服务器

方便查看历史运行情况

9.1配置mapred-site.xml

<!-- 历史服务器端地址 -->
<property>
    <name>mapreduce.jobhistory.address</name>
    <value>hadoop102:10020</value>
</property>

<!-- 历史服务器web端地址 -->
<property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>hadoop102:19888</value>
</property>

9.2分发配置

$HADOOP_HOME=/opt/module/hadoop-3.1.3

xsync $HADOOP_HOME/etc/hadoop/mapred-site.xml

9.3在102启动历史服务器

mapred --daemon start historyserver

查看历史服务器是否启动

jps

9.4查看jobHistory

http://hadoop102:19888/jobhistory

10.配置日志聚集

10.1日志聚集使用

日志聚集概念:应用运行完成以后,将程序运行日志信息上传到HDFS系统上。

日志聚集功能好处:可以方便的查看到程序运行详情,方便开发调试。

注意:开启日志聚集功能,需要重新启动NodeManager 、ResourceManager和HistoryServer。

10.2配置yarn-site.xml

<!-- 开启日志聚集功能 -->
<property>
    <name>yarn.log-aggregation-enable</name>
    <value>true</value>
</property>
<!-- 设置日志聚集服务器地址 -->
<property>  
    <name>yarn.log.server.url</name>  
    <value>http://hadoop102:19888/jobhistory/logs</value>
</property>
<!-- 设置日志保留时间为7天 -->
<property>
    <name>yarn.log-aggregation.retain-seconds</name>
    <value>604800</value>
</property>

10.3分发配置

xsync $HADOOP_HOME/etc/hadoop/yarn-site.xml

10.4重启NodeManager、RecourseManager和HistoryServer

stop-yarn.sh
mapred --daemon stop historyserver
start-yarn.sh
mapred --daemon start historyserver

11.编写hadoop集群常用脚本

11.1查看三台服务器Java进程脚本:jpsall

cd /home/atguigu/bin
vim jpsall
#!/bin/bash
for host in hadoop102 hadoop103 hadoop104
do 
	echo ========== $host ==========
	ssh $host jps $@ |grep -v Jps
done
chmod +x jpsall

12.集群时间同步

12.1时间服务器配置

(必须使用root用户,拥有修改系统时间的权限)

<1>查看所有节点ntpd服务状态和开机自启动状态

[atguigu@hadoop102 ~]$ sudo systemctl status ntpd

[atguigu@hadoop102 ~]$ sudo systemctl is-enabled ntpd

<2>在所有节点关闭ntp服务和自启动

[atguigu@hadoop102 ~]$ sudo systemctl stop ntpd

[atguigu@hadoop102 ~]$ sudo systemctl disable ntpd

<3>修改hadoop102的ntp.conf配置文件

[atguigu@hadoop102 ~]$ sudo vim /etc/ntp.conf

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

#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap

为restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap

​ b)修改2(集群在局域网中,不使用其他互联网上的时间)

server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst
为
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst

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

server 127.127.1.0  
fudge 127.127.1.0 stratum 10

<4>修改hadoop102的/etc/sysconfig/ntpd 文件

[atguigu@hadoop102 ~]$ sudo vim /etc/sysconfig/ntpd

​ 增加内容如下(让硬件时间与系统时间一起同步)

SYNC_HWCLOCK=yes

<5>重新启动ntpd服务

[atguigu@hadoop102 ~]$ sudo systemctl start ntpd

<6>设置ntpd服务开机启动

[atguigu@hadoop102 ~]$ sudo systemctl enable ntpd

12.2其他机器配置

必须是root用户

<1>在其他机器配置1分钟与时间服务器同步一次

编写定时任务

sudo crontab -e
*/1 * * * * /usr/sbin/ntpdate hadoop102

<2>修改任意时间

sudo date -s "2017-9-1 11:51:06"

13.翻车修复

停止集群所有进程

102

stop-dfs.sh

103

stop-yarn.sh

或者在2,3,4上同时执行

killall -9 java

在3台节点上删除数据文件

rm -rf /opt/module/hadoop-3.1.3/data /opt/module/hadoop-3.1.3/logs

从格式化开始重新来

<think>好的,用户想了解如何搭建Hadoop集群的详细步骤和配置。首先,我需要回忆之前学过的Hadoop集群搭建知识,确保步骤正确。记得Hadoop集群通常分为完全分布式模式,需要多台机器,比如hadoop102、hadoop103、hadoop104这样的命名。用户提供的引用里提到了设置这些节点,并测试SSH连接,还有上传安装包。可能这些是关键的步骤。 接下来,我应该按照逻辑分步骤讲解。首先准备环境,包括服务器、Java安装、主机名和hosts文件的配置,以及SSH免密登录的设置。这些都是搭建集群的基础。然后,安装Hadoop,解压安装包,配置环境变量。接下来是核心的配置文件修改,比如hadoop-env.sh、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml以及workers文件。每个配置文件的作用需要简要说明,比如core-site.xml设置NameNode地址,hdfs-site.xml配置副本数等。 配置完成后,需要同步到其他节点,这里可以用scp命令或者rsync。然后初始化HDFS,启动集群,最后验证是否成功,比如jps查看进程,或者访问Web界面。可能用户在实际操作中会遇到问题,比如SSH连接失败,端口占用,或者配置文件错误,这些常见问题应该提及解决方案。 另外,用户的问题可能涉及到具体的配置参数,比如副本数设置成多少合适,或者资源管理器的配置,这些需要根据集群规模给出建议。比如小型集群副本数可以设为2,但生产环境通常3。还有安全模式的问题,可能需要关闭防火墙或者配置SELinux。 需要确保所有的命令和路径都是正确的,比如JAVA_HOME的路径是否正确,Hadoop的安装目录是否一致。同时,用户可能需要知道如何验证集群是否正常工作,比如运行一个测试的MapReduce作业,或者检查日志文件。 最后,生成相关问题的时候,应该围绕用户可能进一步关心的问题,比如配置参数优化、添加节点、安全配置、性能调优等。这些能帮助用户更深入理解集群管理和维护。</think>### Hadoop集群搭建步骤详解 #### 一、环境准备(3节点示例) 1. **服务器规划** - hadoop102(NameNode + DataNode) - hadoop103(ResourceManager + DataNode) - hadoop104(SecondaryNameNode + DataNode) 2. **基础配置** - 所有节点安装JDK 8+并配置环境变量: ```bash export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 ``` - 配置主机名和/etc/hosts文件: ```bash 192.168.1.102 hadoop102 192.168.1.103 hadoop103 192.168.1.104 hadoop104 ``` - 配置SSH免密登录: ```bash ssh-keygen -t rsa ssh-copy-id hadoop102 ssh-copy-id hadoop103 ssh-copy-id hadoop104 ``` #### 二、Hadoop安装与配置 1. **解压安装包** ```bash tar -zxvf hadoop-3.3.6.tar.gz -C /opt/module/ ``` 2. **配置环境变量** ```bash export HADOOP_HOME=/opt/module/hadoop-3.3.6 export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin ``` 3. **修改核心配置文件** - `etc/hadoop/hadoop-env.sh`: ```bash export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 ``` - `etc/hadoop/core-site.xml`: ```xml <configuration> <property> <name>fs.defaultFS</name> <value>hdfs://hadoop102:8020</value> </property> </configuration> ``` - `etc/hadoop/hdfs-site.xml`: ```xml <configuration> <property> <name>dfs.replication</name> <value>3</value> </property> </configuration> ``` #### 三、集群同步与启动 1. **分发配置到所有节点** ```bash scp -r /opt/module/hadoop-3.3.6 hadoop103:/opt/module/ scp -r /opt/module/hadoop-3.3.6 hadoop104:/opt/module/ ``` 2. **初始化HDFS** ```bash hdfs namenode -format ``` 3. **启动集群** ```bash start-dfs.sh # 启动HDFS start-yarn.sh # 启动YARN ``` #### 四、验证集群状态 1. **进程验证** ```bash jps # hadoop102应显示NameNode/DataNode # hadoop103应显示ResourceManager/NodeManager ``` 2. **Web界面验证** - HDFS状态:`http://hadoop102:9870` - YARN状态:`http://hadoop103:8088` #### 五、常见问题解决 1. **SSH连接失败** - 检查防火墙状态:`systemctl stop firewalld` - 验证公钥是否完整复制到`~/.ssh/authorized_keys` 2. **端口冲突** - 使用`netstat -tunlp | grep 8020`检查默认端口占用情况 3. **HDFS无法格式化** - 删除所有节点的`/tmp/hadoop-*`目录后重试[^1]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值