1.大数据-hadoop-集群搭建-多机操作脚本

教程 阿布都的都 ⋅ 于 2023-01-06 17:25:43 ⋅ 441 阅读

1 大数据概述

1.1 什么是大数据(bigdata)?

大数据本身是一个抽象的概念。

从一般意义上讲,大数据是指无法在有限时间内用常规软件工具对其进行获取、存储、管理和处理的数据集合。
大数据具备 Volume、Velocity、Variety 和 Value 四个特征,简称“4V”,即数据体量巨大、数据速度快、数据类型繁多和数据价值密度低,商业价值高特征。

如下图所示。下面分别对每个特征作简要描述。

file

大数据的主要特点(4V)

1)Volume:数据体量巨大

随着移动端和互联网的兴起,数据集合的规模不断扩大,已经从 GB 级增加到 TB 级再增加到 PB 级,近年来,数据量甚至开始以 EB 和 ZB 来计数。

存储单位如下:

1 Byte(B 字节)= 8 bit

1KB(Kilobyte 千字节)= 1024 B

1MB(Megabyte 兆字节 简称“兆”)= 1024 KB

1GB(Gigabyte 吉字节 又称“千兆”)= 1024 MB

1TB(Trillionbyte 万亿字节 太字节)= 1024 GB

1PB(Petabyte 千万亿字节 拍字节)= 1024 TB

1EB(Exabyte 百亿亿字节 艾字节)= 1024 PB

1ZB(Zettabyte 十万亿亿字节 泽字节)= 1024 EB

2)Velocity:大数据的数据产生、处理和分析的速度在持续加快

加速的原因是数据创建的实时性特点,以及将流数据结合到业务流程和决策过程中的需求。

数据处理速度快,处理模式已经开始从批处理转向流处理。

业界对大数据的处理能力有一个称谓——“ 1 秒定律”,也就是说,可以从各种类型的数据中快速获得高价值的信息。大数据的快速处理能力充分体现出它与传统的数据处理技术的本质区别。

3)Variety:大数据的数据类型繁多

现在的数据类型不再只是结构化数据,更多的是半结构化或者非结构化数据,如 XML、邮件、博客、即时消息、视频、照片、点击流、 日志文件等。

4)Value:表示**大数据的数据价值密度低,商业价值高**

大数据由于体量不断加大,单位数据的价值密度在不断降低,然而数据的整体价值在提高。

以监控视频为例,在一小时的视频中,有用的数据可能仅仅只有一两秒,但是却会非常重要。

现在许多专家已经将大数据等同于黄金和石油,这表示大数据当中蕴含了无限的商业价值。

通过对大数据进行处理,找出其中潜在的商业价值,将会产生巨大的商业利润。

1.2 大数据产生

1)运营式系统阶段

将业务数据存入数据库,用数据库来管理业务数据。如:交易记录、入库记录等。

这个阶段的最主要特点是,数据的产生往往伴随着一定的运营活动;而且数据的产生方式是被动的。

2)用户原创内容阶段

随着互联网和移动终端的兴起,用户会通过社交App来主动发朋友圈、发微博、通过电商App购买商品等,而且还特别便捷,这会产生大量的数据。数据产生方式是主动的。

3)感知式系统阶段

随着技术的发展,移动端利用传感器来记录用户的日常行为、企业利用传感器来获取运行数据,进而监控机器的运行情况。这些设备会源源不断地产生新数据,这种数据的产生方式是自动的。

简单来说,数据产生经历了被动、主动和自动三个阶段。这些被动、主动和自动的数据共同构成了大数据的数据来源,但其中自动式的数据才是大数据产生的最根本原因。

1.3 大数据的作用?

现在正是大数据的时代,大数据在许多各行各业也发挥着越来越多的作用。

比如:

1)电商、零售行业,通过对用户购买行为的分析,细分市场、精准营销。

2)企业通过大数据技术,来分析生产的各个环节,提高生产效率。

3)通过数据采集技术,抓取互联网上的信息,并提取,比如:新闻采集。

随着互联网+的兴起,产生的数据会越来越多,数据的作用会越来大。

以后是得数据者得天下,各大互联网企业也在争抢数据来源。而且国家也开始重视大数据,防止数据外泄威胁国家安全,国家出台很多政策。

1.4 大数据的数据处理流程

第一阶段 : 数据抽取与集成

将不同数据源、不同类型的数据统一格式,存储到分布式文件系统中。

没有大数据技术前:存储到MySQL、oracle这种关系型数据库(单机瓶颈)。

有大数据技术后:存储到如hdfs分布式文件系统中(可多机存储和分析)。

第二阶段 : 数据分析

数据分析是整个大数据处理流程的核心。

数据分析包括 普通统计分析、算法分析(数据挖掘),通过分析数据产生价值。

数据分析通常有两种:

离线处理分析:

