大数据初学指南:在云服务器上搭建Hadoop伪分布式集群

云服务器搭建Hadoop伪分布式

目录

写在前面

实验环境

实验步骤

(一)准备工作

1.1创建hadoop用户:

1.2 下载vim

                  1.3 配置SSH无密码登录

(二)安装Java环境

2.1 安装jdk

2.2 配置环境变量

(三)Hadoop安装

(四)Hadoop单机配置(非分布式)

(五)Hadoop伪分布式配置

5.1 修改配置文件core-site.xml和hdfs-site.xml

5.2 配置完成后,执行 NameNode 的格式化

5.3 开启NameNode和DataNode守护进程


 

写在前面

封面与本文无关

笔者这学期学习了一门专业课“大数据技术导论”,接触到了许多全新的知识和技术栈,故简单记录一下学习过程。

⚠️⚠️⚠️本文不是hadoop安装和实操教程!笔者才疏学浅,内容如有错误,欢迎指正

关于Hadoop的介绍已经有很多非常详细的文章进行讲解,在此本文不过多赘述,主要是我自己也不明白😂

以下内容是一个入门级别的实验过程,在这个实验中我凭借一点粗浅的Linux知识——以及教材的实验指导,以及豆包老师和deep seek老师的现场答疑——在Linux系统上搭建了Hadoop平台,并且让它成功运行了一个简单的数据分析任务。

 (PS:详细可参考厦门大学林子雨教授的教程

https://dblab.xmu.edu.cn/blog/2441/

实验环境

我曾斥巨资买了阿里云服务器(Cent OS 7.9 64位),免去了安装虚拟机的麻烦。

连接服务器有两种方式,一是进入官方网站下的控制台,点击远程连接

二是直接在Windows电脑的终端里通过ssh命令连接

要注意的是IP地址一定要是公网IP。

实验步骤📚

(一)准备工作

1.1创建hadoop用户:

需要创建一个专门的 hadoop 用户来管理 Hadoop 服务,避免使用 root 用户直接操作以提升安全性。

具体步骤:

1.创建 hadoop 用户:adduser hadoop

2.设置用户密码:passwd hadoop

3.将 hadoop 用户加入 sudo 组:usermod -aG sudo hadoop

4.切换到刚刚创建的hadoop用户:su  -  hadoop

1.2 下载vim:

通过CentOS的包管理器yum下载,执行命令:sudo yum install vim -y

1.3 配置SSH无密码登录

云服务器已经安装SSH客户端和服务器端,但需要进行SSH无密码配置

为什么需要进行SSH无密码配置

呃,不执行这一步的话后续启动HDFS会报错

我的前车之鉴,启动 HDFS 时出现了 Permission denied(权限被拒绝) 错误,核心原因是 hadoop 用户缺少 SSH 免密登录本地服务器的权限。Hadoop 启动 start-dfs.sh 时,会通过 SSH 连接到本地节点(localhost 或服务器 hostname)来启动 NameNode、DataNode 等进程。但当前 hadoop 用户登录本地 SSH 时需要密码,且未配置免密登录,导致启动脚本无法自动完成连接,从而报权限错误。

SSH即 secure shell,就是安全地远程敲命令,简单来说,NameNode需要通过SSH去启动DataNode,所以我们需要在服务器内部创建一个信任关系让服务器自己通过SSH登录自己

1.生成SSH密钥对,执行后会在 ~/.ssh/ 目录下生成私钥 id_rsa 和公钥 id_rsa.pub。(私钥是服务器自己保存,公钥是给别人)

2.将公钥添加到授权列表(允许免密登录)

3.修改授权文件权限(SSH 对权限要求严格,必须执行)

4.验证免密登录是否生效

到这里免密登录就配置好了

(二)安装Java环境

2.1 安装jdk

进入/usr/lib目录,通过sudo mkdir jvm创建java的安装目录

执行sudo yum install java-1.8.0-openjdk java-1.8.0-openjdk-devel -y

通过ls查看目录下的安装文件

(阿里云还是非常贴心啊,知道我这个小白可能啥也看不懂,点击黄色的小灯泡每行命令和输出还有ai进行讲解)

2.2 配置环境变量

编辑环境变量配置文件:vim  ~/.bash_profile在文件末尾添加:

export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64 export PATH=$JAVA_HOME/bin:$PATH

执行source ~/.bash_profile使配置生效。

通过echo $JAVA_HOME可以验证配置正确.该命令正常执行,输出了环境变量 JAVA_HOME 的值,显示为 /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64。这表明系统中已正确配置并安装了指定版本的 OpenJDK 1.8。

最后输出java -version,可以看到该输出显示系统中安装的是 OpenJDK 1.8.0_412 版本,这是一个正常的 Java 版本查询结果。输出内容包含了运行环境和虚拟机的具体构建信息,表明 Java 环境已正确安装并可正常使用。

 

(三)Hadoop安装

我本来想在终端直接从官方镜像下载:

wgethttps://archive.apache.org/dist/hadoop/common/hadoop-3.3.6/hadoop-3.3.6.tar.gz

但下载速度太慢,于是我先下载到我的Windows电脑本地,再在powershell中通过scp命令(基于SSH的安全文件传输协议),上传到云服务器,存储在hadoop用户的/home/hadoop目录下


登录云服务器,使用 sudo 权限将文件移动到 /usr/local/ 目录。sudo mv /home/hadoop/hadoop-3.3.6.tar.gz /usr/local/

进入 /usr/local 目录,执行解压命令(需 sudo 权限,因为 /usr/local 是系统目录):

sudo tar -zxvf hadoop-3.3.6.tar.gz -C /usr/local/


命令解释

sudo:获取管理员权限;

tar -zxvf:解压 tar.gz 格式压缩包的固定参数(z= 处理 gzip 压缩,x= 解压,v= 显示解压过程,f= 指定压缩包文件);

hadoop-3.3.6.tar.gz:要解压的文件名;

-C /usr/local/:指定解压后的文件存放目录(这里就是 /usr/local,解压后会生成 hadoop-3.3.6 子目录)。

解压后会生成 hadoop-3.3.6 文件夹,可重命名为 hadoop(后续配置环境变量更简洁):sudo mv ./hadoop-3.1.3/ ./hadoop

为了让 hadoop 用户拥有对解压后目录的完整操作权限,执行:sudo chown -R hadoop:hadoop /usr/local/hadoop/

chown -R:递归修改目录及所有子文件的所有者;

hadoop:hadoop:将所有者和所属组都设为 hadoop 用户,避免后续操作权限不足。


输入命令./bin/hadoop version来检查 Hadoop 是否可用,成功则会显示 Hadoop 版本信息:

该输出显示 Hadoop版本信息,表明Hadoop已成功安装并运行。版本为3.3.6,编译时间为2023年6 月18日,使用的平台是linux-x86_64,并且提供了源代码仓库链接和校验码等详细信息。这是一个正常的命令执行结果,没有报错。

 

 

(四)Hadoop单机配置(非分布式)

Hadoop 默认模式为非分布式模式(本地模式),无需进行其他配置即可运行。非分布式即单 Java 进程,方便进行调试。

Hadoop本身可以在计算机集群环境下运行,这里在本地模式中运行也就是只在一台机器上运行,不联网,不分任务

现在我们可以执行例子来感受下 Hadoop 的运行。Hadoop 附带了丰富的例子,

运行

./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar

 可以看到所有例子,包括 wordcount、terasort、join、grep 等。

在此我们选择运行 grep 例子.在/usr/local/hadoop文件夹下新建文件夹input,然后将/usr/local/hadoop/etc/hadoop目录下的配置文件复制到input目录,命令:

cp ./etc/hadoop/*.xml ./input

接下来,我们将 input 文件夹中的所有文件作为输入,筛选当中符合正则表达式 dfs[a-z.]+ 的单词(就是dfs开头的单词)并统计出现的次数,最后输出结果到 output 文件夹中。

通过ls查看iuput文件夹中文件如下:

执行命令后,输出了很长的一段日志信息:

部分如下:

执行成功后如下所示,输出了作业的相关信息,输出的结果是符合正则的单词 dfsadmin 出现了1次

 

(五)Hadoop伪分布式配置

Hadoop 可以在单节点上以伪分布式的方式运行,Hadoop 进程以分离的 Java 进程来运行,节点既作为 NameNode 也作为 DataNode,同时,读取的是 HDFS 中的文件。

Hadoop 的配置文件位于 /usr/local/hadoop/etc/hadoop/ 中,伪分布式需要修改2个配置文件 core-site.xml 和 hdfs-site.xml 。Hadoop的配置文件是 xml 格式,每个配置以声明 property 的 name 和 value 的方式来实现。

5.1 修改配置文件core-site.xml和hdfs-site.xml

Hadoop配置文件说明:

Hadoop 的运行方式是由配置文件决定的(运行 Hadoop 时会读取配置文件),因此如果需要从伪分布式模式切换回非分布式模式,需要删除 core-site.xml 中的配置项。

5.2 配置完成后,执行 NameNode 的格式化

 

命令解释:

该日志显示 Hadoop 的 NameNode 正在执行格式化操作,并成功完成了初始化过程。

整个流程是典型的首次启动或重新初始化 Hadoop 集群时的操作步骤,没有出现错误。如果是在首次部署或者重置环境,这是预期的行为。如果已经存在数据不希望被清空,请注意不要重复执行 -format 操作。

 

5.3 开启NameNode和DataNode守护进程

这里我运行./sbin/start-dfs.sh遇到了一个问题

出现了 ERROR: JAVA_HOME is not set and could not be found 错误,核心原因是 Hadoop 无法识别到 JAVA_HOME 环境变量(即 JDK 安装路径未正确配置)

错误本质:Hadoop 启动脚本(如 start-dfs.sh)依赖 JAVA_HOME 来定位 JDK 路径,但当前系统中该变量未被正确设置或未被 Hadoop 识别。

影响范围:NameNode、DataNode、SecondaryNameNode 等 HDFS 核心进程均因找不到 JDK 而无法启动。

解决方法:在 Hadoop 配置中明确指定 JAVA_HOME,需在 Hadoop 的环境配置文件中强制设置 JAVA_HOME(即使系统环境变量已配置,Hadoop 有时也需要单独指定)

 

编辑 Hadoop 的环境配置文件 hadoop-env.sh:

在文件中找到或添加以下内容export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64

重新启动HDFS,终于,成功了!!!

启动完成后,可以通过命令 jps 来判断是否成功启动

命令解释:

该输出显示了当前系统中正在运行的Java进程及其对应的PID进程标识符。jps命令用于列出所有正在运行的JVM进程。

7472 NameNode:这是HDFS中的主节点服务,负责管理文件系统的命名空间和客户端请求

7768 SecondaryNameNode:辅助NameNode进行一些检查点操作,以防止NameNode出现单点故障

7583 DataNode:HDFS的工作节点,负责存储实际的数据块并执行来自NameNode的操作指令

8895 Jps:即当前执行的jps命令本身也是一个Java进程。

这些信息表明系统上已经成功启动了Hadoop的相关服务,并且它们都在正常运行中。

(六)运行Hadoop伪分布式实例

好的,什么是伪分布式,我们还是只有一台机器,但是让它在内部模拟一个小集群,即NameNode和DataNode在同一台机器上,仍然是统计词频的任务,但这次我们把数据上传在HDFS里,而不是本地硬盘

上面的单机模式,grep 例子读取的是本地数据,伪分布式读取的则是 HDFS 上的数据。要使用 HDFS,首先需要在 HDFS 中创建用户目录:

实际上有三种shell命令方式。
1. hadoop fs
2. hadoop dfs
3. hdfs dfs

hadoop fs适用于任何不同的文件系统,比如本地文件系统和HDFS文件系统
hadoop dfs只能适用于HDFS文件系统
hdfs dfs跟hadoop dfs的命令作用一样,也只能适用于HDFS文件系统

接着将 ./etc/hadoop 中的 xml 文件作为输入文件复制到分布式文件系统中,即将 /usr/local/hadoop/etc/hadoop复制到分布式文件系统中的 /user/hadoop/input中。我们使用的是 hadoop 用户,并且已创建相应的用户目录 /user/hadoop ,因此在命令中就可以使用相对路径如 input,其对应的绝对路径就是 /user/hadoop/input:

伪分布式运行 MapReduce 作业的方式跟单机模式相同

查看运行结果的命令(查看的是位于 HDFS 中的输出结果):

关闭 Hadoop

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值