一、安装JDK
本文所搭建 Hadoop 伪分布式环境将使用 Oracle JDK 8 ,将从 Oracle Java SE 8 Archive Downloads 页面中下载 Linux 版本的 JDK ,下载地址如下:
Java Archive Downloads - Java SE 8u211 and later
建议下载 .tar.gz 格式的压缩包,以便于对 JDK 版本做出更为便利的管理,可根据实际需求将 JDK 压缩包放置到合适的位置,本文将压缩包放置到 /opt/software 目录下,并在此解压
localhost:/opt/software # tar -zxvf jdk-8u441-linux-x64.tar.gz
其中 jdk-8u441-linux-x64.tar.gz 为本文所使用的 JDK 压缩包文件名,请根据实际文件名作出修改
解压完成后对 Java 目录创建链接,以便于配置环境变量,切换 Java 版本仅需更改链接目标而无需更改环境变量,本文将在 /opt/softln 目录下创建链接,此步为可选操作,可根据自身实际需求进行调整执行
localhost:/opt/software # ls
jdk-8u441-linux-x64.tar.gz jdk1.8.0_441
localhost:/opt/software # ln -sfn /opt/software/jdk1.8.0_441 /opt/softln/java
修改 /etc/profile 文件配置环境变量,多种远程 ssh 连接客户端如 MobaXterm 等可使用 NotePad++ 等工具对 Linux 端文件进行修改,本文使用 vim
localhost:~ # vim /etc/profile
在文件末尾追加以下内容:
export JAVA_HOME=/opt/softln/java
export PATH=$PATH:$JAVA_HOME/bin
其中 JAVA_HOME 变量的值根据实际作出调整
保存后执行
localhost:~ # source /etc/profile
使配置的环境变量生效,验证
localhost:~ # java -version
java version "1.8.0_441"
Java(TM) SE Runtime Environment (build 1.8.0_441-b07)
Java HotSpot(TM) 64-Bit Server VM (build 25.441-b07, mixed mode)
二、添加hadoop用户和组
为了使权限管理更为精细化,本文中 hadoop 将不以 root 用户运行,而是添加 hadoop 用户和组以便于后续更为精细化的权限管理
添加 hadoop 组:
localhost:~ # groupadd hadoop
添加 hadoop 用户:
localhost:~ # useradd hadoop -g hadoop
三、配置ssh免密登录
将用户切换为 hadoop 并进入用户主目录
localhost:~ # su hadoop
hadoop@localhost:/root> cd ~
创建并进入 .ssh 目录
hadoop@localhost:~> mkdir -p .ssh && cd .ssh
生成私钥与公钥
hadoop@localhost:~/.ssh> ssh-keygen -t ecdsa -N '' -f './id_ecdsa' –q
hadoop@localhost:~/.ssh> cat id_ecdsa.pub > authorized_keys
hadoop@localhost:~/.ssh> chmod 600 authorized_keys
hadoop@localhost:~/.ssh> chmod 700 ~/.ssh
现在免密登录时还会出现
hadoop@localhost:~/.ssh> ssh localhost
The authenticity of host 'localhost (::1)' can't be established.
ED25519 key fingerprint is SHA256:z5X8ELs2z1M9G20p5nowFijsselts3UO6VZN63GMoVg.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])?
切换 root 用户修改 /etc/ssh/ssh_config ,找到
# StrictHostKeyChecking ask
取消注释改为
StrictHostKeyChecking no
切换回 hadoop 用户测试免密登录
hadoop@localhost:~/.ssh> ssh localhost
Warning: Permanently added 'localhost' (ED25519) to the list of known hosts.
Have a lot of fun...
hadoop@localhost:~>
四、安装配置Hadoop
国内镜像站或 Apache Archive 均可下载 Hadoop ,本文将安装 Hadoop 2.10.2 ,可在以下链接中下载
Apache Archive
Index of /dist/hadoop/common/hadoop-2.10.2
中国科学技术大学镜像站
Index of /apache/hadoop/common/hadoop-2.10.2/
推荐使用国内镜像站下载
将压缩包放置到合适的位置,本文依然将压缩包放置到 /opt/software 下,并在此解压
localhost:/opt/software # tar -zxvf hadoop-2.10.2.tar.gz
其中 hadoop-2.10.2.tar.gz 为本文所使用的压缩包文件名,请根据实际文件名修改
解压完成后创建对 Hadoop 目录创建链接,以便于配置环境变量,本文将在 /opt/softln 目录下创建链接,此步为可选操作,可根据自身实际需求进行调整执行
localhost:/opt/software # ls
hadoop-2.10.2 hadoop-2.10.2.tar.gz jdk-8u441-linux-x64.tar.gz jdk1.8.0_441
localhost:/opt/software # ln -sfn /opt/software/hadoop-2.10.2 /opt/softln/hadoop
更改目录归属,使其归属于 hadoop 用户和组
localhost:/opt/software # chown -R hadoop:hadoop hadoop-2.10.2
修改 /etc/profile 文件配置环境变量,将文件末尾环境变量配置修改为
export JAVA_HOME=/opt/softln/java
export HADOOP_HOME=/opt/softln/hadoop
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
其中 HADOOP_HOME 变量的值根据实际做出调整
保存以后执行
localhost:~ # source /etc/profile
使配置的环境变量生效
修改主机名为 master 并重新启动,可根据需要选择其他主机名
localhost:~ # hostnamectl set-hostname master
localhost:~ # reboot
配置 /etc/hosts 文件,向文件末尾追加
192.168.171.129 master
其中 master 为上文所设置的主机名, 192.168.171.129 为当前 Linux 主机 IP ,请根据实际情况作出修改
切换为 hadoop 用户并创建 tmp 目录, name 目录和 data 目录,本文中将这三个目录放置到 $HADOOP_HOME 中,可根据需求灵活选择
master:~ # su hadoop
hadoop@master:/root> mkdir -p $HADOOP_HOME/tmp
hadoop@master:/root> mkdir -p $HADOOP_HOME/hdfs/data
hadoop@master:/root> mkdir -p $HADOOP_HOME/hdfs/name
配置 $HADOOP_HOME/etc/hadoop/core-site.xml
在 <configuration> 标签中加入配置
<property>
<name>hadoop.tmp.dir</name>
<value>file:/opt/softln/hadoop/tmp</value>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
/opt/softln/hadoop/tmp 值为先前创建的 tmp 目录, hdfs://master:9000 中的 master 为先前配置的主机名,请根据实际情况修改
配置 $HADOOP_HOME/etc/hadoop/hadoop-env.sh
将
export JAVA_HOME=${JAVA_HOME}
改为
export JAVA_HOME=/opt/softln/java
/opt/softln/java 为先前创建的链接,请根据实际情况修改
配置 $HADOOP_HOME/etc/hadoop/hdfs-site.xml
在 <configuration> 标签中加入配置
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/opt/softln/hadoop/hdfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/opt/softln/hadoop/hdfs/data</value>
</property>
其中 /opt/softln/hadoop/hdfs/name 与 /opt/softln/hadoop/hdfs/data 均为上文所创建的 name 和 data 目录,请根据实际情况作出修改
配置 $HADOOP_HOME/etc/hadoop/mapred-site.xml
执行
hadoop@master:/root> cp $HADOOP_HOME/etc/hadoop/mapred-site.xml.template $HADOOP_HOME/etc/hadoop/mapred-site.xml
在 <configuration> 标签中加入配置
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapred.job.tracker</name>
<value>http://master:9001</value>
</property>
其中 http://master:9001 中的 master 为上文配置的主机名,请根据实际情况修改
配置 $HADOOP_HOME/etc/hadoop/yarn-env.sh
将
JAVA_HOME=$JAVA_HOME
改为
JAVA_HOME=/opt/softln/java
/opt/softln/java 为先前创建的链接,请根据实际情况修改
配置 $HADOOP_HOME/etc/hadoop/yarn-site.xml
在 <configuration> 标签中加入配置
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
其中 master 为上文配置的主机名,请根据实际情况修改
五、格式化NameNode
切换到 hadoop 用户执行
hadoop@master:~> hdfs namenode –format
六、启动dfs和yarn
操作前请先切换到 hadoop 用户
启动 dfs
hadoop@master:~> start-dfs.sh
Starting namenodes on [master]
master: starting namenode, logging to /opt/software/hadoop-2.10.2/logs/hadoop-hadoop-namenode-master.out
localhost: starting datanode, logging to /opt/software/hadoop-2.10.2/logs/hadoop-hadoop-datanode-master.out
Starting secondary namenodes [0.0.0.0]
0.0.0.0: Warning: Permanently added '0.0.0.0' (ED25519) to the list of known hosts.
0.0.0.0: starting secondarynamenode, logging to /opt/software/hadoop-2.10.2/logs/hadoop-hadoop-secondarynamenode-master.out
访问 http://192.168.171.129:50070/ 正常, 192.168.171.129 为本文 Linux 主机 IP ,请根据实际情况修改
启动 yarn
hadoop@master:~> start-yarn.sh
starting yarn daemons
starting resourcemanager, logging to /opt/software/hadoop-2.10.2/logs/yarn-hadoop-resourcemanager-master.out
localhost: starting nodemanager, logging to /opt/software/hadoop-2.10.2/logs/yarn-hadoop-nodemanager-master.out
访问 http://192.168.171.129:8088/ 正常, 192.168.171.129 为本文 Linux 主机 IP ,请根据实际情况修改
七、测试hdfs
生成测试文本文件
hadoop@master:~> echo "Hello Hadoop!" > test.txt
hadoop@master:~> ls
test.txt
hdfs 创建测试目录
hadoop@master:~> hdfs dfs -mkdir /test
hadoop@master:~> hdfs dfs -ls /
Found 1 items
drwxr-xr-x - hadoop supergroup 0 2025-05-21 13:07 /test
hdfs 向测试目录上传文件
hadoop@master:~> hdfs dfs -put ./test.txt /test
hadoop@master:~> hdfs dfs -ls /
Found 1 items
drwxr-xr-x - hadoop supergroup 0 2025-05-21 13:09 /test
hadoop@master:~> hdfs dfs -ls /test
Found 1 items
-rw-r--r-- 3 hadoop supergroup 14 2025-05-21 13:09 /test/test.txt
查看测试文件内容
hadoop@master:~> hdfs dfs -cat /test/test.txt
Hello Hadoop!
八、测试yarn
wordcount 测试
hadoop@master:~> hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.10.2.jar wordcount /test/test.txt /testout
查看运行结果
hadoop@master:~> hdfs dfs -ls /
Found 3 items
drwxr-xr-x - hadoop supergroup 0 2025-05-21 13:09 /test
drwxr-xr-x - hadoop supergroup 0 2025-05-21 13:19 /testout
drwx------ - hadoop supergroup 0 2025-05-21 13:19 /tmp
hadoop@master:~> hdfs dfs -ls /testout/
Found 2 items
-rw-r--r-- 3 hadoop supergroup 0 2025-05-21 13:19 /testout/_SUCCESS
-rw-r--r-- 3 hadoop supergroup 18 2025-05-21 13:19 /testout/part-r-00000
hadoop@master:~> hdfs dfs -cat /testout/*
Hadoop! 1
Hello 1