当前位置: 首页 > news >正文

Hadoop - 本地安装 完全分布式安装 集群配置 xsync分发脚本

目录

一、准备条件

1.安装JDK

2.下载Hadoop安装包

二、开始本地安装 

三、Hadoop运行模式

四、完全分布式安装

1.准备3台客户机

2.安装JDK并分发 scp  rsync xsync

方法一:scp(secure copy)安全拷贝

方法二:rsync远程同步工具

方法三:xsync

ssh免密登录

3.集群配置

4.群起集群并测试


 

一、准备条件

1.安装JDK

若没有安装JDK可以查看之前zk的博客,前半段有讲解如何安装JDK:Zookeeper - 本地安装与参数配置


 

2.下载Hadoop安装包

下载地址,这里咱们用的是3.1.3版本:Index of /dist/hadoop/common/hadoop-3.1.3

4541eb6b3f52416d83eccbf6f094fc50.png

下载完成后传进Linux中即可:

d50f2f4daf364a2485b0819d61de5da9.png


 

 

二、开始本地安装 

开始解压:

tar zxvf hadoop-3.1.3.tar.gz -C /opt/module/

然后咱们进去修改配置,这里咱们把 pwd 的目录路径复制一下:

e2b491ecb6224e758124c2f01c278cf2.png

 进入修改配置文件,这里每个人的文件名可能不会相同,如果JDK是按照我之前的博客配置的话直接复制即可,不然要找到自己的文件,然后写进去:

sudo vim /etc/profile.d/java.sh

把一下内容追加进去: 

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

fc540f89b3ae40728a5359eb5cbf0636.png

上面的是之前配置 JDK 时的环境变量,下面是现在配置的 Hadoop 环境变量。

保存退出后别忘了 source 一下:

source /etc/profile

这时候咱们输入 hadoop 看下效果,这里在输入的时候已经可以使用 tab 键来自动补全了:

hadoop

成功效果如下,只截取了一部分:  

48f330f853754b299a2b8e617ab71a65.png

安装完成。


 

 

三、Hadoop运行模式

Hadoop运行模式包括:本地模式、伪分布式模式以及完全分布式模式。

本地模式:单机运行,只是用来演示一下官方案例。生产环境不用。

伪分布式模式:也是单机运行,但是具备Hadoop集群的所有功能,一台服务器模拟一个分布式的环境。个别缺钱的公司用来测试,生产环境不用。

完全分布式模式:多台服务器组成分布式环境。生产环境使用。 


 

 

四、完全分布式安装

1.准备3台客户机

这一步就不多说了,记得关闭防火墙、使用静态IP、和主机名称。这里我三台的名字分别为 hadoop102 、 hadoop103和 hadoop104 。


 

2.安装JDK并分发 scp  rsync xsync

没安装的话可以看之前的博客(zk的安装中有JDK的安装流程):Zookeeper - 本地安装与参数配置

这里只需要在咱们的 hadoop102 上面安装完成即可,103和104咱们可以用点手段拷贝过去。 

方法一:scp(secure copy)安全拷贝

scp可以实现服务器与服务器之间的数据拷贝。(from server1 to server2),其基本语法如下:

scp    -r      $pdir/$fname             $user@$host:$pdir/$fname
命令   递归     要拷贝的文件路径/名称        目的地用户@主机:目的地路径/名称

 需要注意的是我这里在hadoop102、hadoop103、hadoop104都已经创建好的/opt/module、           /opt/software两个目录,而且都是 root:root :

293fb3034ab649318e1e8d37e79efcc4.png

在 hadoop102 上,将hadoop102中/opt/module/jdk1.8.0_212目录拷贝到hadoop103上:

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

在 hadoop103 上,将hadoop102中/opt/module/hadoop-3.1.3目录拷贝到hadoop103上:

scp -r root@hadoop102:/opt/module/hadoop-3.1.3 /opt/module/

在 hadoop103 上,将hadoop102中/opt/module目录下所有目录拷贝到hadoop104上:

