Hadoop Linux 版本的下载地址主要有以下几个:
- Apache Hadoop 官方网站:Apache Hadoop ,该网站提供了 Hadoop 的各个版本的下载,包括最新版本以及历史版本等,用户可以根据自己的需求选择合适的版本进行下载3.
- Apache 软件基金会存档网站:https://archive.apache.org/dist/hadoop/common/ ,这里也汇集了 Hadoop 的众多版本,方便用户查找和下载旧版本的 Hadoop4.
以下是在 Linux 系统中加载 JDK8 的详细步骤:
下载 JDK8 安装包
- 前往 Oracle 官网下载对应 Linux 版本的 JDK8 安装包,官网下载地址为 Java Downloads | Oracle(Java Downloads | Oracle) ,需要登录 Oracle 账号才能下载4.
- 也可以通过其他途径获取,如国内的一些镜像站点等,但要注意安装包的完整性和安全性134.
安装 JDK8
- 创建安装目录:使用
mkdir
命令创建一个用于存放 JDK 的目录,例如mkdir /usr/local/java
- 解压安装包:将下载好的 JDK8 压缩包上传至 Linux 服务器,并使用
tar
命令解压到指定目录,如tar -zxvf jdk-8u341-linux-x64.tar.gz -C /usr/local/java/
,解压后会得到一个类似jdk1.8.0_341
的文件夹.
配置环境变量
- 编辑
/etc/profile
文件,可以使用vi
或vim
命令,如vi /etc/profile
- 在文件末尾添加以下内容,注意将
JAVA_HOME
的路径替换为实际的 JDK 安装路径:
bash
export JAVA_HOME=/usr/local/java/jdk1.8.0_341
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH
export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin
export PATH=$PATH:${JAVA_PATH}
使配置生效
- 执行
source /etc/profile
命令,使配置的环境变量立即生效
测试是否安装成功
- 在终端输入
java -version
命令,如果能正确显示 JDK8 的版本信息,则说明安装和加载成功
以下是在 Linux 系统中解压和安装 Hadoop - 3.3.1.tar.gz 的步骤:
一、解压 Hadoop 压缩包
1、确保你已经将hadoop - 3.3.1.tar.gz
文件下载到了你的 Linux 系统中。通常可以使用wget
命令从官方网站下载,例如(假设下载到/home/user/Downloads
目录下):
wget https://downloads.apache.org/hadoop/common/hadoop - 3.3.1.tar.gz -P /home/user/Downloads
上述命令中的-P
参数指定了下载文件的保存路径。
2、打开终端,切换到hadoop - 3.3.1.tar.gz
文件所在的目录。例如,如果文件在/home/user/Downloads
目录下,使用命令:
cd /home/user/Downloads
3、使用tar
命令解压文件。命令如下:
tar -zxvf hadoop - 3.3.1.tar.gz
其中,-z
表示使用gzip
格式解压,-x
表示解压,-v
表示显示解压过程的详细信息,-f
表示指定要解压的文件名。
4、解压完成后,会得到一个hadoop - 3.3.1
目录。你可以将这个目录移动到合适的位置,比如/usr/local
目录下(需要有足够的权限,可能需要使用sudo
命令)。命令如下:
sudo mv hadoop - 3.3.1 /usr/local
二、配置环境变量
1、
打开~/.bashrc
文件(这是用户级别的环境变量配置文件),可以使用以下命令:
vi ~/.bashrc
如果你更喜欢使用其他文本编辑器,如nano
,可以将vi
替换为nano
。
2、在~/.bashrc
文件的末尾添加以下内容:
export HADOOP_HOME=/usr/local/hadoop - 3.3.1
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
这些内容的作用是设置HADOOP_HOME
环境变量为 Hadoop 的安装目录,并将Hadoop
的bin
和sbin
目录添加到系统的PATH
环境变量中,这样就可以在任何目录下方便地使用 Hadoop 命令。
3、保存并退出~/.bashrc
文件。在vi
编辑器中,按Esc
键,然后输入:wq
保存并退出。
4、使环境变量配置生效,在终端中输入:source ~/.bashrc
三、配置 Hadoop 核心文件(以单机模式为例)
1、配置hadoop - env.sh
文件
打开$HADOOP_HOME/etc/hadoop/hadoop - env.sh
文件,使用命令:
vi $HADOOP_HOME/etc/hadoop/hadoop - env.sh
找到export JAVA_HOME
这一行,将其修改为你的 Java 安装路径。例如,如果 Java 安装在/usr/lib/jvm/java - 8 - openjdk - amd64
,则修改为export JAVA_HOME=/usr/lib/jvm/java - 8 - openjdk - amd64
。
2、配置core - site.xml
文件
打开$HADOOP_HOME/etc/hadoop/core - site.xml
文件,在<configuration>
标签内添加以下内容:
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
这里配置了 Hadoop 的默认文件系统为 HDFS(Hadoop Distributed File System),并且指定了名称节点(NameNode)监听的地址为localhost:9000
。
3、配置hdfs - site.xml
文件(针对 HDFS)
打开$HADOOP_HOME/etc/hadoop/hdfs - site.xml
文件,在<configuration>
标签内添加以下内容:
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
这里配置了 HDFS 数据块的副本数量为 1。因为是单机模式,所以设置为 1 即可。
4、配置mapred - site.xml
文件(针对 MapReduce)
打开$HADOOP_HOME/etc/hadoop/mapred - site.xml
文件,在<configuration>
标签内添加以下内容:
<property>
<name>mapreduce.framework.registry</name>
<value>yarn</value>
</property>
这表示将 MapReduce 任务调度到 YARN(Yet Another Resource Negotiator)上执行
5、配置yarn - site.xml
文件(针对 YARN)
打开$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>localhost</value>
</property>
这些配置设置了 YARN 的节点管理器(NodeManager)的辅助服务以及资源管理器(ResourceManager)的主机名。
四、格式化 HDFS(首次安装)
1、在安装和配置完成后,需要格式化 HDFS。使用命令:
hdfs namenode - format
这个操作会初始化 HDFS 的文件系统元数据,创建一些必要的目录和文件。注意,这个操作只需要在首次安装或者需要重新初始化 HDFS 时进行。
五、启动 Hadoop 服务
1、启动 HDFS 服务,使用命令:
start-dfs.sh
这会启动名称节点(NameNode)、数据节点(DataNode)等相关服务。
如果启动start-dfs.sh,出现下面
异常1:
localhost: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
Starting datanodes localhost: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password). Starting secondary namenodes
[localhost.localdomain] localhost.localdomain: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
可能公私密钥问题
su hadoop
将生成的SSH的公钥加入目标机器的SSH目录下:
~/.ssh$ cat ./id_rsa.pub >> ./authorized_keys
然后执行 start-dfs.sh 仍然报错 ,最后发现是权限问题
localhost: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password). Starting datanodes
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
sudo chown -R hadoop:hadoop /usr/local/hadoop-3.3.1/logs
sudo chmod -R 755 /usr/local/hadoop-3.3.1/logs
a、
sudo useradd -m hadoop -s /bin/bash 创建新用户
sudo passwd hadoop 为用户设置密码
sudo adduser hadoop sudo 为用户设置管理权限
b、
cd ~/.ssh
ssh-keygen -t rsa
2、启动 YARN 服务,使用命令
start-yarn.sh
这会启动资源管理器(ResourceManager)和节点管理器(NodeManager)等相关服务。
现在,Hadoop - 3.3.1 已经安装并启动成功,你可以开始使用它进行数据处理等相关操作。如果是在集群环境中安装,还需要对多台机器进行相应的配置和网络设置等操作。
---------------------------------------------------------------------------------------------------------------------------------
执行命令 hadoop fs -ls /user/hadoop/input 出现异常
ls: Call From localhost/127.0.0.1 to localhost:9000 failed on connection exception: java.net.ConnectException: 拒绝连接; For more details see: http://wiki.apache.org/hadoop/ConnectionRefused
然后,在root
账户下执行iptables
命令:
iptables -I INPUT -p tcp -s 127.0.0.1 --dport 9000 -j ACCEPT
localhost: ERROR: Unable to write in /tmp. Aborting.
Starting datanodes
localhost: ERROR: Unable to write in /tmp. Aborting.
Starting secondary namenodes [localhost.localdomain]
localhost.localdomain: ERROR: Unable to write in /tmp. Aborting.
sudo chmod 1777 /tmp
sudo chown -R hadoop:hadoop /tmp/hadoop-hadoop/dfs/name
start-dfs 未启动成功 最好看日志
一、
- HDFS 服务未完全启动或启动失败
- 检查服务状态:
- 首先检查 HDFS 相关服务是否真正启动成功。可以通过查看日志来确定,NameNode 的日志通常位于
$HADOOP_HOME/logs/hadoop - <username>-namenode - <hostname>.log(/usr/local/hadoop-3.3.1/logs/)
。在这个日志文件中,查找是否有任何启动错误或异常。 - 同时,也可以使用命令
jps
来查看 Hadoop 进程。正常情况下,应该看到NameNode
、DataNode
等相关进程在运行。如果没有看到这些进程,说明 HDFS 服务没有正确启动。
- 首先检查 HDFS 相关服务是否真正启动成功。可以通过查看日志来确定,NameNode 的日志通常位于
- 重新启动服务:
- 如果服务没有启动成功,可以尝试重新启动 HDFS。先停止正在运行的(可能是错误启动的)服务,使用命令
stop - dfs.sh
。然后再重新启动,使用start - dfs.sh
- 如果服务没有启动成功,可以尝试重新启动 HDFS。先停止正在运行的(可能是错误启动的)服务,使用命令
- 检查服务状态:
二 问题分析
出现 “java.io.IOException: NameNode is not formatted.” 这个异常,意味着 Hadoop 分布式文件系统(HDFS)的 NameNode 所在的存储区域还没有进行格式化操作。NameNode 需要有一个格式化后的状态来存储和管理文件系统的元数据信息,比如文件和目录的命名空间、数据块到 DataNode 的映射关系等,若未格式化,就无法正确地从磁盘加载这些必要的元数据,从而导致启动失败
可能原因及解决方案
- 首次安装或重新部署未格式化 a新搭建环境情况 如果是第一次安装 Hadoop 或者重新部署了 Hadoop 环境,在启动 NameNode 之前确实需要对其进行格式化操作。格式化操作会创建 NameNode 所需的初始目录结构以及一些元数据相关的初始文件等。 b 执行格式化命令(谨慎操作) 以运行 Hadoop 的用户(通常是
hadoop
用户,若没改过默认配置)身份,在命令行中执行如下格式化命令:hdfs namenode -format
不过要注意,格式化操作会清除之前 NameNode 存储目录(由配置文件
hdfs-site.xml
中dfs.namenode.name.dir
属性指定的目录)下的已有元数据内容,所以如果目录中有重要的、需要保留的数据,要提前做好备份工作。 -
存储目录配置变更或数据丢失后未重新格式化 a、存储目录更改情况:若修改了
hdfs-site.xml
文件里dfs.namenode.name.dir
属性所指向的存储目录路径,新的目录下没有之前格式化生成的必要元数据结构和文件,那么 NameNode 启动时同样会报未格式化的错误。 b、数据丢失或损失情况:例如存储 NameNode 元数据的磁盘出现故障,导致数据丢失,或者由于误操作删除了部分关键的元数据文件等情况发生后,也会出现此报错。 c、对应解决办法: 首先确保新的存储目录(如果有变更的话)配置正确且具备合适的权限(运行 Hadoop 的用户能对其读写),然后按照上述的格式化命令进行格式化操作(同样要提前备份好可能存在的重要数据),使得 NameNode 能在新的或修复后的存储目录下重新生成正确的元数据结构,进而可以正常启动。 -
误操作或不恰当的重启尝试 a、多次重复格式化情况:有时候在排查问题过程中,可能多次重复执行了格式化操作,又没有正确地恢复之前备份的数据(如果有备份的话),导致后续启动时仍然报这个错误,因为每次格式化都是重新初始化元数据结构,可能破坏了原有的正常启动状态。 b、解决思路:如果存在这种情况,需要仔细回顾操作过程,确认是否有备份的可用元数据,若有,将其恢复到正确的存储目录(由
dfs.namenode.name.dir
指定)下,并且检查存储目录的完整性和权限情况,再尝试启动 NameNode;若没有备份,那就只能重新进行格式化操作,后续重新上传数据等,恢复整个 HDFS 的正常运行状态。 在执行完相应的解决措施(比如格式化或者恢复数据等操作)后,重新启动 Hadoop 的 HDFS 相关服务(先执行stop-dfs.sh
关闭服务,再执行start-dfs.sh
启动服务),观察是否还会出现同样的报错信息,以此来进一步确认问题是否得到解决。 -
三 问题:hadoop fs -put /local/path/to/file /user/hadoop/input 中 /user/hadoop/input ,疑问:linux系统重没有 user目录,如何解释 ? HDFS 有自己的目录结构和命名规则,在 HDFS 中,
/user
是用于存储用户相关数据的默认顶级目录,类似于 Linux 系统中/home
目录用于存储用户的个人文件。 创建上级目录:尝试创建/user/hadoop
的上级目录。可以使用hadoop fs -mkdir -p
命令来创建多级目录结构。例如,先创建/user
目录(如果不存在),再创建/user/hadoop
目录:hadoop fs -mkdir -p hdfs://localhost:9000/user hadoop fs -mkdir -p hdfs://localhost:9000/user/hadoop
-p
参数表示递归创建目录,如果父目录不存在,则先创建父目录。 检查 HDFS 服务状态和配置文件: a 使用jps
命令检查 HDFS 相关进程(如NameNode
和DataNode
)是否正常运行。如果这些进程没有正常运行,可能会导致无法正确创建目录。例如,如果NameNode
进程不存在,可能是由于配置错误或者服务启动失败,需要检查hdfs - site.xml
和core - site.xml
等配置文件,确保NameNode
的配置参数正确,如dfs.namenode.name.dir
(指定NameNode
存储元数据的目录)和fs.defaultFS
(定义 HDFS 的默认文件系统路径)等参数。 b 同时,查看hdfs - site.xml
文件中的dfs.permissions.enabled
参数。如果该参数设置为true
(默认情况),可能会对目录的创建和访问权限有更严格的要求。确保运行 Hadoop 的用户(通常是hadoop
用户)有足够的权限来创建目录。如果需要,可以暂时将该参数设置为false
进行测试,但在生产环境中要谨慎使用这种方式,因为这可能会带来安全风险。 确认Hadoop 命令行工具配置正确 a 检查core - site.xml
中fs.defaultFS
参数的配置,确保命令行工具(hadoop fs
)所使用的 HDFS 路径与实际的 HDFS 服务路径一致。例如,如果fs.defaultFS
配置为hdfs://localhost:9000
,那么命令行工具才能正确地与这个 HDFS 服务进行交互来创建目录。如果配置错误,修改为正确的路径后,重新尝试创建目录。