HADOOP安装操作

一、准备三台服务器并修改hosts文件

 进入服务器,输入以下命令

vim /etc/hosts

在文件后面添加服务器的ip及其对应的映射名

190.*.1  hadoop1

190.*.2  hadoop2

190.*.3  hadoop3

注意:若不进行此项配置,进入hdfs的UI界面后会只有一个datanode

二、服务器操作

(一)安装jdk(三台都需要)

自己根据网络教程(Linux下jdk的安装与环境变量配置)去下载安装,配置环境变量(略)

检查路径jdk是否安装成功,键入命令:java -version

如果出现了版本信息,则恭喜配置成功; 

 (二)安装SSH服务(三台都需要下载ssh)

1.查看有无ssh

输入”ssh -V“,若返回ssh版本号则有ssh :

[root@01 bin]# ssh -V
OpenSSH_8.0p1, OpenSSL 1.1.1k  FIPS 25 Mar 2021

 若没有安装ssh则通过以下安装:

"sudo apt-get install openssh-server"

2.ssh服务是否启动

输入"sudo ps -e |grep ssh"-->回车-->有sshd,说明ssh服务已经启动,如果没有启动,输入"sudo service ssh start"-->回车-->ssh服务就会启动。

3.建立ssh无密码登录本机

 ssh生成密钥有rsa和dsa两种生成方式,默认情况下采用rsa方式。

(1)创建ssh-key,这里我们采用rsa方式

ssh-keygen -t rsa -P ""   //(P是要大写的,后面跟"")

 (注:回车后会在~/.ssh/下生成两个文件:id_rsa和id_rsa.pub这两个文件是成对出现的)

(2)进入~/.ssh/目录下,将id_rsa.pub追加到authorized_keys授权文件中,开始是没有authorized_keys文件的

cat id_rsa.pub >> authorized_keys

(3)将master的ssh公钥复制到每个从节点的authorized_keys文件

在配置Hadoop集群的SSH免密登录时,通常只需要设置从主节点(通常是NameNode或ResourceManager所在的节点)到其他所有节点(DataNodes或NodeManagers)的单向无密码SSH登录。这是因为主节点需要能够无密码地连接到集群中的每个工作节点来启动服务、执行脚本等。

具体来说,如果你有一个主节点(假设为master)和多个从节点(例如slave1, slave2等),你需要确保:

  • 从master可以无密码SSH登录到slave1。
  • 从master可以无密码SSH登录到slave2。
  • 等等...

这种情况下,你只需在master节点上生成SSH密钥对,并将公钥复制到每个从节点的~/.ssh/authorized_keys文件中。

方法一:

直接把master的公钥复制到从节点下的uthorized_keys中,保存

方法二:

通过命令

ssh-copy-id 主机2

然后 ,在远程服务器上,确保SSH相关文件和目录具有正确的权限:

chmod 700 ~/.ssh

chmod 644 ~/.ssh/authorized_keys 

 把公钥复制到相应的主机后,通过命令

# ssh 地址 来查看是否能连接成功 例:

ssh 190.*.3

(三)集群部署规划

①NameNode和SecondaryNameNode不要安装在同一台服务器上。NN和2NN的关系就好像是NN的补充是2NN,如果安装在同一个机器上,机器一挂,NN和2NN全挂,完全不需要2NN对NN的补充

②ResourceManager也很消耗内存,不要和NameNode、SecondaryNameNode配置在同一台机器上

所以安装规划如下

hadoop1hadoop2hadoop3
HDFSNameNode
DataNode
DataNodeSecondaryNameNode
DataNode
YARNNodeMangerResourceManager
NodeManger
NodeManager

(四)配置文件(三台都需要)

Hadoop配置文件分为两类:默认配置文件和自定义文件 

自定义文件主要有

core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml,四个文件都放在hadoop目录下的etc/hadoop路径,可以根据实际需要进行配置

文件说明
core-site.xml核心配置文件
hdfs-site.xmlhdfs配置文件
yarn-site.xmlyarn配置文件
mapred-site.xmlmr配置文件

1.配置核心文件 core-site.xml

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

<configuration>
    <!-- 指定 NameNode 的地址 hdfs://190.*.1:8020 为客户端访问的集群端口--> 
    <property> 
        <name>fs.defaultFS</name> 
        <value>hdfs://hadoop1:8020</value> 
    </property> 
 
    <!-- 指定 hadoop 数据的存储目录 --> 
    <property> 
        <name>hadoop.tmp.dir</name> 
        <value>/home/document/HadoopDatas</value> 
    </property> 
 
    <!-- 配置 HDFS 网页登录使用的静态用户为 lnnu --> 
    <!-- <property> 
            <name>hadoop.http.staticuser.user</name> 
            <value>lnnu</value> 
        </property> --> 