​ 对一段时间内海量的离线数据进行统一的处理,对应的处理框架有 MapReduce、Spark。

​ 数据有范围,对时间性要求不高。

实时处理分析:

​ 对运动中的数据进行处理,即在接收数据的同时就对其进行处理,对应的处理框架有Storm、Spark Streaming、Flink。

​ 数据没有范围(随着时间的流逝数据在产生),对时间性要求高。

随着处理框架的完善,也可以用SQL来对数据进行统计分析,如hiveSQL, sparkSQL。

第三阶段 : 数据解释

数据分析是大数据处理的核心,但是用户往往更关心对结果的解释。

通过数据可视化,将分析的结果形象的展现在数据大屏上,使用户更易于理解和接受。

file

1.5 大数据处理技术

​ 对大数据技术的基本概念进行简单介绍,包括分布式计算、服务器集群和 Google 的 3 个大数据技术。

1.5.1 分布式计算

​ 随着数据越来越大,单机存储和计算能力遇到瓶颈。

​ 需要多机存储和计算(分布式计算)。

分布式计算:

​ 是把一个大计算任务拆分成多个小计算任务分布到若干台机器上去计算,然后再进行结果汇总。 目的在于分析计算海量的数据。

​ 尽管分散系统内的单个计算机的计算能力不强,但是由于每个计算机只计算一部分数据,而且是多台计算机同时计算,所以就分散系统而言,处理数据的速度会远高于单个计算机。

file

1.5.2 服务器集群

​ 服务器集群是一种提升服务器整体计算能力的解决方案。它是由互相连接在一起的服务器群组成的一个并行式或分布式系统。

通俗解释:

​ 服务器集群由多台机器组成在一起

​ 提供各种服务,比如存储的服务(hdfs)、分布式计算的服务(mapreduce)等

​ 由于服务器集群中的服务器运行同一个计算任务,因此,从外部看,这群服务器表现为一台虚拟的服务器,对外提供统一的服务。

​ 尽管单台服务器的运算能力有限,但是将成百上千的服务器组成服务器集群后,整个系统就具备了强大的运算能力,可以支持大数据分析的运算负荷。

​ Google、Amazon, 阿里巴巴的计算中心里的服务器集群都达到了 5000 台服务器的规模。

1.5.3 大数据的技术基础

​ 2003—2004 年间,Google 发表了 MapReduce、GFS(Google File System)和 BigTable 3 篇技术论文,提出了一套全新的分布式计算理论。

MapReduce --> Mapredue**分布式计算框架**

GFS --> HDFS分布式文件系统

BigTable --> Hbase列式存储数据库

​ Google 的分布式计算模型相比于传统的分布式计算模型有 3 大优势:

  • 简化了传统的分布式计算理论,降低了技术实现的难度,可以进行实际的应用。
  • 可以应用在廉价的计算设备上,只需增加计算设备的数量就可以提升整体的计算能力,应用成本十分低廉。
  • 被应用在 Google 的计算中心,取得了很好的效果,有了实际应用的价值。

​ 后来,各家互联网公司开始利用 Google 的分布式计算模型搭建自己的分布式计算系统,Google 的这 3 篇论文也就成为大数据时代的技术核心。
​ 当时 Google 采用分布式计算理论也是为了利用廉价的资源,使其发挥出更大的效用。

​ Google 的成功使人们开始效仿,从而产生了开源系统 Hadoop。

2 hadoop概述

2.1 Hadoop简介

​ Hadoop项目是以可靠、可扩展和分布式计算为目的而发展而来的开源软件。 Hadoop 是Apache的顶级项目。 Hadoop设计的初衷:可以作用在低成本的硬件上。

​ Hadoop 采用 MapReduce 分布式计算框架,根据 GFS 原理开发了 HDFS(分布式文件系统),并根据 BigTable 原理开发了 HBase 数据存储系统。

​ Hadoop 是一个基础框架,允许用简单的编程模型在计算机集群上对大型数据集进行分布式处理。

2.2 hadoop的历史起源创始人: Doug Cutting 和 Mike Cafarella

file

                                        <img src="image-20230105140920453.png" alt="image-20230105140920453" style="zoom:67%;" />   
Doug Cutting 看到他儿子在牙牙学语时,抱着黄色小象,亲昵的叫 hadoop,他灵光一闪,就把这技术命名为 Hadoop,而且还用了黄色小象作为标示 Logo,不过,事实上的小象瘦瘦长长,不像 Logo 上呈现的那么圆胖。“我儿子现在 17 岁了,所以就把小象给我了,有活动时就带着小象出席,没活动时,小象就丢在家里放袜子的抽屉里。” 

file

2.3 hadoop核心组件和框架演变用于解决两个核心问题:存储计算核心组件1)Hadoop Common:**一组分布式文件系统和通用I/O的组件与接口(序列化、Java RPC和持久化数据结构)。
2)Hadoop Distributed FileSystem(Hadoop分布式文件系统HDFS)-->解决存储问题 分布式存储, 有备份, 可扩展

