Ubuntu 16.04——Hadoop集群安装配置

Hadoop集群安装配置

hadoop 集群安装配置分为两个部分,一个部分是 主节点(Master)从节点(Slave),两个部分需要完成的配置有一定的不同;总的来说,Master 所需要做的会比 Slave 会多一些。下面会演示两个部分需要做的事情;由于各台主机情况会有所不同,所以在报错的时候也会有一些的不一样,所以该文章仅供参考。

环境

主机版本:Windows11

虚拟机版本:ubuntukylin-16.04-desktop-amd64

VMware 版本: VMware® Workstation 17 Pro

网卡:桥接模式

jdk 版本:jdk-8u162-linux-x64

hadoop 版本:hadoop-3.1.3

注:硬件版本是使用的兼容 VMware 12.X 的。

看下文之前,默认是已经配置好 IP 地址可以上网,因为大家使用的网络适配器可能会有所不同,所以可能会出现一些对 NAT 网络使用者不友好的情况,再次提醒各位,该篇文章仅供参考。

节点配置

我们需要对 Master 节点和 Slave 节点都进行配置,因为很多东西都是可以直接有 Master 来做的,所以呢,我们就先让 Master 把能做的都做了先,然后尽量让 Slave 能轻松一些。中心思想就是一个 Master 配置完之后直接使用传输命令将配置好的软件直接打包发送到 Slave 上,所以相对来说 Master 会做的更多一些,但是也会节省资源。

配置前提

因为考虑到很多人可能是做伪分布的,所以会出现多多少少的问题,所以这里还是在给大家看一些简单的前提。

修改主机名

在修改主机名称之前,我们需要先查看另外一个文件的内容,因为这个会对我们修改后有一定的影响。

我们首先是需要先打开 /etc/hosts 查看内容,一般hosts文件中只能有一个127.0.0.1,其对应主机名为localhost,如果有多余127.0.0.1映射,应删除,特别是不能存在“127.0.1.1 [主机名]”这样的映射记录。修改后需要重启Linux系统。

sudo vim /etc/hosts

删除本地映射

打开后我们可以看到这里会有被红色框框圈起来的地方,如果没有可以不用管,如果有,请把它注释掉或者直接删除。我这里选择的就是把它注释掉。注释之后效果就是如下图这样子了。

删除本地映射2

既然需要大家把它注释掉肯定是因为它有一些别的作用,最主要的作用就是为了避免我们使用命令的时候发生报错或者其他一些 warning,比如像下图,无法解析主机的错误,因为我们修改主机名称之后,他们之间的映射关系变了,但是之前的映射关系并没有被覆盖或者删除,所以系统无法对修改后的主机名进行映射,最终产生这样的错误。

保留主机映射导致错误

sudo vim /etc/hostname

执行上面命令后,就打开了“/etc/hostname”这个文件,这个文件里面记录了主机名,比如,假设安装Ubuntu系统时,设置的主机名是“hadoop01”,因此,打开这个文件以后,里面就只有“hadoop01”这一行内容,可以直接删除,并修改为“Master”(注意是区分大小写的),然后,保存退出vim编辑器,这样就完成了主机名的修改,需要重启Linux系统才能看到主机名的变化。

Master

修改主机名称

要注意观察主机名修改前后的变化。在修改主机名之前,如果用hadoop登录Linux系统,打开终端,进入Shell命令提示符状态,会显示如下内容:

hadoop@hadoop01:~$

修改主机名并且重启系统之后,用hadoop登录Linux系统,打开终端,进入Shell命令提示符状态,会显示如下内容:

hadoop@Master:~$

可以看出,这时就很容易辨认出当前是处于Master节点上进行操作,不会和Slave节点产生混淆。

更改后的主机名称

然后,在Master节点中执行如下命令打开并修改Master节点中的“/etc/hosts”文件:

sudo vim /etc/hosts

打开文件后,我们在文件的最后新增内容,假设我们现在使用的是三台主机进行连接,那么就有两台是 Slave 节点,格式如下:

[Master的IP] Master
[Slave1的IP] Slave1
[Slave2的IP] Slave2