scp -r root@hadoop102:/opt/module/* root@hadoop104:/opt/module

 

方法二:rsync远程同步工具

rsync主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。rsync和scp区别:用rsync做文件的复制要比scp的速度快,rsync只对差异文件做更新。scp是把所有文件都复制过去。基本语法如下:

rsync    -av       $pdir/$fname           $user@$host:$pdir/$fname
命令     选项参数    要拷贝的文件路径/名称     目的地用户@主机:目的地路径/名称
选项功能
-a归档拷贝
-v显示过程

同步hadoop102中的/opt/module/hadoop-3.1.3到hadoop103:

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

 

方法三:xsync

在写脚本之前咱们肯定希望这个脚本,无论我们在哪个目录都可以直接使用他,所以我们需要把这个脚本所在的路径配置到环境变量中去,先看一眼:

echo $PATH

咱们准备把这个脚本放在 root 目录下,接着输入:

export PATH=/root:$PATH

之后你也可以再echo一下看看。这样的话咱们在root目录下写得脚本在任何目录下都可以直接使用,不用再去写繁琐的绝对路径了。 效果如下:

3b5863d846784c50b5918c3186ccacaa.png

接着咱们在root目录下开始创建脚本:

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

保存退出后给他加个权限:

chmod +x xsync

这里咱们就可以来做个测试了,但是首先得去配置一下 hosts 文件,把咱们 hadoop103 和   hadoop104 的ip配置进去:

vim /etc/hosts

4f010650c6b74963906945ee1b526f86.png

然后咱们去根目录下面随便创建点东西,当然要保证103和104机器中没有你所创建的对象:

cd /
mkdir test

开始测试,直接在根目录下运行,顺便看看环境变量配置的是否正常:

xsync test/

c334c59407854ca8a8062325dbe6c75c.png

这里依次输入自己的密码,然后咱们去103和104里面看看成果没有:

7a65b38b1d8041baa63395a20e279234.png

测试成功! 然后咱们再把刚刚的配置文件传一下看看:

xsync /etc/profile.d/java.sh

依次输入密码后去看一眼结果:

85eaa5ff97f84807a66ecd3303ebde41.png

同样也是成功了。若在这里没有使用 root 用户则会因为权限问题报错(因为我们把它放在了 /root 目录下面),这里是无法通过直接添加   sudo 来解决问题的。咱们需要把 xsync 的绝对路径也加上才行,代码如下:

sudo /root/xsync /etc/profile.d/java.sh 

时候开始 103 和 104 机器的Hadoop安装了,那要怎么装呢,直接在102上面执行以下步骤:

xsync /opt
xsync /etc/profile.d/java.sh

 

ssh免密登录

在 102 机器下 进入到 root 目录下,然后ll -a:

ll -a

可以看到一个 .ssh 的隐藏目录,咱们进去:

ssh-keygen -t rsa

连续回车三次,然后ll查看一下会发现多出来了两个新的文件,这俩文件就是公钥和私钥。接下来咱们需要把公钥拷贝到 103 和 104 机器上:

ssh-copy-id hadoop103

因为是首次连接, 所以需要输入一次 103 的密码,当然之后就不需要了:

8ca0c214e71045a69db78a7dc334364e.png

接着我们再试试看ssh到103,看看是否需要密码:

39988d36ff324ee8ba3b00c303fcb379.png

可以看到不需要密码直接就连上了,咱们用 exit 退出,然后继续操作:

exit
ssh-copy-id hadoop104

同样的,中间输入一密码然后回车。操作完成后咱们可以到 103 和 104 机器上去看一眼:

ad9c0db77eaa4befbb54656a35a6eae4.png

可以看到多了一个 authorized_keys 文件,这个用来标识有哪些主机可以访问自己,可以看到文件的结尾是 root@hadoop102 ,没有问题。

当然你也可以在 102 机器上配置 102 自己的ssh连接,这样以后再运行xsync的时候就不需要再输入密码了:

ssh-copy-id hadoop102

效果如下:

96545e0781a944b1bcaa1e88b07cba6c.png


 

3.集群配置

 

4.群起集群并测试

 

 

 

 

 

相关文章:

  • 基于视觉AI的管道高后果区预警系统
  • 计算机毕业设计ssm+vue基本微信小程序的蛋糕预订平台系统
  • CSP202206-1 归一化处理 (C/C++)
  • c++ 11 多线程支持 (std::packaged_task)
  • Spring MVC注解Controller源码流程解析--定位HandlerMethod
  • 常用排序方法、sort的实现原理、快排的优化
  • centos7 离线安装httpd
  • Redis学习之路(三)--key键操作
  • 为什么这么多品牌迫切想要改变Logo?
  • 郁锦香、凯里亚德亮相“2022锦江行”,如何走出一条酒店破题之路
  • 拓展:Microsoft密钥类型说明
  • 基本 nosql 和 mongodb等数据库对比基本 nosql 和 mongodb等数据库对比
  • 使用打表法找规律
  • dockerkubernets篇(二十八)
  • 32. 最长有效括号 java解决
  • avalon2.2的VM生成过程
  • E-HPC支持多队列管理和自动伸缩
  • java正则表式的使用
  • leetcode-27. Remove Element
  • Mithril.js 入门介绍
  • scrapy学习之路4(itemloder的使用)
  • unity如何实现一个固定宽度的orthagraphic相机
  • Vue2 SSR 的优化之旅
  • 动态规划入门(以爬楼梯为例)
  • 飞驰在Mesos的涡轮引擎上
  • 关于 Cirru Editor 存储格式
  • 容器服务kubernetes弹性伸缩高级用法
  • 入手阿里云新服务器的部署NODE
  • 适配iPhoneX、iPhoneXs、iPhoneXs Max、iPhoneXr 屏幕尺寸及安全区域
  • 数组的操作
  • 微信小程序实战练习(仿五洲到家微信版)
  • 自动记录MySQL慢查询快照脚本
  • 自制字幕遮挡器
  • scrapy中间件源码分析及常用中间件大全
  • 昨天1024程序员节,我故意写了个死循环~
  • ​LeetCode解法汇总2304. 网格中的最小路径代价
  • (C语言)球球大作战
  • (过滤器)Filter和(监听器)listener
  • (顺序)容器的好伴侣 --- 容器适配器
  • (学习日记)2024.01.19
  • (原)本想说脏话,奈何已放下
  • (原创)Stanford Machine Learning (by Andrew NG) --- (week 9) Anomaly DetectionRecommender Systems...
  • (原創) 如何動態建立二維陣列(多維陣列)? (.NET) (C#)
  • .mysql secret在哪_MySQL如何使用索引
  • .NET Core 中插件式开发实现
  • .net 获取url的方法
  • .NET 指南:抽象化实现的基类
  • .NetCore Flurl.Http 升级到4.0后 https 无法建立SSL连接
  • .NET开源全面方便的第三方登录组件集合 - MrHuo.OAuth
  • .NET中使用Protobuffer 实现序列化和反序列化
  • ??如何把JavaScript脚本中的参数传到java代码段中
  • [.net] 如何在mail的加入正文显示图片
  • [1127]图形打印 sdutOJ
  • [ABP实战开源项目]---ABP实时服务-通知系统.发布模式
  • [BeginCTF]真龙之力