3)Hadoop MapReduce**(分布式计算框架)--> 解决计算问题* 分布式计算:多台机器同时计算一部分,得到部分结果,再将部分结果汇总,得到总体的结果*
* 可扩展,程序员只需专注业务开发
4)Hadoop YARN(\分布式资源管理器)****--> 解决资源管理问题***\
*** MapReduce任务计算的时候,运行在yarn上,yarn提供资源管理。
*
**** yarn主要管理的是 CPU 和 内存。

hadoop的框架演变

file

2.4 Hadoop 生态圈

file

file

Hadoop 生态圈包括以下主要组件。

1)HDFS(Hadoop分布式文件系统)

​ HDFS是一种数据分布式保存机制,数据被保存在计算机集群上。数据写入一次,读取多次。HDFS 为HBase等工具提供了基础。

2)MapReduce(分布式计算框架)

​ MapReduce是一种分布式计算模型,用以进行大数据量的计算,是一种离线计算框架。

​ 这个 MapReduce 的计算过程简而言之,就是将大数据集分解为成若干个小数据集,每个(或若干个)数据集分别由集群中的一个结点(一般就是一台主机)进行处理并生成中间结果,然后将每个结点的中间结果进行合并, 形成最终结果。

3)HBASE(分布式列存数据库)

​ HBase是一个建立在HDFS之上,面向列的NoSQL数据库,用于快速读/写大量数据。HBase使用Zookeeper进行管理,确保所有组件都正常运行。

4)Sqoop(数据ETL/同步工具)

​ Sqoop是SQL-to-Hadoop的缩写,主要用于传统数据库和Hadoop之间传输数据。

5)flume(分布式日志收集系统)

​ Flume是一个分布式、可靠、和高可用的海量日志聚合的系统,如日志数据从各种网站服务器上汇集起来存储到HDFS,HBase等集中存储器中。

6)Storm(流示计算、实时计算)

​ Storm是一个免费开源、分布式、高容错的实时计算系统。Storm令持续不断的流计算变得容易,弥补了Hadoop批处理所不能满足的实时要求。Storm经常用于在实时分析、在线机器学习、持续计算、分布式远程调用和ETL等领域。

7)Zookeeper(分布式协作服务)

​ Hadoop的许多组件依赖于Zookeeper,它运行在计算机集群上面,用于管理Hadoop操作。

作用:解决分布式环境下的数据管理问题:统一命名,状态同步,集群管理,配置同步等。

8)Pig(ad-hoc脚本)

​ Pig定义了一种数据流语言—Pig Latin,它是MapReduce编程的复杂性的抽象,Pig平台包括运行环境和用于分析Hadoop数据集的脚本语言(Pig Latin)。

​ 其编译器将Pig Latin 翻译成MapReduce 程序序列将脚本转换为MapReduce任务在Hadoop上执行。通常用于进行离线分析。

9)Hive(数据仓库)

​ Hive定义了一种类似SQL的查询语言(HQL),将SQL转化为MapReduce任务在Hadoop上执行。通常用于离线分析。

​ HQL用于运行存储在Hadoop上的查询语句,Hive让不熟悉MapReduce开发人员也能编写数据查询语句,然后这些语句被翻译为Hadoop上面的MapReduce任务。

10)Spark(内存计算模型)

​ Spark提供了一个更快、更通用的数据处理平台。和Hadoop相比,Spark可以让你的程序在内存中运行时速度提升100倍,或者在磁盘上运行时速度提升10倍。

11)Oozie(工作流调度器)

​ Oozi可以把多个Map/Reduce作业组合到一个逻辑工作单元中,从而完成更大型的任务。

12)Mahout(数据挖掘算法库)

​ Mahout的主要目标是创建一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建智能应用程序。

13)Hadoop YARN(\分布式资源管理器)****

​ YARN是下一代MapReduce,即MRv2,是在第一代MapReduce基础上演变而来的,主要是为了解决原始Hadoop扩展性较差,不支持多计算框架而提出的。

其核心思想:

将MR1中JobTracker的资源管理和作业调用两个功能分开,分别由ResourceManager和ApplicationMaster进程来实现。

1)ResourceManager:负责整个集群的资源管理和调度

2)ApplicationMaster:负责应用程序相关事务,比如任务调度、任务监控和容错等

14)Tez(DAG计算模型)

​ 一个运行在YARN之上支持DAG(有向无环图)作业的计算框架。

​ Tez的目的就是帮助Hadoop处理这些MapReduce处理不了的用例场景,如机器学习。

2.5 Hadoop 发行版本

Apache**(先学这个)**

  • 企业实际使用并不多。最原始(基础)版本。这是学习hadoop的基础。我们就是用的最原始的这个版本