配置完成后,效果类似下图,但因为我是有四台主机,所以我有三个 SLave 节点,至于有一行 Master 被注释了,则是因为需要用桥接网络,而且虚拟机会在机房电脑和我的笔记本上辗转,所以就会有两个不一样的,但因为注释了,所以只有第一个是生效的。

修改IP映射

修改完成以后,请重新启动各节点的Linux系统。这样就完成了 Master 节点和 Slave 节点的配置,然后,需要在各个节点上都执行如下命令,测试是否相互ping得通,如果ping不通,后面就无法顺利配置成功:

ping Master -c 3   # 只ping 3次就会停止,否则要按Ctrl+c中断ping命令
ping Slave1 -c 3

这里只演示了两个,请大家根据自己的实际情况(有多少台主机)进行修改,需要相互都可以 ping 通才算是可以连接上,关于各个主机之间的免密登陆,这里就不过多进行赘述,就默认都已经可以免密登陆了。

Master 与 Slave1 进行通讯

Master 与 Slave2 进行通讯

Master 与 Slave3 进行通讯

Master 配置

在 Master 上是需要配置环境变量,然后是对 Hadoop 进行配置,配置文件总共有六个,分别为 workerscore-site.xmlhdfs-site.xmlmapred-site.xmlyarn-site.xml,具体的在下面会给大家进行解释,一点拙见,若有不对,可以在评论区指出。

配置PATH变量

如果还没有配置PATH变量,那么需要在Master节点上进行配置。 首先执行命令“vim ~/.bashrc”,也就是使用vim编辑器打开“ bashrc ”文件

sudo vim ~/.bashrc

然后,在该文件最上面的位置加入下面一行内容:

export PATH=$PATH:/usr/local/hadoop/bin:/usr/local/hadoop/sbin

配置完 jdk 和 hadoop 的环境变量之后,~/.bashrc 文件中就会有这么几行内容,路径随安装的路径会有所不同。

修改环境变量

保存后执行命令“source ~/.bashrc”,使配置生效。

source ~/.bashrc
配置集群/分布式环境

在配置集群/分布式模式时,需要修改“/usr/local/hadoop/etc/hadoop”目录下的配置文件,这里仅设置正常启动所必须的设置项,包括workers 、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml共5个文件,更多设置项可查看官方说明。接下来我们配置文件都会默认在 Hadoop 的安装目录下面。

cd /usr/local/hadoop/etc/hadoop # 进入文件所在目录文件夹
修改配置文件
(1)修改 workers 文件

需要把所有数据节点的主机名写入该文件,每行一个,默认为 localhost(即把本机作为数据节点),所以,在伪分布式配置时,就采用了这种默认的配置,使得节点既作为名称节点也作为数据节点。在进行分布式配置时,可以保留 localhost,让 Master 节点同时充当名称节点和数据节点,或者也可以删掉localhost这行,让 Master 节点仅作为名称节点使用。

vim workers 

Master节点仅作为名称节点使用,因此将 workers 文件中原来的 localhost 删除,添加如下内容:

Slave1
Slave2
Slave3

因为我是四台主机连在一起,然后我的选择是 Master 作为 Namenode,其余 Slave 节点作为 Datanode,所以文件中我需要填写三个节点的主机名称。具体效果如下图:

修改 Workers 文件

(2)修改配置文件 core-site.xml

Hadoop 的配置文件是 xml 格式,每个配置以声明 <property><name><value> 的方式来实现。通过 gedit 编辑会比较方便

gedit ./etc/hadoop/core-site.xml

请把 core-site.xml 文件修改为如下内容:

  1. fs.defaultFS,值的格式是: file:///文件:///,这是默认文件系统的名称。 一个URI,其方案和权限决定了文件系统的实现。 该 uri 的方案确定配置属性(fs.SCHEME.impl)命名 FileSystem 实现类。 uri 的权限用于 确定文件系统的主机、端口等。
  2. hadoop.tmp.dir,值的格式是:/tmp/hadoop-${user.name},是其他临时目录的基目录。
<configuration>
        <property>
                <name>fs.defaultFS</name>
                <value>hdfs://Master:9000</value>
        </property>
        <property>
                <name>hadoop.tmp.dir</name>
                <value>file:///usr/local/hadoop/tmp</value>
                <description>A base for other temporary directories.</description>
        </property>
