CentOS 设置 Hadoop 单节点集群(Hadoop 单节点环境搭建)

CentOS 设置 Hadoop 单节点集群(Hadoop 单节点环境搭建)

关于Hadoop单节点环境的搭建可以参看官方文档:
https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/SingleCluster.html

本文基于 CentOS 8 搭建 Hadoop 单节点集群。由于 Hadoop 是 Java 开发的所以在搭建 Hadoop 服务之前首先要确定自己的机器上已安装 Java 运行环境。
这里不推荐使用root账号进行配置,最好新建一个hadoop的账号,具体创建步骤可以参考: 服务器创建 hadoop 账号

下载Hadoop

Apache Hadoop的下载地址是:http://www.apache.org/dyn/closer.cgi/hadoop/common/ 依照自己的需求选择合适的版本,这里我选择 3.3.1 稳定版
在这里插入图片描述
下载地址

准备启动Hadoop集群

解压下载的Hadoop发行版。

tar -zxvf hadoop-3.3.1.tar.gz

编辑hadoop目录下的etc/hadoop/hadoop-env.sh文件,定义如下参数:

  # 设置为Java安装的根目录
  export JAVA_HOME=/opt/java/jdk1.8.0_301

如下图所示:
在这里插入图片描述
我们可以在 hadoop 的 bin 目录下运行 hadoop 命令,控制台会显示 hadoop 脚本的使用文档,具体如下:

[root@stackstone-001 bin]# ./hadoop
Usage: hadoop [OPTIONS] SUBCOMMAND [SUBCOMMAND OPTIONS]
 or    hadoop [OPTIONS] CLASSNAME [CLASSNAME OPTIONS]
  where CLASSNAME is a user-provided Java class

  OPTIONS is none or any of:

buildpaths                       attempt to add class files from build tree
--config dir                     Hadoop config directory
--debug                          turn on shell script debug mode
--help                           usage information
hostnames list[,of,host,names]   hosts to use in slave mode
hosts filename                   list of hosts to use in slave mode
loglevel level                   set the log4j level for this command
workers                          turn on worker mode

  SUBCOMMAND is one of:


    Admin Commands:

daemonlog     get/set the log level for each daemon

    Client Commands:

archive       create a Hadoop archive
checknative   check native Hadoop and compression libraries availability
classpath     prints the class path needed to get the Hadoop jar and the required libraries
conftest      validate configuration XML files
credential    interact with credential providers
distch        distributed metadata changer
distcp        copy file or directories recursively
dtutil        operations related to delegation tokens
envvars       display computed Hadoop environment variables
fs            run a generic filesystem user client
gridmix       submit a mix of synthetic job, modeling a profiled from production load
jar <jar>     run a jar file. NOTE: please use "yarn jar" to launch YARN applications, not this command.
jnipath       prints the java.library.path
kdiag         Diagnose Kerberos Problems
kerbname      show auth_to_local principal conversion
key           manage keys via the KeyProvider
rumenfolder   scale a rumen input trace
rumentrace    convert logs into a rumen trace
s3guard       manage metadata on S3
trace         view and modify Hadoop tracing settings
version       print the version

    Daemon Commands:

kms           run KMS, the Key Management Server
registrydns   run the registry DNS server

SUBCOMMAND may print help when invoked w/o parameters or with -h.

配置 HADOOP_HOME 环境变量

为了方便执行 hadoop 的相关命令,建议将 HADOOP_HOME/bin 添加到系统环境变量中。

[root@stackstone-001 hadoop-3.3.1]# pwd
/opt/hadoop/hadoop-3.3.1
[root@stackstone-001 hadoop-3.3.1]# vi ~/.bash_profile 

修改 ~/.bash_profile 文件具体如下图所示:
在这里插入图片描述

更新环境变量并进行验证

[root@stackstone-001 hadoop-3.3.1]# source ~/.bash_profile 
[root@stackstone-001 hadoop-3.3.1]# echo $HADOOP_HOME
/opt/hadoop/hadoop-3.3.1

这样的话就可以在系统的任意路径来执行 hadoop 命令了。

关于环境变量的设置可以参考博客:https://blog.csdn.net/flw8840488/article/details/90513873

Hadoop 伪分布式模式配置

Hadoop 可以以伪分布式模式运行在单个节点上,其中每个Hadoop守护进程运行在单独的 Java 进程中。

配置

在 Hadoop 目录下的 etc/hadoop/core-site.xml 中增加下面的配置:

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://127.0.0.1:9000</value>
    </property>
</configuration>

