Spark学习记录(五):Hadoop安装之二
2022-03-23 21:21:36

在成功安装Hadoop后,还需要进行正确的配置才能投入使用。Hadoop的配置基本包括以下三种:单机配置(非分布式)、单节点上的伪分布式配置和分布式集群配置。单机配置就是Hadoop安装后默认的配置,即如上文安装后直接使用即可。但本次学习将进行单机伪分布式的配置。

参考教程,Hadoop 的配置文件位于/usr/local/hadoop/etc/hadoop/中,伪分布式需要修改2个配置文件:core-site.xml和hdfs-site.xml。Hadoop的配置文件是xml格式,每个配置以声明property的name和value的方式来实现。下面是具体的配置操作。

在终端中输入如下命令:

1
2
cd /usr/local/hadoop/etc/hadoop
gedit core-site.xml

正常情况下,打开后原配置文件应该是这样的内容:

1
2
<configuration>
</configuration>

将其改为:

1
2
3
4
5
6
7
8
9
10
11
<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>

修改好后保存,继续修改另一项。在终端中输入:

1
gedit hdfs-site.xml

将内容改为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<configuration>
<property>
<name>dfs.repliction</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>

接着切换回Hadoop主路径,格式化修改好的配置即可:

1
2
cd /usr/local/hadoop
./bin/hdfs namenode -format

正常情况下终端会输出一长串信息,主要看有没有ERROR,如果没有ERROR并且输出中显示已成功,说明之前的配置没有问题。成功的话一般会有提示(例:Storage directory /usr/local/hadoop/tmp/dfs/name has been successfully formatted.)。

接下来就是启动进程,在终端中输入(仍然是/usr/local/hadoop路径下):

1
./sbin/start-dfs.sh

Hadoop启动😆!真顺利啊😋。

正当我这么想的时候,输出报错了😨:

1
2
3
4
5
6
Starting namenodes on [localhost]
localhost: ERROR: JAVA_HOME is not set and could not be found.
Starting datanodes
localhost: ERROR: JAVA_HOME is not set and could not be found.
Starting secondary namenodes [ubuntu]
ubuntu: ERROR: JAVA_HOME is not set and could not be found.

怎么回事,我不是在~/.bashrc文件里配置过Java环境变量了吗?

于是开始检查,输入

1
echo $JAVA_HOME

返回结果:

1
/usr/lib/jdk1.8.0_301

啊这。于是又回去查教程,教程叫我修改Hadoop的环境变量文件。

1
2
cd /usr/local/hadoop/etc/hadoop
vim hadoop-env.sh

将里面有一行# export JAVA_HOME=,改成下面的内容(即修改成自己的安装路径):

1
export JAVA_HOME=/usr/lib/jdk1.8.0_301

再重新启动一次:

1
2
3
cd /usr/local/hadoop
./bin/hdfs namenode -format
./sbin/start-dfs.sh

这次就成功了,终端中输出如下:

1
2
3
Starting namenodes on [localhost]
Starting datanodes
Starting secondary namenodes [ubuntu]

还可以在终端中输入jps命令,进一步检查各项进程是否都成功开启。如果没有,可能需要重新启动Hadoop再检查。成功示例如下(即包括NameNode、DataNode与SecondaryNameNode):

1
2
3
4
3584 SecondaryNameNode
3380 DataNode
3209 NameNode
3773 Jps

若要关闭Hadoop进程,在终端中输入如下命令即可:

1
./sbin/stop-dfs.sh

至此Hadoop的伪分布式配置就完成了,不过还可以接着做几件事,比如将Hadoop相关路径添加到环境变量中。打开终端,输入:

1
vim ~/.bashrc

在文件中添加Hadoop路径:

1
2
#hadoop
export PATH=$PATH:/usr/local/hadoop/sbin:/usr/local/hadoop/bin

更新配置文件:

1
source ~/.bashrc

这样就不需要每次都切换路径以启动Hadoop了,可以直接在终端中输入相关命令。例如,现在启动Hadoop,只需在终端中输入:

1
start-dfs.sh

输入下列命令可以在HDFS中创建hadoop用户:

1
hdfs dfs -mkdir -p /user/hadoop

要查看HDFS中的文件,可输入以下命令:

1
hdfs dfs -ls

当然,现在什么文件都没有上传,这个命令也不会有任何返回。

另外,参考教程,在启动Hadoop服务后,我们可以在浏览器中输入localhost:50070查看信息。

当然,如果你在输入了之后浏览器告诉你无法访问,也是正常的,因为我也打不开。怎么回事呢?

弄了半天也没头绪,最后查了一下,原来是Hadoop改端口号了。教程里的Hadoop版本是2.7.1,而本次安装的版本为3.3.1。因此,实际上应该输入localhost:9870才是正确的端口号。

最后是关闭Hadoop服务。在终端中输入:

1
stop-dfs.sh

正常情况下应该会返回类似以下输出:

1
2
3
Stopping namenodes on [localhost]
Stopping datanodes
Stopping secondary namenodes [ubuntu]