cloudera --> CDH版(后学这个)

  • 对hadoop的升级,打包,开发了很多框架。flume、hue、impala都是这个公司开发
  • 2008 年成立的 Cloudera 是最早将 Hadoop 商用的公司,为合作伙伴提 供 Hadoop 的商用解决方案,主要是包括支持,咨询服务,培训。
  • 2009年Hadoop的创始人 Doug Cutting也加盟 Cloudera公司。Cloudera 产品主要 为 CDH,Cloudera Manager,Cloudera Support
  • CDH是Cloudera的Hadoop发行版,完全开源,比Apache Hadoop在兼容性,安全 性,稳定性上有所增强。
  • Cloudera Manager是集群的软件分发及管理监控平台,可以在几个小时内部署 好一个Hadoop集群,并对集群的节点及服务进行实时监控。Cloudera Support即 是对Hadoop的技术支持。
  • Cloudera 的标价为每年每个节点4000美元。Cloudera开发并贡献了可实时处理大 数据的Impala项目。

Hortonworks --> HDP+Ambari

  • 2011年成立的Hortonworks是雅虎与硅谷风投公司Benchmark Capital合资组建
  • 公司成立之初就吸纳了大约25名至30名专门研究Hadoop的雅虎工程师,上述工 程师均在2005年开始协助雅虎开发Hadoop,贡献了Hadoop 80%的代码。
  • 雅虎工程副总裁、雅虎Hadoop开发团队负责人Eric Baldeschwieler出任Hortonworks的首席执行官。
  • Hortonworks 的主打产品是Hortonworks Data Platform (HDP),也同样是100%开 源的产品,HDP除常见的项目外还包含了Ambari,一款开源的安装和管理系统
  • HCatalog,一个元数据管理系统,HCatalog现已集成到Facebook 开源的Hive中
    。Hortonworks的Stinger开创性地极大地优化了Hive项目。Hortonworks为入门提 供了一个非常好的,易于使用的沙盒。
  • Hortonworks开发了很多增强特性并提交至核心主干,这使得Apache Hadoop能 够在包括Windows Server和Windows Azure在内的Microsoft Windows平台上本地 运行。
  • 定价以集群为基础,每10个节点每年为12500美元。

3 服务器集群搭建

3.1 集群方式

​ 本地模式:windows伪集群,本地开发。(自己电脑)

​ 集群部署:完全分布式。(VM)

​ 公司环境 : 完全分布式,需要 用户名和密码登录

3.2 部署环境

​ 伪集群 --> windows环境下

​ 集群 --> 虚拟机的linux服务器里

3.3 软件准备

​ 虚拟机软件

​ 使用虚拟机软件安装CentOS 7

​ 安装终端工具 XShell 或者 SecureCRT

​ 下载 64位JDK(7/8) RPM安装包

​ 下载 hadoop2.x 安装包 我们使用的hadoop版本是 2.7.3

3.4 部署计划

​ 集群部署规划,5台服务器:

​ 一个主节点:nn1.hadoop

​ 一个从节点:nn2.hadoop

​ 三个工作节点:s1.hadoop、s2.hadoop、s3.hadoop

​ 注意:

​ 计算机名 --> 不要修改了,后面安装的所有组件都涉及主机名称。

nn1.hadoop 机器作为操作机**。**

​ 在企业里还应有操作机(跳板机)防止服务器中毒,用跳板机联网做炮灰

​ 我们机房里的服务器就是这么设置的

​ 内部集群 ---->操作机op.hadoop (vpn) --------> 外网(电脑搞个vpn)

file

3.5 初始化环境

3.5.1 配置阿里云 yum 源

1)安装sz rz工具,用于以后用rz sz上传下载文件

yum install -y lrzsz

2)下载 repo 文件

文件下载地址: http://mirrors.aliyun.com/repo/Centos-7.repo

3)用 rz 将下载的 Centos-7.repo 文件上传到Linux系统的某个目录下

4)备份并替换系统的repo文件

cp Centos-7.repo /etc/yum.repos.d/ 
cd /etc/yum.repos.d/ 
mv CentOS-Base.repo CentOS-Base.repo.bak 
mv Centos-7.repo CentOS-Base.repo

5)执行yum源更新命令

yum clean all 
#服务器的包信息下载到本地电脑缓存起来
yum makecache 
yum update -y

配置完毕。

3.5.2 安装常用软件

yum install -y openssh-server vim gcc gcc-c++ glibc-headers bzip2-devel lzo-devel curl wget openssh-clients zlib-devel autoconf automake cmake libtool openssl-devel fuse-devel snappy-devel telnet unzip zip net-tools.x86_64 firewalld systemd ntp unrar bzip2 

3.5.3 关闭防火墙

查看防火墙状态:firewall-cmd --state

关闭防火墙:systemctl stop firewalld.service

禁止防火墙开机启动: systemctl disable firewalld.service

