Hadoop安装
Hadoop搭建
默认已经安装并配置好Java
hadoop下载地址:https://archive.apache.org/dist/hadoop/
准备目录
mkdir /opt/module
创建帐户
使用root用户创建hadoop用户
useradd -m hadoop -s /bin/bash
adduser hadoop sudo
更改密码
sudo passwd hadoop
进入hadoop用户
su - hadoop
解压安装包
在 /opt/software
目录下进行
tar -zxf hadoop-3.3.1.tar.gz -C /opt/module
编辑环境变量
修改~/.bashrc
,添加:
#HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-3.3.1
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_YARN_HOME=$HADOOP_HOME
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
生效
source ~/.bashrc
测试是否安装成功
正常返回版本即为成功
hadoop version
Hadoop 3.3.1
Source code repository https://github.com/apache/hadoop.git -r a3b9c37a397ad4188041dd80621bdeefc46885f2
Compiled by ubuntu on 2021-06-15T05:13Z
Compiled with protoc 3.7.1
From source with checksum 88a4ddb2299aca054416d6b7f81ca55
This command was run using /opt/module/hadoop-3.3.1/share/hadoop/common/hadoop-common-3.3.1.jar
伪分布式
免密配置
登录ssh
ssh localhost
输入yes后,输入hadoop用户的密码登录
登陆完成后
exit
cd ~/.ssh/
ssh-keygen -t rsa
然后一路回车
将生成的SSH的公钥加入目标机器的SSH目录下,这里采用cat命令与>>,cat file1>>file2的含义为将file1内容append到file2中。
cat ./id_rsa.pub >> ./authorized_keys
配置4个文件
进入到配置文件目录
cd /opt/module/hadoop-3.3.1/etc/hadoop
core-site.xml
vim core-site.xml
打开xml文件应该是有内容的,如果没有内容说明打开文件不对,需要检查输入的路径及文件名是否正确。将替换为以下内容,第一个属性表示Hadoop重要临时文件的存放目录,指定后需将使用到的所有子级文件夹都要手动创建出来,否则无法正常启动服务;第二个被官方称之为默认系统文件的名称(the name of the default file system),实际上决定了文件系统的主机号、端口号,对于伪分布式模型来说,其主机地址为localhost。
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/data</value>
</property>
</configuration>
mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=/opt/module/hadoop-3.3.1</value>
</property>
<property>
<name>mapreduce.map.env</name>
<value>HADOOP_MAPRED_HOME=/opt/module/hadoop-3.3.1</value>
</property>
<property>
<name>mapreduce.reduce.env</name>
<value>HADOOP_MAPRED_HOME=/opt/module/hadoop-3.3.1</value>
</property>
</configuration>
yarn-site.xml
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
格式化
hdfs namenode -format
显示信息内若包含以下内容,则说明成功格式化:

启动全部进程
start-all.sh
启动时可能会报错:ERROR: JAVA_HOME is not set and could not be found.
进入到/opt/module/hadoop-3.3.1/etc/hadoop
vim hadoop-env.sh
添加java环境变量
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
source hadoop-env.sh
再次启动全部进程
start-all.sh
输入jps查看到6个进程就是成功启动了(包括jps)
51713 DataNode
52418 NodeManager
52806 Jps
51992 SecondaryNameNode
51547 NameNode
52252 ResourceManager
我的并不是6个只有3个,原因是因为hadoop目录/usr/local/hadoop
是root用户创建的,需要指定给用户hadoop。
sudo chown -R hadoop /usr/local/hadoop
访问部署hadoop的9870端口,就可以看到以下界面。(hadoop2.x是访问50070)

端口名称 | Hadoop2.x | Hadoop3.x |
---|---|---|
NameNode内部通信端口 | 8020 / 9000 | 8020 / 9000/9820 |
NameNode HTTP UI | 50070 | 9870 |
MapReduce查看执行任务端口 | 8088 | 8088 |
历史服务器通信端口 | 19888 | 19888 |
调用示例
准备工作
在HDFS中创建用户目录
hdfs dfs -mkdir -p /user/hadoop
创建input目录,用于输入数据
hdfs dfs -mkdir input
将所需的xml配置文件复制到input中
hdfs dfs -put /opt/module/hadoop-3.3.1/etc/hadoop/hdfs-site.xml input
如果系统之前运行过hadoop,则需要删除output目录
hdfs dfs -rm -r output
调用示例
cd /opt/module/hadoop-3.3.1/share/hadoop/mapreduce
输入
hadoop jar ./hadoop-mapreduce-examples-3.3.1.jar wordcount input output
耐心等待结果输出。
这里遇到了这个问题:
错误: 找不到或无法加载主类 org.apache.hadoop.mapreduce.v2.app.MRAppMaster

解决办法:
编辑 Hadoop 安装目录下 etc/hadoop/mapred-site.xml 文件,在 < configuration >
标签和 < /configuration >
标签之间添加如下配置
<property>
<name>mapreduce.application.classpath</name>
<value>/opt/module/hadoop-3.3.1/share/hadoop/mapreduce/*, /opt/module/hadoop-3.3.1/share/hadoop/mapreduce/lib/*</value>
</property>
修改完重启hadoop
stop-all.sh
start-all.sh
再次调用示例
hadoop jar ./hadoop-mapreduce-examples-3.3.1.jar wordcount input output
查看运行结果
hdfs dfs -cat output/*