在服务器中可以设置 hosts 映射服务器内网IP域名,具体如下:
运行命令 vi /etc/hosts
在这里插入图片描述
加入服务器本地的ip地址并自定义域名,这里我用的是 stackstone-001,这样的话上面的配置就可以写做:
<configuration>
  <property>
     <name>fs.defaultFS</name>
    <value>hdfs://stackstone-001:9000</value>
  </property>
</configuration>

当然端口也不一定是9000端口,可以根据自己的需求来进行修改,关于 core-site.xml 相关配置的属性的说明可以参考官方文档:
https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/core-default.xml

这里建议配置一下 hadoop 的文件目录,该目录默认指向 /tmp/hadoop-${user.name},由于在 /tmp 目录下,所以一旦机器重启,数据会丢失。在服务器中创建数据目录存放地址,这里我创建了 /opt/hadoop_tmp_dir 目录,在 etc/hadoop/core-site.xml 中继续增加下面的配置:

<property>
    <name>hadoop.tmp.dir</name>
    <value>/opt/hadoop_tmp_dir</value>
</property>

之后在 Hadoop 目录下的 etc/hadoop/hdfs-site.xml 中增加下面的配置:

<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
</configuration>

这里指的是文件系统的副本系数。有关 hdfs-site.xml 相关配置属性的说明可以参考官方文档:
https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml

设置SSH免密登陆

现在检查是否可以在不使用密码的情况下 ssh 到本地主机:

$ ssh localhost

运行上面的命令,如果需要输入密码才能登陆到 localhost 的话,请执行以下命令:

  $ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
  $ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
  $ chmod 0600 ~/.ssh/authorized_keys

上面的命令依次执行就可以了, 执行完后输入ssh localhost就可以不用输入密码而直接登陆了。

格式化文件系统

启动 HDFS,在第一次执行的时候一定要格式化文件系统, 后面启动就不需要了。

 $ hdfs namenode -format

运行上面的语句,这个时候就会在之前我们配置的 /opt/hadoop_tmp_dir 目录下生成 dfs 目录文件信息。

启动 NameNode 守护进程和 DataNode 守护进程

$ sbin/start-dfs.sh

在 sbin 目录下运行上面的脚本,启动 HDFS 。如果出现下面的错误:

[root@stackstone-001 sbin]# ./start-dfs.sh 
Starting namenodes on [localhost]
ERROR: Attempting to operate on hdfs namenode as root
ERROR: but there is no HDFS_NAMENODE_USER defined. Aborting operation.
Starting datanodes
ERROR: Attempting to operate on hdfs datanode as root
ERROR: but there is no HDFS_DATANODE_USER defined. Aborting operation.
Starting secondary namenodes [stackstone-001]
ERROR: Attempting to operate on hdfs secondarynamenode as root
ERROR: but there is no HDFS_SECONDARYNAMENODE_USER defined. Aborting operation.

则设置脚本 start-dfs.sh ,增加3个变量设置:

HDFS_NAMENODE_USER=root
HDFS_DATANODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root

在这里插入图片描述

注: 最好不要用root账号来启动我们的Hadoop服务

启动成功后验证一下:

[root@stackstone-001 sbin]# jps
6017 DataNode
6262 SecondaryNameNode
9639 Jps
5869 NameNode
[root@stackstone-001 sbin]# hadoop dfs -mkdir /test
WARNING: Use of this script to execute dfs is deprecated.
WARNING: Attempting to execute replacement "hdfs dfs" instead.

[root@stackstone-001 sbin]# hdfs dfs -ls /
Found 1 items
drwxr-xr-x   - root supergroup          0 2021-08-05 18:16 /test

在hdfs下创建/test目录并查看,从上面的命令行可以看出,新版的命令改为:hdfs dfs 进行操作。
如果需要停止服务,则运行 stop-dfs.sh 脚本,如果出现和启动脚本一样的错误,同样在该脚本中加入 HDFS_NAMENODE_USER、HDFS_DATANODE_USER、HDFS_SECONDARYNAMENODE_USER 的设置。

另外我们还可以查看 Hadoop 的 web 界面 http://localhost:9870/,如下图所示
在这里插入图片描述


服务器创建 hadoop 账号

  1. 运行命令useradd hadoop 添加 hadoop 用户
  2. 给 hadoop 用户赋予 sudo 权限:
    vi /etc/sudoers
    :set nu 显示行数
    在这里插入图片描述
    在上图位置添加 hadoop ALL=(ALL) ALL
    在这里插入图片描述
  3. 设置 hadoop 账号密码 passwd hadoop
  4. 切换 hadoop 账号 su - hadoop
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Stack Stone

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值