</configuration>

修改前:

修改前
修改后:

修改后

放出修改前后图是为了让大家能对比清楚需要修改的地方,以免大家改了不该改的。

(3)修改文件

对于 Hadoop 的分布式文件系统 HDFS 而言,一般都是采用冗余存储,冗余因子通常为3,也就是说,一份数据保存三份副本。如果只使用了一个Slave节点作为数据节点,即集群中只有一个数据节点,数据只能保存一份,所以 ,dfs.replication 的值还是设置为 1。所以在修改的时候需要根据节点数量来决定。

vim hdfs-site.xml

修改的 hdfs-site.xml 具体内容如下:

  1. dfs.namenode.secondary.http-address,值的格式是:0.0.0.0:9868,辅助名称节点 http 服务器地址和端口。
  2. dfs.replication,因为我有三个 Datanode,所以这里我的值设置为3,默认数据块复制。 创建文件时可以指定实际的复制次数。 如果在创建时未指定复制,则使用默认值。
  3. dfs.namenode.name.dir,值的格式是: file://${hadoop.tmp.dir}/dfs/name,确定 DFS 名称节点在本地文件系统上的位置 应该存储名称表(fsimage)。 如果这是一个逗号分隔的列表 的目录中,则名称表将复制到所有目录,用于冗余。
  4. dfs.datanode.data.dir,值的格式为: file://${hadoop.tmp.dir}/dfs/data,确定DFS数据节点在本地文件系统上的位置 应该存储其块。 如果这是逗号分隔的 目录列表,则数据将存储在所有命名的 目录,通常位于不同的设备上。应标记目录 具有 HDFS 的相应存储类型([SSD]/[DISK]/[ARCHIVE]/[RAM_DISK]) 存储策略。如果目录是磁盘,则默认存储类型为DISK 没有明确标记的存储类型。不存在的目录将 如果本地文件系统权限允许,则创建。
<configuration>
        <property>
                <name>dfs.namenode.secondary.http-address</name>
                <value>Master:50090</value>
        </property>
        <property>
                <name>dfs.replication</name>
                <value>3</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>

修改前:

修改前

修改后:

修改后

(4)修改文件 mapred-site.xml

/usr/local/hadoop/etc/hadoop目录下有一个mapred-site.xml.template,需要修改文件名称,把它重命名为 mapred-site.xml,当然,也可能没有,我这里是没有,不知道大家有没有,就先记录下来。

vim mapred-site.xml

