Hadoop的运行方式是由配置文件决定的(运行Hadoop时会读取配置文件),因此如果需要从伪分布式模式切换回非分布式模式,需要删除coresite.xml 中的配置项。 此外,伪分布式虽然只需要配置 fs.defaultFS 和 dfs.replication 就可以运行(官方教程如此),不过若没有配置 hadoop.tmp.dir 参数,则默认使 用的临时目录为 /tmp/hadoo-hadoop,而这个目录在重启时有可能被系统清 理掉,导致必须重新执行format才行。所以我们进行了设置,同时也指定dfs.namenode.name.dir和dfs.datanode.data.dir,否则在接下来的步骤 中可能会出错。
2、格式化 NameNode
./bin/hdfs namenode -format
成功的话,会看到类似如下信息(首次格式化会有警告,阅读后可以忽略)
如果提示:
Error:JAVA_HOME is not set and could not be found
可能是没有配置JAVA_HOME 环境变量
vim ~/.bashrc #打开hadoop用户的环境变量,把下边几行粘进去
Esc+ZZ保存退出
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_241
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
如果还是出现
Error: JAVA_HOME is not set and could not be found.
那么请hadoop的安装目录修改配置文件
“/usr/local/hadoop/etc/hadoop/hadoop-env.sh”
在里面找到“export JAVA_HOME=${JAVA_HOME}”这行,然后,把它修改成 JAVA 安装路径的具体地址,比如“export JAVA_HOME=/usr/lib/jvm/default-java”,然后,再次启动 Hadoop。
3. 开启 2 个守护进程(NameNode 和 DataNode)
这一步常见错误:
(1)如果提示“public/private ……denied”的信息,表示“ssh 免密登录”设置失败,请重 新设置。
(2) 启动 Hadoop 时提示 Could not resolve hostname 。 如果启动Hadoop 时遇到输 出非常多“ssh:Could not resolve hostname xxx”的异常情况,这个并不是 ssh 的问题,可通过设置 Hadoop环境变量来解决。
首先按键盘的 ctrl + c 中断启动,然后在 ~/.bashrc 中, 增加如下两行内容(设置过程与 JAVA_HOME环境变量一样,其中 HADOOP_HOME 为 Hadoop 的安装目录):
export HADOOP_HOME=/usr/local/hadoop
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
保存后,务必执行:
source ~/.bashrc #使变量生效
./sbin/start-dfs.sh #启动Hadoop
判断是否成功启动
启动完成后,可以通过命令jps来判断是否成功启动,若成功启动则会列出如下进程:
“NameNode”、”DataNode”和“SecondaryNameNode”
(如果SecondaryNameNode 没有启动,请运行 sbin/stop-dfs.sh 关闭进程,然后再次尝试启动尝试)。如果没有 NameNode 或 DataNode ,那就是配置不成功,请仔细检查之前步骤,或通过查看启动日志排查原因。
Hadoop 无法正常启动的解决方法:
一般可以查看启动日志来排查原因,注意几点:
• 启动时会提示形如
> “DBLab-XMU: starting namenode, logging to
> /usr/local/hadoop/logs/hadoop-hadoop-namenode-DBLab-XMU.out”
其中DBLab-XMU 对应你的机器名,但其实启动日志信息是记录在 /usr/local/hadoop/logs/hadoop-hadoop-namenode-DBLab-XMU.log
所以应该查看这个后缀为 .log 的文件;
• 每一次的启动日志都是追加在日志文件之后,所以得拉到最后面看,对比下记录的时间就知道了。
• 一般出错的提示在最后面,通常是写着 Fatal、Error、Warning或者Java Exception 的地方。
• 可以在网上搜索一下出错信息,看能否找到一些相关的解决方法。
此外,若是 DataNode 没有启动,可尝试如下的方法(注意这会删除 HDFS 中 原有的所有数据,如果原有的数据很重要请不要这样做):
针对 DataNode 没法启动的解决方法
cd /usr/local/hadoop #切换目录
./sbin/stop-dfs.sh # 关闭
rm -r ./tmp # 删除 tmp 文件,注意这会删除 HDFS 中原有的所有数据
./bin/hdfs namenode -format # 重新格式化 NameNode
./sbin/start-dfs.sh # 重启