1 绪论
-
- 研究Hadoop的背景和意义
研究Hadoop处理数据的背景和意义可以从大数据时代的发展和需求出发来解释。
1.数据爆炸式增长:随着互联网、传感器技术和移动设备的普及,数据量呈现爆炸式增长。企业、政府和组织需要有效地管理、存储和分析这些海量数据,以从中获得价值。
2.传统数据处理技术的不足:传统的关系型数据库和单机计算技术在处理大规模数据时存在着瓶颈。它们往往无法扩展到大规模的数据集,处理速度慢且成本高昂。
3.需求的多样性:不同行业和应用场景对数据处理的需求各不相同,有些需要批处理,有些需要实时处理,有些需要复杂的分析和挖掘。传统技术往往无法满足这种多样性的需求。
在这样的背景下,Hadoop应运而生,具有以下重要意义:
1.可扩展性:Hadoop是一个高度可扩展的分布式存储和计算平台,可以横向扩展集群规模,处理任意大小的数据。
2.容错性:Hadoop的分布式文件系统(HDFS)和分布式计算框架(MapReduce)具有很强的容错性,即使在节点故障时也能保证数据的可靠性和任务的完成。
3.经济性:Hadoop采用了廉价的标准硬件构建集群,相比传统的商业解决方案成本更低,因此适用于大部分组织和企业。
4.灵活性:Hadoop生态系统包括了各种工具和技术,支持多种数据处理和分析任务,包括批处理、实时处理、机器学习等,能够满足不同需求的场景。
5.开放性:Hadoop是一个开源项目,由Apache软件基金会维护,拥有庞大的社区支持和持续的技术创新,可以保证技术的更新和生态系统的健康发展。
1.2 什么是Hadoop?
Hadoop是一个开源的分布式存储和计算框架,旨在处理大规模数据集。它由Apache软件基金会开发,基于Google的MapReduce和Google文件系统(GFS)的研究论文。Hadoop主要由两个核心组件组成:
1.Hadoop分布式文件系统(HDFS): HDFS是Hadoop的存储组件,用于存储大规模数据集,并提供高容错性。它将数据分布式存储在集群的多个节点上,并提供高可靠性和高可用性,即使有节点故障也能保持数据完整性。
2.MapReduce: MapReduce是Hadoop的计算框架,用于并行处理存储在HDFS中的数据。它将计算任务分解成小的子任务,并在集群中的多个节点上并行执行这些任务,然后将结果汇总起来。MapReduce采用了“映射(Map)”和“归约(Reduce)”两个阶段,使得在大规模数据上进行分布式计算变得高效和可扩展。
除了这两个核心组件外,Hadoop生态系统还包括其他相关项目,如YARN(用于资源管理和作业调度)、HBase(分布式列存数据库)、Hive(数据仓库基础)、Spark(快速通用的大数据处理引擎)等,这些项目共同构建了一个完整的大数据处理平台。Hadoop被广泛应用于各种领域,包括数据分析、机器学习、日志处理等。
1.3 hadoop能用来干什么?
Hadoop是一个功能强大的分布式存储和计算框架,主要用于处理大规模数据集。它的主要功能包括:
1.分布式存储(HDFS):Hadoop提供了一个分布式文件系统(HDFS),可以将大规模数据集分布式地存储在集群的各个节点上,确保数据的高可靠性和可扩展性。
2.分布式计算(MapReduce):Hadoop的MapReduce框架允许用户编写并行化的计算任务,将数据分成小块,分布式地在集群中进行处理和计算,然后将结果汇总。
3.大数据处理:Hadoop可以处理各种类型和格式的大规模数据,包括结构化数据、半结构化数据和非结构化数据。
4.批处理:Hadoop适用于批处理任务,可以处理大量数据的批量处理任务,例如日志分析、数据清洗、ETL(抽取、转换、加载)等。
5.数据仓库:Hadoop可以作为数据仓库的一部分,用于存储和处理海量的数据,支持数据的多维分析和查询。
6.数据挖掘和机器学习:Hadoop可以与各种数据挖掘和机器学习工具集成,用于在大规模数据集上进行模式识别、预测分析、聚类等任务。
7.实时数据处理:尽管Hadoop最初是针对批处理设计的,但是通过与其他技术(如Apache Spark、Apache Flink等)的集成,也可以实现近乎实时的数据处理和分析。
总的来说,Hadoop是一个高度灵活和可扩展的数据处理平台,可以满足各种不同规模和类型的大数据处理需求。
1.4 hadoop和linux之间有怎样的联系
Hadoop和Linux之间有密切的联系,因为Hadoop通常在Linux操作系统上部署和运行。Hadoop是一个开源的分布式计算框架,主要用于处理大规模数据。它充分利用了Linux操作系统的稳定性、性能和开放性,使得在Linux上部署和管理Hadoop集群变得更加高效和灵活。此外,Hadoop的许多组件和工具都是针对Linux环境进行优化和开发的,因此在Linux上使用Hadoop能够获得更好的性能和稳定性。
1.操作系统兼容性:Hadoop可以在多种Linux发行版上运行,包括但不限于Ubuntu、CentOS、Red Hat Enterprise Linux(RHEL)等。它可以与Linux内核良好地集成,并利用Linux操作系统的稳定性和性能优势。
2.命令行管理:Hadoop提供了一组命令行工具,用于在Linux环境下管理和监控Hadoop集群。这些工具允许管理员执行各种操作,如启动和停止集群、管理文件系统、监视作业执行情况等。
3.文件系统:Hadoop的分布式文件系统(HDFS)可以在Linux上运行,并利用Linux文件系统的特性来管理数据存储和访问。HDFS将数据分布存储在集群的多个节点上,与Linux文件系统相比,它具有更好的可伸缩性和容错性。
4.系统优化:通过对Linux系统进行优化,可以提高Hadoop集群的性能和稳定性。这包括调整内核参数、优化网络配置、管理系统资源等。Linux专业知识可以帮助管理员更好地理解和调整系统以满足Hadoop的需求。
5.安全性:Linux操作系统提供了丰富的安全功能,可以与Hadoop的安全机制集成,确保集群的数据和资源受到保护。管理员可以利用Linux的身份验证、访问控制和加密功能来增强Hadoop集群的安全性。
2 静态网络配置
2.1 查看网络连通
2.1.1进入虚拟机的虚拟网络编辑器设置ip、网关、和子网掩码。
首先进入管理员模式,如果没有VMnet8则需要手动添加网络
接着设置子网IP,在这简单介绍一下什么是子网ip,子网IP是指在一个子网中的特定IP地址。在计算机网络中,子网(Subnet)是指将一个大的IP地址空间划分成若干个小的网络,这些小的网络就是子网。子网IP地址是在子网中分配给计算机、路由器或其他网络设备的唯一标识符。通常,子网IP地址由IPv4或IPv6地址组成,用于在网络中唯一地标识每个设备。
子网的范围由其子网掩码确定。子网掩码是一个32位(IPv4)或128位(IPv6)的二进制数字,用于指示一个IP地址中哪些位用于网络标识,哪些位用于主机标识。
例如,在IPv4中,一个常见的子网掩码是255.255.255.0,它对应着CIDR表示法中的“/24”。这意味着前24位用于网络标识,剩下的8位用于主机标识。假设有一个IP地址为192.168.1.0,它的子网掩码为255.255.255.0。那么,这个子网的范围是从192.168.1.1到192.168.1.254,其中192.168.1.255通常用于广播地址,而192.168.1.0通常用于网络地址。
在IPv6中,子网的范围也由子网掩码确定,但IPv6的子网掩码长度为128位,范围更广。
总的来说,子网的范围是由其网络地址和子网掩码共同确定的。
在常见的子网规划中,子网中的IP地址通常是从子网的第一个可用地址开始,到倒数第二个可用地址结束。这是因为通常情况下,子网中的第一个地址是网络地址,用于标识整个子网,而最后一个地址是广播地址,用于向子网中的所有设备发送消息。
因此,如果一个子网的地址范围是从0开始到2结束,那么通常情况下,这个子网的可用IP地址是从1开始到1结束,因为0通常用作网络地址,2通常用作广播地址。
NAT(Network Address Translation)是一种网络地址转换技术,用于在私有网络和公共网络之间转换IP地址。它允许多个设备共享单个公共IP地址,这对于家庭网络或企业网络中的多台设备同时访问互联网非常有用。NAT将内部网络中的私有IP地址转换为公共IP地址,以便在互联网上进行通信,同时还负责将互联网上的响应数据包转发回相应的内部设备。
DHCP(Dynamic Host Configuration Protocol)是一种用于自动分配IP地址和其他网络配置信息的协议。当设备连接到网络时,它可以向DHCP服务器发送请求,以获取可用的IP地址、子网掩码、默认网关和DNS服务器等网络配置信息。DHCP服务器收到请求后,将分配一个未被占用的IP地址给设备,并提供其他必要的网络配置信息,这样设备就能够自动配置自己的网络连接,而无需手动设置。
综上所述,NAT用于将私有网络和公共网络之间的IP地址进行转换,而DHCP则用于自动分配IP地址和其他网络配置信息。这两种技术通常一起使用,以简化网络管理并提供更好的网络连接体验。
我们设置nat和dhcp的前提是你的子网ip要设置好,我们前面提到的子网ip最后一位的地址应从0开始到2结束,这里如果没有配置好后面会影响网络的连接也就是所说的ping,我这里子网ip设置的是192.168.6.0。子网掩码一般默认都是255.255.255.0
nat里面设置的就是网关ip的截止范围,我设置的是192.168.6.2
dhcp里面的起始IP地址和结束地址我设置的是192.168.6.128和192.168.6.254。这是默认的范围。
2.1.2克隆三台虚拟机
克隆的虚拟机与原始虚拟机之间有几个主要区别:
1.唯一标识符:克隆的虚拟机通常会被分配一个新的唯一标识符(如MAC地址、UUID等),以避免与原始虚拟机产生冲突。这确保了它们在网络中的唯一性。
2.初始状态:克隆的虚拟机可能处于与原始虚拟机不同的初始状态。例如,如果原始虚拟机在创建克隆之前处于运行状态,那么克隆的虚拟机可能会处于关机状态,除非显式地选择了克隆时包含运行状态的选项。
3.存储空间:克隆的虚拟机可能与原始虚拟机共享相同的虚拟硬盘镜像,这意味着它们共享相同的基础存储空间。但也可以选择创建一个完全独立的虚拟硬盘,这样克隆与原始虚拟机之间的存储空间就会有所区别。
4.网络设置:克隆的虚拟机可能需要调整其网络设置,以确保在网络中不会与原始虚拟机发生冲突。这可能涉及修改IP地址、MAC地址等网络配置信息。
总的来说,克隆的虚拟机通常是作为原始虚拟机的副本,但它们可能会有一些配置上的差异,以确保它们在同一网络环境中能够正常运行并且不会相互干扰。
然后我们需要为三台虚拟机分配地址,我选用的是最简单的方式如下图点击设置,点击IPv4分配地址,我三台虚拟机分配的地址分别是192.168.6.136/192.168.6.129/192.168.6.130
2.1.3修改网络配置文件vi /etc/sysconfig/network-scripts/ifcfg-ens3
BOOTPROTO=”dhcp”要修改成static ONBOOT=””这个””里面的东西要改成yes三台虚拟机都要
操作
利用ping查看是否可以成功上网
3 克隆虚拟机的配置操作
3.1 开启Hadoop02,修改主机名
修改 Hadoop 集群中的主机名通常是为了确保网络通信和节点识别的正常运行。以下是一些常见的原因:
1.节点识别和通信:Hadoop 集群中的各个节点之间需要相互通信,并识别彼此。如果节点的主机名设置不正确,可能会导致节点无法识别对方,从而导致通信失败或者集群运行不稳定。
2.服务发现:Hadoop 的各种组件(如 NameNode、DataNode、ResourceManager、NodeManager 等)需要相互发现和连接。如果节点主机名设置不正确,可能会导致某些组件无法正常启动或者无法加入集群。
3.安全性:在安全模式下运行 Hadoop 时,节点之间的通信可能会经过安全认证和授权。如果节点的主机名设置不正确,可能会导致安全认证失败,从而影响集群的安全性。
4.日志和监控:Hadoop 集群通常会生成大量的日志数据,用于监控和故障排除。正确设置主机名可以帮助管理员轻松地识别和管理集群中的各个节点。
总之,通过确保节点主机名设置正确,可以确保 Hadoop 集群的稳定性、安全性和可管理性。
3.2利用ifconfig查看mac地址
3.2.1网络配置文件修改(标红需要修改,IP自己设置,mac用步骤5查到地址,网关为ip地址最后改为2)
3.3重新启动网络配置(查看网络是否可用)
4 配置hosts文件和ssh免密登录
配置hosts文件和SSH免密登录在一些情况下是非常有用的,特别是在设置和管理网络中的多台计算机或虚拟机时。
配置hosts文件的目的:
主机名解析:hosts文件将主机名映射到对应的IP地址,这样你就可以通过主机名而不是IP地址来访问其他计算机或虚拟机。这在管理多个主机时可以方便地记住各个主机的名称,而不需要记住其IP地址。
本地测试和开发:有时,你可能在本地搭建一些测试环境或者开发环境,通过配置hosts文件,你可以使用自定义的域名来访问这些本地服务,而不需要使用公共域名或IP地址。
网络性能优化:在一些情况下,通过hosts文件直接指定主机名与IP地址的映射可以提高网络访问速度,尤其是当你在本地网络中访问一些常用的服务时。
配置SSH免密登录的目的:
方便管理:当你需要在多台主机之间频繁地进行文件传输、远程执行命令或管理任务时,使用SSH免密登录可以简化登录流程,提高效率。
自动化:在自动化脚本或任务中,需要在多个主机之间进行通信时,SSH免密登录可以使这些任务更容易实现,不需要手动输入密码。
安全性:尽管SSH免密登录依赖于公钥加密,但相较于密码登录,它通常被认为更安全。因为即使密钥泄露,也需要配对的私钥才能登录,而不是简单地通过密码就能登录。
4.1 修改hosts配置文件(所有虚拟机都需要配置此文件)
进入vi然后进入/etc/hosts文件vi /etc/hosts把三台克隆虚拟机的地址和主机名写进hosts文件
4.2 生成密钥文件(四次回车)
生成密钥文件的主要目的是实现安全的身份验证和数据传输。当你使用SSH协议进行远程登录或文件传输时,密钥文件可以用来验证你的身份,而不需要输入密码。这比传统的基于密码的身份验证更安全,因为密钥文件是基于非对称加密的,比密码更难以被破解。
具体来说,生成密钥文件有以下几个优点:
1.更安全的身份验证:使用密钥文件进行身份验证比基于密码的身份验证更安全,因为密钥文件通常比密码更难以猜测或被破解。
2.免去密码输入:一旦设置好密钥文件,你就可以在远程登录时免去输入密码的步骤,这样可以提高操作效率,特别是在需要频繁登录的情况下。
3.简化访问管理:当你管理多台计算机或虚拟机时,使用密钥文件可以简化访问管理,你可以将公钥部署到需要访问的所有机器上,而无需为每台机器设置单独的密码。
4.加密数据传输:SSH密钥文件还可以用于加密数据传输,确保数据在传输过程中不被窃取或篡改。
因此,生成密钥文件是一种增强SSH安全性和便利性的方法,特别是在需要频繁进行远程登录或文件传输的情况下。
将本机公钥文件复制到其它虚拟机上(接收方需先开机)
在hadoop01上执行,先输出对应主机的密码,多台虚拟机配置操作,紧接着查看是否可以成功免密登录。
5 配置Xshell
5.1 下载安装软件Xshell
5.1.1什么是Xshell
Xshell 是一个功能强大的终端模拟器,主要用于远程登录到 Linux、Unix 和类 Unix 操作系统的服务器。它提供了一个图形化的界面,让用户可以轻松地通过 SSH、Telnet、Rlogin 和串口连接等方式访问远程主机。
Xshell 的主要作用包括:
1.远程登录: Xshell 可以通过 SSH、Telnet、Rlogin 等协议连接到远程服务器,提供一个安全的终端会话,让用户可以在本地操作远程主机上的命令行界面。
2.文件传输: Xshell 内置了文件传输工具,可以通过 SCP 或 SFTP 协议方便地在本地主机和远程主机之间传输文件。
3.远程管理: 用户可以在 Xshell 中执行远程管理任务,如配置服务器、安装软件、查看日志等。
4.会话管理: Xshell 允许用户保存和管理多个远程会话,可以方便地切换和管理多个远程连接。
5.脚本支持: Xshell 支持使用脚本语言(如 Python、VBScript)编写自动化任务,可以帮助用户自动执行重复性的操作。
下载Xshell可以直接去官网下载,下载完成之后直接打开Xshell后点击文件并选择新建,名称填hadoop01,主机填写hadoop01的IP地址,再点击用户身份验证,把hadoop01的账号,密码输入,就可以通过Xshell控制虚拟机,方便后续软件的传输。(重复步骤新建会话控制hadoop02,hadoop03)
5.2 Hadoop和jdk安装包的准备
5.2.1准备这俩个安装包hadoop-2.10.2.tar.gz、jdk-8u161-linux-x64.tar.gz(俩个安装包都可以去官网下载,注意文件格式是tar.gz)
在Xshell先进入software文件内,然后下载rz命令,并使用rz命令进行文件上传,此时会弹出上传的窗口,选择要上传的文件,点击确定即可将本地文件上传到Linux上。
5.2.2安装JDK(所有虚拟机都要操作)
首先解压jdk
紧接着重命名jdk目录
然后配置环境变量(vi /etc/profile),最后使配置文件生效(source /etc/profile)并查看是否配置成功
5.2.2安装Hadoop(所有虚拟机都要操作)
所有操作与解压jdk步骤一样,解压hadoop、打开配置文件、使文件失效、查看是否配置成功
6 Hadoop集群配置
首先在所有虚拟机根目录下新建文件夹export,export文件夹中新建data、servers和software文件
6.1进入主节点配置目录
6.1.1修改hadoop-env.sh文件
6.1.2修改core-site.xml文件
6.1.3修改hdfs-site.xml文件
6.1.4修改mapred-site.xml文件
6.1.5修改yarn-site.xml文件
6.1.6修改slaves文件
6.1.7将主节点中配置好的文件和hadoop目录copy给子节点
在Hadoop集群中,将主节点上配置好的文件和Hadoop安装目录复制到所有子节点是为了确保集群中的所有节点具有相同的配置和程序版本。这是为了确保集群中所有节点的一致性和可靠性。具体原因包括:
一致的配置文件:Hadoop集群中的各个节点需要具有相同的配置文件,如core-site.xml、hdfs-site.xml等。这些配置文件指定了集群的各种参数,如名称节点的位置、数据节点的数据存储路径等。通过复制配置文件,可以确保所有节点都采用相同的配置,避免配置不一致导致的问题。
相同的程序版本:所有节点需要安装相同版本的Hadoop软件。复制Hadoop安装目录可以确保所有节点都使用相同的程序版本,包括二进制文件、库文件和各种Hadoop组件。这样可以避免由于版本不匹配而导致的兼容性问题和运行时错误。
简化部署和维护:将配置文件和安装目录复制到所有节点可以简化集群的部署和维护工作。否则,管理员需要手动在每个节点上进行单独的配置和安装,增加了出错的可能性和工作量。
集群的一致性:Hadoop是一个分布式系统,所有节点需要协同工作来完成任务。通过确保所有节点的一致性,可以提高集群的稳定性和可靠性,减少因节点不一致而导致的问题和故障。
6.1.8使子节点中的配置文件生效
6.1.9在主节点格式化文件系统(hdfs namenode -format)(successfully formatted 格式化成功)
7 集群测试
7.1启动集群
7.1.1在主节点启动所有HDFS服务进程
7.1.2在主节点启动所有HDFS服务进程
7.1.3使用jps命令查看进程
使用jps命令可以查看当前在 Java 虚拟机(JVM)上运行的 Java 进程信息。确认进程是否运行:通过jps命令可以快速查看当前 JVM 上运行的 Java 进程列表,以确认特定的 Java 进程是否已经启动;识别 Java 进程的主类:jps -l参数可以显示每个 Java 进程的完整类名,帮助识别具体哪个 Java 应用程序或服务在运行;检查进程的状态:jps不仅仅显示 Java 进程的 PID 和类名,还可以显示 JVM 启动时传递给主类的参数,这对于诊断和调试问题非常有用;配合其他命令进行监控和管理:在开发和运维过程中,jps命令可以与其他命令结合使用,例如 jstack、jmap等,用于进一步分析和管理 Java 进程的内存使用、线程情况等;轻量且易于使用:jps是 JDK 自带的一个小工具,使用简单,无需安装额外软件,适用于快速查看 Java 进程信息的需求。
7.1.4关闭防火墙(所有克隆机都需要做)
关闭防火墙通常是为了确保在特定网络配置或测试环境中,网络流量能够无阻碍地通过。在某些情况下,特别是在虚拟化环境或局域网内部,关闭防火墙可能是必要的,以便允许不同机器之间的通信或确保特定服务能够正常运行。
然而,需要强调的是,关闭防火墙可能会增加系统面临网络攻击的风险。因此,在关闭防火墙时,应该仅限于安全的测试环境或特定配置下,并在完成测试后尽快重新启用防火墙以确保系统安全性。
7.2修改windows的hosts文件
7.2.1打开window下的C:\Windows\System32\drivers\etc打开hosts文件,在文件末添加三行代码:
192.168.121.134 hadoop01
192.68.121.135 hadoop02
192.168.121.136 hadoop03
自定义主机名解析:将 192.168.121.134 解析为 hadoop01,192.168.121.135 解析为 hadoop02,192.168.121.136 解析为 hadoop03。这样,当你在网络中访问 hadoop01、hadoop02 或 hadoop03 时,Windows 系统会将其解析为相应的 IP 地址,而不是通过 DNS 查询外部服务器获取解析结果。
通过UI界面查看Hadoop运行状态,在Windows系统下,访问http://hadoop01:50070,查看HDFS集群状态
7.2.2通过UI界面查看Hadoop运行状态
在Windows系统下,访问http://hadoop01:50070,查看HDFS集群状态
7.2.3在Windows系统下,访问http://hadoop01:8088,查看Yarn集群状态
8 简单数据测试(字频测试)
8.1查看HDFS上的数据文件。
打开HDFS的UI(http://hadoop01:50070),选择Utilities->Browse the file system,可看到该目录下无任何文件。
8.1.2创建词频统计的文本信息
先在集群主节点hadoop01上的/export/data/目录下(指令“cd /export/data”进入),执行指令“vi word.txt”,新建一个word.txt文本,编写内容。
8.1.3使用如下指令在HDFS上创建/wordcount/input目录
并将word.txt文件上传至该目录:
再次查看UI会发现/wordcount/input目录并存在word.txt文件。
8.1.4进入Hadoop解压包中的/share/hadoop/mapreduce/目录。
使用指令“ls”进行查看可看到hadoop-mapreduce-examples-2.7.4.jar示例包,该示例包主要用于词频统计。
之后使用下述指令执行该jar包程序,同时将结果保存到/wordcount/output路径下
执行过程中可打开Yarn的UI(http://hadoop01:8088)可查看运行状态。执行结束后,再次刷新HDFS的UI(http://hadoop01:50070)可看到HDFS上自动创建了结果目录/wordcount/output,里面_SUCCESS文件用于表示此次任务成功执行,part-r-00000表示词频统计的结果。
8.1.6点击part-r-00000文件,下载词频统计结果文件到本地并查看最后的统计结果。