查看服务是否开机启动: systemctl is-enabled firewalld.service

3.5.4 关闭SELinux

啥是SELinux?

​ Security-Enhanced Linux 是美国国家安全局(NSA)对于强制访问控制的实现,是 Linux历史上最杰出的新安全子系统。

​ NSA是在Linux社区的帮助下开发了一种访问控制体系,在这种访问控制体系的限制下,进程只能访问那些在他的任务中所需要文件。

​ SELinux 默认安装在 Fedora 和 Red Hat Enterprise Linux 上,也可以作为其他发行版上容易安装的包得到。

查看关闭状态

/usr/sbin/sestatus -v

关闭方法

vim /etc/selinux/config

把文件里的SELINUX=disabled

file

临时关闭selinux(无需重启),从 enforcing(强制模式:拦截访问) 到 permissive(宽容模式:不拦截访问)

setenforce 0

查看当前模式

getenforce

/usr/sbin/sestatus -v 查看selinux的修改状态

3.5.5 安装JDK

1 JDK 下载地址

file

2 安装JDK

1)用 rz 命令将安装文件上传Linux 系统

进入指定目录后,用rz 命令上传文件到当前目录

2)安装JDK

rpm -ivh jdk-8u144-linux-x64.rpm

-ivh:安装时显示安装进度

3 配置JDK 环境变量

1)修改系统环境变量文件 /etc/profile,**在文件尾部追加以下内容**

export JAVA_HOME=/usr/java/jdk1.8.0_144
export JRE_HOME=$JAVA_HOME/jre
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

export

设置或显示环境变量。

一个变量创建时,它不会自动地为在它之后创建的shell进程所知。而命令export 可以向后面的shell传递变量的值。

file

file

2) 使修改生效,并配置JDK

#使修改生效
source /etc/profile
#查看系统变量值
echo $PATH
#检查JDK 配置情况
java -version

3.5.6 配置NTP服务器

1) 概述

​ NTP是网络时间协议(Network Time Protocol),它是用来同步网络中各个计算机的时间的协议。

​ 在计算机的世界里,时间非常地重要,例如对于火箭发射这种科研活动,对时间的统一性和准确性要求就非常地高,是按照A这台计算机的时间,还是按照B这台计算机的时间?NTP就是用来解决这个问题的,NTP(Network Time Protocol,网络时间协议)是用来使网络中的各个计算机时间同步的一种协议。它的用途是把计算机的时钟同步到世界协调时UTC,其精度在局域网内可达0.1ms,在互联网上绝大多数的地方其精度可以达到1-50ms。

​ 它可以使计算机对其服务器或时钟源(如石英钟,GPS等等)进行时间同步,它可以提供高精准度的时间校正,而且可以使用加密确认的方式来防止病毒的协议攻击。

2) 使用

​ 如果没有安装npt需要安装一下

[root@localhost ~]# yum -y install ntp

执行命令同步成为阿里云服务器时间

[root@localhost ~]# ntpdate time1.aliyun.com  >> /tmp/autontpdate 2>&1

3) 通过linux的crontab设置为定时任务,每到整点就同步时间

linux crontab

​ 每个用户都可以实现自己的 crontab 定时任务,只需使用这个用户身份执行“crontab -e”命令即可。当然,这个用户不能写入 /etc/cron.deny 文件。

​ crontab 命令格式如下:

crontab [选项]

选项:-e:编辑 crontab 定时任务;-l:查询 crontab 定时任务;-r:删除当前用户所有的 crontab 定时任务。如果有多个定时任务,只想删除一个,则可以使用“crontab -e”;-u 用户名:修改或删除其他用户的 crontab 定时任务。只有 root 用户可用;
其实 crontab 定时任务非常简单,只需执行“crontab -e”命令,然后输入想要定时执行的任务即可。

​ 不过,当我们执行“crontab-e”命令时,打开的是一个空文件,而且操作方法和 Vim 是一致的。那么,这个文件的格式才是我们真正需要学习的内容。文件格式如下:

[root@localhost !]# crontab -e
#进入 crontab 编辑界面。会打开Vim编辑你的任务
x x x x x 执行的任务

这个文件中是通过5个“x”来确定命令或任务的执行时间的,这 5 个“x”的具体含义如表 1 所示。