mapred-site.xml 文件配置成如下内容:

  1. mapreduce.framework.name,值根据具体情况进行调整,用于执行 MapReduce 作业的运行时框架。值可以是 localclassic 的或 yarn 之一。
  2. mapreduce.jobhistory.address,值的格式为: 0.0.0.0:10020,**MapReduce JobHistory Server IPC(进程间通信)**主机和端口是标识可以在网络上访问 MapReduce JobHistory Server 的详细信息。IPC主机通常是运行 JobHistory Server 的计算机的 IP 地址或主机名。端口号是网络用于将通信量定向到正确进程的唯一标识符。这些值是客户端(如Hadoop Web UI)访问 JobHistory Server 和查看有关已完成 MapReduce 作业的详细信息所必需的。 默认情况下,JobHistory Server 使用端口 10020 进行 IPC 通信。如果 JobHistory 服务器在远程计算机上运行,则在配置客户端或Web UI以与其通信时,需要指定IPC主机和端口。例如,在Hadoop Web UI中,可以通过将 mapreduce.jobhistory.address 配置属性设置为来指定 JobHistory Server IPC 主机和端口。<hostname>:<port>. 您还可以在使用命令行 Hadoop 实用程序时指定这些值,例如 mapred job -history <hostname>:<port>。请注意,JobHistoryServerIPC 地址和端口配置可以在 Hadoop 配置目录的 mapred-site.xml 文件中找到。 如果需要更改这些值,则需要更新配置文件并重新启动 JobHistory Server,以使更改生效。
  3. mapreduce.jobhistory.webapp.address,属性值的格式为 <hostname>:<port>hostname 是指运行 JobHistoryServer 的机器的主机名或IP地址,port是 JobHistoryServer Web 应用程序侦听传入请求的端口号。例如,如果 JobHistoryServer 在计算 “historyserver.example.com” 上运行并侦听端口 19888,则可以将 mapreduce.jobhistory.webapp.address 属性设置为 “historyserver.example.com:19888”,以便从另一台计算机上的 Web 浏览器访问 Web 应用程序。需要注意的是,JobHistoryServer Web 应用程序需要其他几个 Hadoop 服务正常运行才能正常工作。 这些服务包括 ResourceManager、HDFS NameNode 和 HDFS DataNodes。如果您在访问 Web 应用程序时遇到问题,则值得检查所有这些服务是否已启动并正在运行,以及是否已设置正确的配置选项。
  4. yarn.app.mapreduce.am.env,是一个在YARN主节点应用程序管理器环境下运行的 MapReduce 作业的环境变量列表。该变量包含了一些配置参数,如 Hadoop 的 classpath、JAVA_HOME等,可用于设置环境变量以方便在 MapReduce 任务运行环境中使用。在配置 YARN MapReduce 环境时,该参数非常有用。
  5. mapreduce.map.env,这是一个环境变量,用于在 MapReduce 作业的 Map 任务中指定其他需要设置的环境变量。在 Map 任务运行时,系统会自动设置这个环境变量,并根据其值设置其他必要的环境变量。这个环境变量的值是一个以逗号分隔的键值对列表,每个键值对表示一个要设置的环境变量和其值。例如:export mapreduce_map_env="JAVA_HOME=/usr/local/java,PATH=$PATH:/usr/local/bin" 这个例子指定了两个环境变量,JAVA_HOME 和 PATH。其中 JAVA_HOME 被设置为 /usr/local/java,PATH被设置为原有的值加上: /usr/local/bin。在 Map 任务运行时,这些环境变量的值就会被设置为指定的值,方便应用程序使用。
    1. mapreduce.reduce.env,是 Hadoop MapReduce 中的一个配置设置,它指定传递给 reduce 任务的环境变量列表。reduce 任务可以使用这些变量来自定义其行为或访问特定资源。例如,reduce 任务可能需要访问并非在集群的每个节点上都可用的数据库或文件系统。 通过在 mapreduce.reduce.env 中设置适当的环境变量,reduce 任务可以轻松地访问这些资源。mapreduce.reduce.env 的语法如下:mapreduce.reduce.env=<var1>=<value1>,<var2>=<value2>,... <var1>,<var2>,... 是变量名, <value1>,<value2>... 是它们的相应值。 可以指定多个变量,用逗号分隔它们。为Hadoop作业设置环境变量的推荐方法是使用 hadoop 命令的 -D 选项。 例如:hadoop jar myjob.jar -D mapreduce.reduce.env="VAR1=value1,VAR2=value2"...这会将作业中所有 reduce 任务的环境变量 VAR 1 和 VAR 2 分别设置为 value 1 和 value 2。
<configuration>
        <property>
                <name>mapreduce.framework.name</name>
                <value>yarn</value>
        </property>
        <property>
                <name>mapreduce.jobhistory.address</name>
                <value>Master:10020</value>
        </property>
        <property>
                <name>mapreduce.jobhistory.webapp.address</name>
                <value>Master:19888</value>
        </property>
        <property>
                <name>yarn.app.mapreduce.am.env</name>
                <value>HADOOP_MAPRED_HOME=/usr/local/hadoop</value>
        </property>
        <property>
                <name>mapreduce.map.env</name>
                <value>HADOOP_MAPRED_HOME=/usr/local/hadoop</value>
        </property>
        <property>
                <name>mapreduce.reduce.env</name>
                <value>HADOOP_MAPRED_HOME=/usr/local/hadoop</value>
        </property> 
</configuration>

修改前:

修改前

修改后:

修改后

(5)修改文件 yarn-site.xml

yarn-site.xml 是 Apache Hadoop YARN 的配置文件,它代表 Yet Another Resource Negotiator。 YARN是一个跨计算机集群并行处理大量数据的分布式框架,包含一组定义YARN应用程序行为的属性。

