文章目录
- CentOS 设置 Hadoop 单节点集群(Hadoop 单节点环境搭建)
- 下载Hadoop
- 准备启动Hadoop集群
- 配置 HADOOP_HOME 环境变量
- Hadoop 伪分布式模式配置
- 配置
- 设置SSH免密登陆
- 格式化文件系统
- 启动 NameNode 守护进程和 DataNode 守护进程
- 服务器创建 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
命令了。
关于环境变量的设置可以参考博客:
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 账号
- 运行命令
useradd hadoop
添加 hadoop 用户 - 给 hadoop 用户赋予 sudo 权限:
vi /etc/sudoers
:set nu
显示行数 - 在上图位置添加
hadoop ALL=(ALL) ALL
。 - 设置 hadoop 账号密码
passwd hadoop
- 切换 hadoop 账号
su - hadoop