项目 含义 范围
第一个"x" 一小时当中的第几分钟 0~59
第二个"x" 一天当中的第几小时 0~23
第三个"x" 一个月当中的第几天 1~31
第四个"x" 一年当中的第几个月 1~12
第五个"x" 一周当中的星期几 0~7(0和7都代表星期日

在时间表示中,还有一些特殊符号需要学习,如表 2 所示。

特殊符号 含义
* 代表任何时间。比如第一个"*"就代表一小时种每分钟都执行一次的意思
, 代表不连续的时间。比如"0 8,12,16 ***命令"就代表在每天的8点0分、12点0分、16点0分都执行一次命令
- 代表连续的时间范围。比如"0 5 ** 1-6命令",代表在周一到周六的凌晨5点0分执行命令
*/n 代表每隔多久执行一次。比如"*/10****命令",代表每隔10分钟就执行一次命令

5 每小时的第5分钟执行

5 1 * 每天的1:05执行

5 1 5 每个星期5 的 1:05执行

5 1,3 5 每个星期5 的 1:05, 3:05执行

5 1-3 5 每个星期5 的 1:05,2:05, 3:05执行

/1 * 每隔一分钟执行一次(频率)

当“crontab -e”编辑完成之后,一旦保存退出,那么这个定时任务实际就会写入 /var/spool/cron/ 目录中,每个用户的定时任务用自己的用户名进行区分。而且 crontab 命令只要保存就会生效,只要 crond 服务是启动的。知道了这 5 个时间字段的含义,我们多举几个时间的例子来熟悉一下时间字段,如表 3 所示。
时间 含义
45 22 ***命令 在22点45分执行命令
0 17 ** 1命令 在每周一的17点0分执行命令
0 5 1,15**命令 在每月1日和15日的凌晨5点0分执行命令
40 4 ** 1-5命令 在每周一到周五的凌晨4点40分执行命令
*/10 4 ***命令 在每天的凌晨4点,每隔10分钟执行一次命令

我们要求是每个整点同步一次时间,所以应该这么写

crontab -e
#编辑内容
0 * * * * /usr/sbin/ntpdate time1.aliyun.com >> /tmp/autontpdate 2>&1

3.5.7 修改主机名

hostnamectl set-hostname nn1.hadoop
#修改完后用hostname可查看当前主机名
hostname

3.5.8 创建hadoop 用户并设置密码

#创建hadoop用户
useradd hadoop
#给hadoop用户设置密码: 12345678
passwd hadoop

file
1)修改/etc/pam.d/su配置su 时要求 这个用户必须加入到wheel组,否则权限不足修改/etc/pam.d/su文件,将“#auth\t\trequired\tpam_wheel.so”,替换成“auth\t\trequired\tpam_wheel.so”
修改/etc/pam.d/su文件,将字符串“#auth\t\tsufficient\tpam_wheel.so”替换成“auth\t\tsufficient\tpam_wheel.so”

sed -i 's/#auth\t\trequired\tpam_wheel.so/auth\t\trequired\tpam_wheel.so/g' '/etc/pam.d/su'
sed -i 's/#auth\t\tsufficient\tpam_wheel.so/auth\t\tsufficient\tpam_wheel.so/g' '/etc/pam.d/su' 

命令说明:修改某个文件,并替换文件里的内容,命令格式:

sed -i 's/要被取代的字串/新的字串/g' '文件名'

-i :直接修改读取的文件内容,而不是输出到终端。
2)修改/etc/login.defs文件只有wheel组可以su 到root

cp /etc/login.defs /etc/login.defs_back 先备份一个

# 把“SU_WHEEL_ONLY yes”字符串追加到/etc/login.defs文件底部
echo "SU_WHEEL_ONLY yes" >> /etc/login.defs 

tail /etc/login.defs 从文件底部查看

file

3) 添加用户到管理员,禁止普通用户su 到 root

#把hadoop用户加到wheel组里
gpasswd -a hadoop wheel
#查看wheel组里是否有hadoop用户
cat /etc/group | grep wheel

4)用vuser1 用户验证一下,由于vuser1 没有在wheel 组里,所以没有 su - root 权限。
useradd vuser1

su - vuser1

su -

5)验证免密码切换到 root 用户
3.5.10 给hadoop用户,配置SSH密钥配置SSH密钥的目的:使得多台机器间可以免密登录。实现原理:公钥加密私钥解密,称为非对称加密。

file

ssh加解密原理1)client 端创建密钥对,将公钥发送给server端 请求验证;2)server 收到 client 公钥后,对比公钥,如果不一致就拒绝;如果一致,再将server的公钥发送给client 端进行私钥验证; 这一步是server端确定来请求的人自己认识,然后猜会去对比私钥3)如果client 私钥和server 公钥配对成功后,建立连接; 这一步是客户端为了确定有没有请求错误,确定server 的公钥是自己家的

file

#切换到hadoop用户
su – hadoop                       
#创建.ssh目录
mkdir ~/.ssh   
#生成ssh公私钥                         
ssh-keygen -t rsa -f ~/.ssh/id_rsa -P ''    
#输出公钥文件内容并且重新输入到~/.ssh/authorized_keys文件中        
cat ~/.ssh/id_rsa.pub > ~/.ssh/authorized_keys 
#给~/.ssh文件加上700权限
chmod 700 ~/.ssh        
#给~/.ssh/authorized_keys加上600权限       
chmod 600 ~/.ssh/authorized_keys 