vim yarn-site.xml

请把 yarn-site.xml 文件配置成如下内容:

  1. yarn.resourcemanager.hostname,值的格式为:0.0.0.0,这是一个在 Apache Hadoop YARN 群集上使用的配置属性,用于定义 YARN 资源管理器的主机名或 IP 地址。该属性是在 yarn-site.xml 文件中进行配置的。资源管理器是一个 YARN 服务,其主要职责是管理群集中的资源,包括内存、CPU、磁盘等等,并分配资源给正在运行的应用程序。在 YARN 群集中运行应用程序时,它们会通过 yarn.resourcemanager.hostname 所指定的主机名或 IP 地址与资源管理器进行通信,以请求和接收资源分配。如果集群中只有一个资源管理器,那么在 YARN 客户端上设置 yarn.resourcemanager.hostname 属性一般不是必需的,因为客户端会自动查找它所在的主机上的资源管理器。但如果集群中有多个资源管理器,则需要在客户端上显式设置该属性,以确定它将要连接哪一个资源管理器。
  2. yarn.nodemanager.aux-services,是YARN(Yet Another Resource Negotiator)中 NodeManager 的一个重要配置参数,它用来指定 NodeManager 启动的辅助服务。辅助服务是指在NodeManager之外运行并为 MapReduce 应用程序提供支持的服务,例如 Hive、HBase等。通常情况下,辅助服务配置文件位于 $HADOOP_HOME/etc/hadoop/ 目录下的 yarn-site.xml 文件中。
<configuration>
        <property>
                <name>yarn.resourcemanager.hostname</name>
                <value>Master</value>
        </property>
        <property>
                <name>yarn.nodemanager.aux-services</name>
                <value>mapreduce_shuffle</value>
        </property>
</configuration>

修改前:

修改前

修改后:有一行是注释,所以其实可以不用管它。

修改后

传输文件到 Slave 节点中

上述5个文件全部配置完成以后,需要把Master节点上的“/usr/local/hadoop”文件夹复制到各个节点上。如果之前已经运行过伪分布式模式,建议在切换到集群模式之前首先删除之前在伪分布式模式下生成的临时文件。

因为我们要将整个 Hadoop 目录打包,然后再发送到其他节点中,所以我们需要先离开 Hadoop 的安装目录,所以先用 cd /usr/local 到达 Hadoop 安装目录的上一级目录,然后删除临时文件,之后再打包压缩发送到 Slave 节点上。注意:此时使用了 scp 命令之后是不需要输入密码的,如果需要输入密码,那就是 ssh 免密配置不成功,需要重新配置。