</configuration>

2.配置hdfs文件 hdfs-site.xml

<?xml version="1.0" encoding="UTF-8"?> 
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?> 
 
<configuration> 
 <!-- NameNode web 端访问地址 9870是访问hdfs端口-->
  <property>
    <name>dfs.namenode.http-address</name>
    <value>hadoop1:9870</value>
  </property>
  <!-- SecondaryNameNode web 端访问地址-->
  <property>
    <name>dfs.namenode.secondary.http-address</name>
    <value>hadoop3:9868</value>
  </property>

</configuration>

3.配置yarn文件 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>hadoop2</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> 
</configuration>

 4.配置mr文件 mapred-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>

 5.配置works文件

配置workers文件,在${HADOOP_HOME}/hadoop-3.1.3/etc/hadoop/下

vim ${HADOOP_HOME}/hadoop-3.1.3/etc/hadoop/

追加

hadoop1

hadoop2

hadoop3

注意:文件中不允许有空格,也不允许有空行。因为集群无法识别你的空格和空行是否为一台机器

 三、启动集群

1. 如果集群是第一次启动,需要在 hadoop1 节点格式化 NameNode

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

hdfs namenode -format

2.启动HDFS 

sbin/start-dfs.sh

 3.启动YARN

因为YARN配置在了hadoop2上,所以到hadoop2上启动,ResourceManager

在hadoop2上运行

sbin/start-yarn.sh

四、文件分发脚本设置

命令一 —— scp、 

 例:

scp -r /opt/module/jdk1.8.0_212 lnnu@hadoop103:/opt/module

 scp(secure copy)是一个基于SSH协议在网络中安全传输文件的命令行工具。

  • -r 选项表示递归复制整个目录。
  • /opt/module/jdk1.8.0_212 是源目录,即你要复制的本地目录。
  • lnnu@hadoop103 是目标主机的用户名和主机名或IP地址。
  • :/opt/module 是目标路径,在远程主机上你希望将文件复制到的位置。

这条命令的作用是将本地机器上的 /opt/module/jdk1.8.0_212 目录及其所有内容复制到名为 hadoop103 的远程主机上,并放置在 /opt/module 目录下。

命令二 —— rsync、

例: 

rsync -av hadoop-3.1.3/ lnnu@hadoop103:/opt/module/hadoop-3.1.3/

rsync 是一个非常强大的同步工具,可以用来备份和镜像数据,同时保持符号链接、权限等信息。 

 

  • -a 选项表示归档模式,它会保留符号链接、文件权限、用户组信息等。
  • -v 选项表示详细模式,输出过程中会显示更多的信息。
  • hadoop-3.1.3/ 是源目录,注意这里的斜杠很重要,它告诉 rsync 复制目录的内容而不是目录本身。
  • lnnu@hadoop103 同样是指定目标主机的用户名和主机名或IP地址。
  • :/opt/module/hadoop-3.1.3/ 是目标路径,在远程主机上的指定位置。

这条命令的作用是将本地的 hadoop-3.1.3/ 目录下的内容同步到远程主机 hadoop103 上的 /opt/module/hadoop-3.1.3/ 目录。

命令三 —— 修改后的rsync(xsync)、

xsync 并不是一个标准的 Unix/Linux 命令,而是一个通常在 Hadoop 集群管理中自定义的脚本,用于将文件或目录从一个节点同步到集群中的其他所有节点。这个脚本利用了 rsync 或者 scp 来实现跨主机的数据复制,并且通常会结合 SSH 密钥认证来简化身份验证过程。

1.安装rsync(自己百度)

2.新建xsync文件添加环境变量,或者在环境变量目录下新建xsync

 若通过,环境变量目录下新建xsync方式需要先查看环境变量目录

echo $PATH

 3.编写分发脚本

#!/bin/bash 
 
#1. 判断参数个数 
if [ $# -lt 1 ] 
then 
    echo Not Enough Arguement! 
    exit; 
fi 
#2. 遍历集群所有机器 
for host in hadoop1 hadoop2 hadoop3 
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

 4.给与执行权限

chmod +x xsync

 5.自己测试

命令:

xsync 目录地址

例:

xsync /path/to/file_or_directory

 看是否在其他主机上能 收到文件

参考:

超详解Hadoop集群环境配置,步步附有截图,一篇讲解清楚_hadoop集群配置-优快云博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值