3.5.11 配置hosts 文件在克隆机器前,配置nn1 机器的 /etc/hosts 文件,文件内需要配置nn1、nn2、s1、s2、s3 所有机器的IP 和 主机名。修改/etc/hosts文件,vim /etc/hosts。追加以下内容,不要把之前的内容删掉。**注意:ip 得看自己的网段,不要照抄**

192.168.142.160 nn1.hadoop
192.168.142.161 nn2.hadoop
192.168.142.162 s1.hadoop
192.168.142.163 s2.hadoop
192.168.142.164 s3.hadoop

3.5.12 克隆4台机器 执行完上面的命令,一个基础的linux系统就配置好了。然后把这个nn1.hadoop虚拟机导出,再根据这个导出的虚拟机创建4个linux系统。 其中: nn2.hadoop: 从节点
s1.hadoop、s2.hadoop、s3.hadoop:三个工作节点 克隆完成之后需要配置以下内容 1. 配置每台电脑的IP地址
\2. 配置每台电脑的计算机名称 3. 配置每台电脑的SSH免密登录操作(在克隆前生成,克隆后免密已完成,无需配置)3.5.13 配置静态IP**1)配置静态ip**查看网卡硬件名称和基本信息

ip add 

file

虚拟机会给每个克隆的虚拟机创建新网卡,如上面的 ens33 。如果网卡设备信息中没有显示IP,则需要配置配置文件cd /etc/sysconfig/network-scripts/

file

ifcfg-xxx 中的xxx 与网卡名相同后,配置ifcfg-xxx 文件

TYPE="Ethernet"
BOOTPROTO="static"
DEFROUTE="yes"
PEERDNS="yes"
PEERROUTES="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_PEERDNS="yes"
IPV6_PEERROUTES="yes"
IPV6_FAILURE_FATAL="no"
NAME="ens33"
UUID="d15377eb-6ffa-44c9-a06d-f7eb00f49f44"
DEVICE="ens33"
ONBOOT="yes"
IPADDR=192.168.142.160
PREFIX=24
GATEWAY=192.168.142.2
DNS1=192.168.142.2
DNS2=8.8.8.8

需要修改的内容,配置完的网卡文件

file

file
用 ping www.baidu.com 看是否能连接外网。
如果上不了网执行以下操作。
2)配置 /etc/resolv.conf 的 nameservercat /etc/resolv.conf 查看nameserver是否被设置正确

file
3.5.14 修**改每个机器的主机名**修改4台的主机名

hostnamectl set-hostname nn2.hadoop
hostnamectl set-hostname s1.hadoop
hostnamectl set-hostname s2.hadoop
hostnamectl set-hostname s3.hadoop

4 hadoop多服务器批量操作

4.1 如何获取当前执行脚本的路径

​ 用dirname $0

​ 这个命令写在脚本文件里才有作用,他返回这个脚本文件放置的目录,这样就可以知道一些和脚本一起部署的文件的位置了,只要知道相对位置就可以根据这个目录来定位,而可以不用关心绝对位置。这样脚本的可移植性就提高了,扔到任何一台服务器,(如果是部署脚本)都可以执行。

#! /bin/bash
#获取脚本的当前位置
cd `dirname $0`
#输出脚本位置
echo `pwd`

4.2 命令说明及使用

4.2.1 scp 命令

scp 就是secure copy,一个在linux下用来进行远程拷贝文件的命令。

格式:

scp 文件名 登录用户名@目标机器IP或主机名:目标目录

示例:

scp /home/hadoop/f1 hadoop@s1.hadoop:/home/hadoop/

4.2.2 ssh 命令1)指定用户登录其他机器

ssh 登录用户名@目标ip或主机名

示例:ssh hadoop@s1.hadoop

2)指定用户登录其他机器执行某些命令

ssh 登录用户名@目标ip或主机名 命令

示例:ssh hadoop@s1.hadoop ls
4.2.3 eval命令 如何动态执行拼接的SSH 命令, 通过 eval 命令 eval命令会计算(evalue)它的参数,这些参数作为表达式计算后重新组合为一个字符串,然后作为一个命令被执行。 eval最常见的用法是将动态生成的命令行计算并执行。 示例:

name=hadoop
cmd="echo hello $name\! "
eval $cmd

4.3 批量脚本说明及使用ips :用于存放要操作的主机列表,用回车或空格隔开scp_all.sh :用hadoop用户拷贝当前机器的文件到其他操作机(多机分发脚本)ssh_all.sh :用hadoop 用户可登陆其他操作机执行相应操作(多机操作脚本)exe.sh : 执行su 命令,与ssh_root.sh 配套使用 ssh_root.sh : 用hadoop 用户登录其他操作机,并su 到 root 用户,以root 用户执行相应操作,与exe.sh 配套使用(root权限多机操作脚本)4.3.1 ips

ips :用于存放要操作的主机列表,用回车或空格隔开