cd /usr/local
sudo rm -r ./hadoop/tmp     # 删除 Hadoop 临时文件
sudo rm -r ./hadoop/logs/*   # 删除日志文件
tar -zcf ~/hadoop.master.tar.gz ./hadoop   # 先压缩再复制

因为我还没有格式化 Namenode,并且没有启动 DFS 服务,所以是没有 tmplogs 目录文件的。

删除 tmp 目录和 logs 目录

cd ~
scp ./hadoop.master.tar.gz Slave1:/home/hadoop # 将压缩包发送到 Slave1 节点的 home 目录上
scp ./hadoop.master.tar.gz Slave2:/home/hadoop # 将压缩包发送到 Slave2 节点的 home 目录上
scp ./hadoop.master.tar.gz Slave3:/home/hadoop # 将压缩包发送到 Slave3 节点的 home 目录上

Slave 配置

修改主机名

在修改主机名称之前,我们需要先查看另外一个文件的内容,因为这个会对我们修改后有一定的影响。

修改 /etc/hosts 文件

我们首先是需要先打开这个文件查看内容,一般hosts文件中只能有一个127.0.0.1,其对应主机名为localhost,如果有多余127.0.0.1映射,应删除,特别是不能存在“127.0.1.1 [主机名]”这样的映射记录。修改后需要重启Linux系统。

sudo vim /etc/hosts

打开后我们可以看到这里会有被红色框框圈起来的地方,如果没有可以不用管,如果有,请把它注释掉或者直接删除。我这里选择的就是把它注释掉。注释之后效果就是如下图这样子了。

修改 Slave 节点 的映射关系

接着修改 /etc/hostname 文件

sudo vim /etc/hostname

执行上面命令后,就打开了“/etc/hostname”这个文件,这个文件里面记录了主机名,比如,假设安装Ubuntu系统时,设置的主机名是“hadoop01”,因此,打开这个文件以后,里面就只有“hadoop01”这一行内容,可以直接删除,并修改为“Master”(注意是区分大小写的),然后,保存退出vim编辑器,这样就完成了主机名的修改,需要重启Linux系统才能看到主机名的变化。

Slave1

修改主机名称

要注意观察主机名修改前后的变化。在修改主机名之前,如果用hadoop登录Linux系统,打开终端,进入Shell命令提示符状态,会显示如下内容:

hadoop@hadoop02:~$

修改主机名并且重启系统之后,用hadoop登录Linux系统,打开终端,进入Shell命令提示符状态,会显示如下内容:

hadoop@Slave1:~$ 

工期后的主机名称

修改完成以后,请重启节点的Linux系统。这样就完成了 Slave 节点的配置,然后,需要在各个节点上都执行如下命令,测试是否相互ping得通,如果ping不通,后面就无法顺利配置成功:

ping Master -c 3   # 只ping 3次就会停止,否则要按Ctrl+c中断ping命令
ping Slave1 -c 3

这里只演示了两个,请大家根据自己的实际情况(有多少台主机)进行修改,需要相互都可以 ping 通才算是可以连接上,关于各个主机之间的免密登陆,这里就不过多进行赘述,就默认都已经可以免密登陆了。

Slave1 与 Master 进行通讯
Slave1 与 Slave2 进行通讯
Slave1 与 Slave3 进行通讯

配置 Hadoop

在 Master 节点上已经配置完毕并且发送了 Hadoop 安装包到 Slave 的前提下,进行以下的配置,首先是删除旧的 Hadoop 安装包,如果以前有安装单机分布或者伪分布的话,如果没有,可以忽略这一步。然后就是对发送过来的包进行解压,解压到 /usr/local 目录下,最后给修改目录的权限。

sudo rm -r /usr/local/hadoop    # 删掉旧的(如果存在)
sudo tar -zxvf ~/hadoop.master.tar.gz -C /usr/local # zxvf中的 V 可以看到解压的过程。
sudo chown -R hadoop /usr/local/hadoop

同样,如果有其他Slave节点,也要执行将 hadoop.master.tar.gz 传输到 Slave 节点以及在 Slave 节点解压文件的操作。

启动 Hadoop 集群

首次启动 Hadoop 集群时,需要先在 Master 节点执行名称节点的格式化(只需要执行这一次,后面再启动 Hadoop 时,不要再次格式化名称节点),命令如下:

hdfs namenode -format

格式化 HDFS

现在就可以启动 Hadoop 了,启动需要在 Master 节点上进行,执行如下命令:

start-dfs.sh
start-yarn.sh
mapred --daemon start historyserver

通过命令jps可以查看各个节点所启动的进程。如果已经正确启动,则在Master节点上可以看到 NameNodeResourceManagerSecondrryNameNodeJobHistoryServer 进程,如下图所示。

查看 Master 服务开启情况

在 Slave 节点可以看到 DataNodeNodeManager 进程,如下图所示:

查看 Slave1 服务开启情况

查看 Slave2 服务开启情况
查看 Slave3 服务开启情况

缺少任一进程都表示出错。另外还需要在 Master 节点上通过命令hdfs dfsadmin -report查看数据节点是否正常启动,如果屏幕信息中的Live datanodes为 3 (根据实际情况进行调整),则说明集群启动成功。

hdfs dfsadmin -report

由于我有 3 个 Slave 节点充当数据节点,因此,数据节点启动成功以后,会显示如下图所示信息:

数据节点的活动情况

也可以在主机 Windows 系统的浏览器中输入地址 http:// + [Maste节点的IP] +:9870/ 或者在 Linux 系统的浏览器中输入地址 http://master:9870/ ,通过 Web 页面看到查看名称节点和数据节点的状态。如果不成功,可以通过启动日志(logs)排查原因。
这里再次强调,伪分布式模式和分布式模式切换时需要注意以下事项:
(a)从分布式切换到伪分布式时,不要忘记修改slaves配置文件;
(b)在两者之间切换时,若遇到无法正常启动的情况,可以删除所涉及节点的临时文件夹,这样虽然之前的数据会被删掉,但能保证集群正确启动。所以,如果集群以前能启动,但后来启动不了,特别是数据节点无法启动,不妨试着删除所有节点(包括Slave节点)上的 /usr/local/hadoop/tmp 文件夹,再重新执行一次 hdfs namenode -format ,再次启动即可。

活动节点示意图

执行分布式实例

执行分布式实例过程与伪分布式模式一样,首先创建 HDFS 上的用户目录,命令如下:

hdfs dfs -mkdir -p /user/hadoop

然后,在 HDFS 中创建一个 input 目录,并把 /usr/local/hadoop/etc/hadoop 目录中的配置文件作为输入文件复制到 input 目录中,命令如下:

hdfs dfs -mkdir input
hdfs dfs -put /usr/local/hadoop/etc/hadoop/*.xml input

复制配置文件到 input 目录中

接着就可以运行 MapReduce 作业了,命令如下:

hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar grep input output 'dfs[a-z.]+'

运行时的输出信息与伪分布式类似,会显示 MapReduce作业的进度,如下图所示:

MapReduce作业进度

执行过程可能会有点慢,但是,如果迟迟没有进度,比如5分钟都没看到进度变化,那么不妨重启Hadoop再次测试。若重启还不行,则很有可能是内存不足引起,建议增大虚拟机的内存,或者通过更改 YARN 的内存配置来解决。

作业中示意图

在执行过程中,可以在 Windows 系统浏览器中地址栏输入 http://[Master的IP地址]:8088/cluster 或在 Linux 系统中打开浏览器,在地址栏输入http://master:8088/cluster,通过Web界面查看任务进度,在Web界面点击 Tracking UI 这一列的 History 连接,可以看到任务的运行信息,如下图所示:

作业完成示意图

然后我们可以使用命令查看输出结果:

./bin/hdfs dfs -cat output/*

输出结果如下图所示:

输出结果示意图

最后,关闭Hadoop集群,需要在Master节点执行如下命令:

stop-yarn.sh
stop-dfs.sh
mapred --daemon stop historyserver

至此就完成了 Hadoop 集群的搭建。

  • 5
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是Ubuntu 16.04安装Hadoop的步骤: 1. 首先,确保您的系统已经安装了Java。您可以使用以下命令检查Java是否已安装: ``` java -version ``` 如果Java未安装,则可以使用以下命令安装: ``` sudo apt-get update sudo apt-get install default-jdk ``` 2. 下载Hadoop。您可以从Hadoop官方网站下载最新版本的Hadoop。下载完成后,将文件解压缩到您选择的目录中。 3. 配置Hadoop。打开Hadoop配置文件(位于解压缩文件夹中的/etc/hadoop目录下),并进行以下更改: - core-site.xml:在<configuration>标签中添加以下内容: ``` <property> <name>fs.defaultFS</name> <value>hdfs://localhost:900</value> </property> ``` - hdfs-site.xml:在<configuration>标签中添加以下内容: ``` <property> <name>dfs.replication</name> <value>1</value> </property> ``` - mapred-site.xml:将mapreduce.framework.name属性设置为yarn: ``` <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> ``` - yarn-site.xml:在<configuration>标签中添加以下内容: ``` <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> ``` 4. 格式化Hadoop文件系统。在终端中运行以下命令: ``` hdfs namenode -format ``` 5. 启动Hadoop。在终端中运行以下命令: ``` start-all.sh ``` 这将启动Hadoop的所有服务。 6. 检查Hadoop是否正在运行。在终端中运行以下命令: ``` jps ``` 如果您看到以下进程,则表示Hadoop正在运行: ``` NameNode DataNode SecondaryNameNode ResourceManager NodeManager Jps ``` 恭喜您,现在已经成功安装配置Hadoop

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

He.ZaoCha

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值