nn1.hadoop
nn2.hadoop
s1.hadoop
s2.hadoop
s3.hadoop

4.3.2 ssh_all.sh 用hadoop 用户可登陆其他操作机执行相应操作

#! /bin/bash
# 进入到当前脚本所在目录
cd `dirname $0`
# 获取当前脚本所在目录
dir_path=`pwd`
#echo $dir_path
# 读ips文件得到数组(里面是一堆主机名)
ip_arr=(`cat $dir_path/ips`)
# 遍历数组里的主机名
for ip in ${ip_arr[*]}
do
        # 拼接ssh命令: ssh hadoop@nn1.hadoop ls
        cmd_="ssh hadoop@${ip} \"$*\""
        echo $cmd_
        # 通过eval命令 执行 拼接的ssh 命令
        if eval ${cmd_} ; then
                echo "OK"
        else
                echo "FAIL"
        fi
done

4.3.3 scp_all.sh用hadoop用户拷贝当前机器的文件到其他操作机

#! /bin/bash
# 进入到当前脚本所在目录
cd `dirname $0`
# 获取当前脚本所在目录
dir_path=`pwd`
#echo $dir_path
# 读ips文件得到数组(里面是一堆主机名)
ip_arr=(`cat $dir_path/ips`)
# 源
source_=$1
# 目标
target=$2
# 遍历数组里的主机名
for ip in ${ip_arr[*]}
do
        # 拼接scp命令: scp 源 hadoop@nn1.hadoop:目标
        cmd_="scp -r ${source_} hadoop@${ip}:${target}"
        echo $cmd_
        # 通过eval命令 执行 拼接的scp 命令
        if eval ${cmd_} ; then
                echo "OK"
        else
                echo "FAIL"
        fi
done

4.3.4 exe.sh 执行su 命令,与ssh_root.sh 配套使用

cmd=$*
su - << EOF
$cmd
EOF

4.3.5 ssh_root.sh 用hadoop 用户登录其他操作机,并su 到 root 用户,以root 用户执行相应操作,与exe.sh 配套使用

#! /bin/bash
# 进入到当前脚本所在目录
cd `dirname $0`
# 获取当前脚本所在目录
dir_path=`pwd`
#echo $dir_path
# 读ips文件得到数组(里面是一堆主机名)
ip_arr=(`cat $dir_path/ips`)
# 遍历数组里的主机名
for ip in ${ip_arr[*]}
do
        # 拼接ssh命令: ssh hadoop@nn1.hadoop ls
        cmd_="ssh -t hadoop@${ip} ~/exe.sh \"$*\""
        echo $cmd_
        # 通过eval命令 执行 拼接的ssh 命令
        if eval ${cmd_} ; then
                echo "OK"
        else
                echo "FAIL"
        fi
done

4.4 批量脚本的使用**首先切换到hadoop用户

file

file

5)测试root权限批量操作**(ssh_root.sh, root 用户权限)****执行 ssh_root.sh 前要将exe.sh文件分发到每个机器的hadoop用户家目录下

file

file


**思考题:假如nn1.hadoop 上的/root 目录下有个f1文件,如何将f1文件分发到5台机器的/root/op/ 目录下?要求:不允许单机操作直接拷贝,利用多机操作、多机分发脚本来完成。

#1)hadoop:创建5台的/root/op/ 目录
[hadoop@nn1 hadoop_op]$ ./ssh_root.sh mkdir -p /root/op
# 2)root:cp /root/f1 /home/hadoop
[hadoop@nn1 hadoop_op]$ su - root
上一次登录:六 7月 17 10:07:11 CST 2021
[root@nn1 ~]# cp f1 /home/hadoop
[root@nn1 ~]# ll /home/hadoop | grep f1
-rw-r--r--  1 root root   0 7月  17 10:08 f1
# 3)Hadoop:分发到5台机器的/home/hadoop
[hadoop@nn1 hadoop_op]$ ./scp_all.sh ~/f1 /home/hadoop
# 4)Hadoop:将每台的/home/hadoop/f1 mv 到 /root/op 目录下
[hadoop@nn1 hadoop_op]$ ./ssh_root.sh mv ~/f1 /root/op
# 查看
[hadoop@nn1 hadoop_op]$ ./ssh_root.sh ls /root/op 
版权声明:原创作品,允许转载,转载时务必以超链接的形式表明出处和作者信息。否则将追究法律责任。来自海汼部落-阿布都的都,http://hainiubl.com/topics/76033
成为第一个点赞的人吧 :bowtie:
回复数量: 0
    暂无评论~~
    • 请注意单词拼写,以及中英文排版,参考此页
    • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
    • 支持表情,可用Emoji的自动补全, 在输入的时候只需要 ":" 就可以自动提示了 :metal: :point_right: 表情列表 :star: :sparkles:
    • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif,教程
    • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
    Ctrl+Enter