前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何安装和设置3节点Hadoop集群

如何安装和设置3节点Hadoop集群

作者头像
chokwin
发布2018-09-11 10:44:05
2K0
发布2018-09-11 10:44:05
举报
文章被收录于专栏:chokwin的专栏

什么是Hadoop?

Hadoop是一个开源Apache项目,允许在大型数据集上创建并行处理应用程序,分布在网络节点上。它由处理节点间数据可扩展性和冗余的Hadoop分布式文件系统(HDFS™)Hadoop YARN组成:用于在所有节点上执行数据处理任务的作业调度框架。

在你开始之前

  1. 按照入门指南创建三个Linode。它们将在本指南中称为node-masternode1node2。建议您设置每个Linode的主机名以匹配此命名约定。 除非另有说明,否则请从node-master运行本指南中的步骤。
  2. 按照“ 保护您的服务器”指南强化三台服务器。为安装创建普通用户,并为用户调用hadoop任何Hadoop守护程序。千万不能创建SSH密钥hadoop的用户。SSH密钥将在稍后的部分中介绍。
  3. 根据您的操作系统,选择DebianCentOSUbuntu的对应指南安装JDK ,或从Oracle获取最新的JDK。
  4. 以下步骤使用每个节点的示例IP。根据您的配置调整每个示例:
    • node-master:192.0.2.1
    • node1:192.0.2.2
    • node2:192.0.2.3

    注意本指南是为非root用户编写的。需要提升权限的命令带有前缀sudo。如果您不熟悉该sudo命令,请参阅“ 用户和组”指南。如果没有另外指定,本指南中的所有命令都与hadoop用户一起运行。

Hadoop集群的体系结构

在配置主节点和从节点之前,了解Hadoop集群的不同组件非常重要。

一个主节点保持对分布式文件系统的知识,就像inode上表ext3文件系统,调度资源分配。node-master将在本指南中处理此角色,并托管两个守护进程:

  • NameNode:管理分布式文件系统,并且知道在集群内部存储的数据块。
  • ResourceManager:管理YARN工作,发生在从节点保证调度和执行过程。

从节点node1node2存储实际数据并提供处理能力以运行作业,并将托管两个守护进程:

  • DataNode管理物理存储节点上的实际数据。
  • NodeManager管理节点上的任务的执行。

配置系统

在每个节点上创建主机文件

要使每个节点与其名称进行通信,请编辑该/etc/hosts文件以添加三个服务器的IP地址。不要忘记用您的IP替换样本IP:

/ etc / hosts文件

1 2 3

192.0.2.1 node-master 192.0.2.2 node1 192.0.2.3 node2

为Hadoop用户分发身份验证密钥对

主节点将使用ssh-connection通过密钥对身份验证连接到其他节点,以管理群集。

  1. 以用户身份登录node-masterhadoop,并生成ssh-key: ssh-keygen -b 4096
  2. 将密钥复制到其他节点。将密钥复制到node-master本身也是一种好习惯,这样您也可以根据需要将其用作DataNode。键入以下命令,并hadoop在询问时输入用户密码。如果系统提示您是否将密钥添加到已知主机,请输入yes: ssh-copy-id -i $HOME/.ssh/id_rsa.pub hadoop@node-master ssh-copy-id -i $HOME/.ssh/id_rsa.pub hadoop@node1 ssh-copy-id -i $HOME/.ssh/id_rsa.pub hadoop@node2

下载并解压缩Hadoop二进制文件

以用户身份登录到node-masterhadoop,从Hadoop项目页面下载Hadoop tarball ,然后解压缩:

代码语言:javascript
复制
cd
wget http://apache.mindstudios.com/hadoop/common/hadoop-2.8.1/hadoop-2.8.1.tar.gz
tar -xzf hadoop-2.8.1.tar.gz
mv hadoop-2.8.1 hadoop

设置环境变量

将Hadoop二进制文件添加到PATH中。编辑/home/hadoop/.profile并添加以下行: /home/hadoop/.profile1 PATH=/home/hadoop/hadoop/bin:/home/hadoop/hadoop/sbin:$PATH

配置主节

配置将在node-master上完成并复制到其他节点。

设置JAVA_HOME

  1. 获取Java安装路径。如果您从软件包管理器安装了open-jdk,则可以使用以下命令获取路径: update-alternatives --display java 获取当前链接的值并删除后面的部分/bin/java。例如在Debian上,链接是/usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java,所以JAVA_HOME应该是/usr/lib/jvm/java-8-openjdk-amd64/jre。 如果从Oracle安装java,JAVA_HOME则是解压缩java存档的路径。
  2. 编辑~/hadoop/etc/hadoop/hadoop-env.sh并替换此行: export JAVA_HOME=${JAVA_HOME} 与您的实际Java安装路径。例如在带有open-jdk-8的Debian上: 〜/ hadoop的在/ etc / hadoop的/ hadoop-env.sh1 export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/jre

设置NameNode位置

在每个节点更新上,~/hadoop/etc/hadoop/core-site.xml您要在端口上将NameNode位置设置为node-master9000

〜/ hadoop的在/ etc / hadoop的/芯-site.xml中

1 2 3 4 5 6 7 8

<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>fs.default.name</name> <value>hdfs://node-master:9000</value> </property> </configuration>

设置HDFS的路径

编辑hdfs-site.conf

~/hadoop/etc/hadoop/hdfs-site.xml

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

<configuration> <property> <name>dfs.namenode.name.dir</name> <value>/home/hadoop/data/nameNode</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>/home/hadoop/data/dataNode</value> </property> <property> <name>dfs.replication</name> <value>1</value> </property> </configuration>

最后一个属性dfs.replication表示在群集中复制数据的次数。您可以设置2为在两个节点上复制所有数据。请勿输入高于实际从属节点数的值。

将YARN设置为Job Scheduler

  1. ~/hadoop/etc/hadoop/,重命名mapred-site.xml.templatemapred-site.xml: cd ~/hadoop/etc/hadoop mv mapred-site.xml.template mapred-site.xml
  2. 编辑文件,将yarn设置为MapReduce操作的默认框架: ~/hadoop/etc/hadoop/mapred-site.xml1 2 3 4 5 6 <configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>

配置YARN

编辑yarn-site.xml

~/hadoop/etc/hadoop/yarn-site.xml

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

<configuration> <property> <name>yarn.acl.enable</name> <value>0</value> </property> <property> <name>yarn.resourcemanager.hostname</name> <value>node-master</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> </configuration>

配置Slaves

slaves启动脚本使用该文件在所有节点上启动所需的守护程序。编辑~/hadoop/etc/hadoop/slaves为:

~/hadoop/etc/hadoop/slaves

1 2

node1 node2

配置内存分配

低RAM节点上的内存分配可能很棘手,因为默认值不适合RAM少于8GB的节点。本节将重点介绍内存分配如何适用于MapReduce作业,并提供2GB RAM节点的示例配置。

内存分配属性

使用两种资源执行YARN作业:

  • 一个应用主站(AM)是负责在集群中的监视应用程序和协调分布式执行者。
  • 由AM创建的一些执行程序实际上运行该作业。对于MapReduce作业,它们将并行执行map或reduce操作。

两者都在从属节点上的容器中运行。每个从属节点都运行一个NodeManager守护程序,该守护程序负责在节点上创建容器。整个集群由ResourceManager管理,ResourceManager根据容量要求和当前费用调度所有从节点上的容器分配。

需要正确配置四种类型的资源分配才能使群集正常工作。这些是:

  1. 可以为单个节点上的YARN容器分配多少内存。这个限制应该高于所有其他限制; 否则,容器分配将被拒绝,应用程序将失败。但是,它不应该是节点上的全部RAM。 此值配置yarn-site.xmlyarn.nodemanager.resource.memory-mb
  2. 单个容器可以消耗多少内存以及允许的最小内存分配。容器永远不会大于最大值,否则分配将失败并始终被分配为最小RAM量的倍数。 这些在yarn-site.xml文件中通过yarn.scheduler.maximum-allocation-mbyarn.scheduler.minimum-allocation-mb两个变量名称进行配置。
  3. 将为ApplicationMaster分配多少内存。这是一个常量值,应该适合容器的最大大小。 此变量在mapred-site.xml文件中的yarn.app.mapreduce.am.resource.mb进行配置。
  4. 将为每个映射分配多少内存或减少操作。这应该小于最大尺寸。 这在mapred-site.xml文件中对属性mapreduce.map.memory.mbmapreduce.reduce.memory.mb进行配置即可。

所有这些属性之间的关系如下图所示:

2GB节点的示例配置

对于2GB节点,工作配置可能是:

属性

yarn.nodemanager.resource.memory-MB

1536

yarn.scheduler.maximum-allocation-MB

1536

yarn.scheduler.minimum-allocation-MB

128

yarn.app.mapreduce.am.resource.mb

512

mapreduce.map.memory.mb

256

mapreduce.reduce.memory.mb

256

编辑/home/hadoop/hadoop/etc/hadoop/yarn-site.xml并添加以下行: ~/hadoop/etc/hadoop/yarn-site.xml 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 <property> <name>yarn.nodemanager.resource.memory-mb</name> <value>1536</value> </property> <property> <name>yarn.scheduler.maximum-allocation-mb</name> <value>1536</value> </property> <property> <name>yarn.scheduler.minimum-allocation-mb</name> <value>128</value> </property> <property> <name>yarn.nodemanager.vmem-check-enabled</name> <value>false</value> </property>

最后一个属性禁用虚拟内存检查,可以防止在JDK8上正确分配容器。

编辑/home/hadoop/hadoop/etc/hadoop/mapred-site.xml并添加以下行: ~/hadoop/etc/hadoop/mapred-site.xml 1 2 3 4 5 6 7 8 9 10 11 12 13 14 <property> <name>yarn.app.mapreduce.am.resource.mb</name> <value>512</value> </property> <property> <name>mapreduce.map.memory.mb</name> <value>256</value> </property> <property> <name>mapreduce.reduce.memory.mb</name> <value>256</value> </property>

每个节点上的重复配置文件

  1. 将hadoop二进制文件复制到从属节点: cd /home/hadoop/ scp hadoop-*.tar.gz node1:/home/hadoop scp hadoop-*.tar.gz node2:/home/hadoop
  2. 通过ssh 连接到node1。由于上面复制的ssh密钥,不需要密码: ssh node1
  3. 解压缩二进制文件,重命名目录,然后退出node1以返回node-master: tar -xzf hadoop-2.8.1.tar.gz mv hadoop-2.8.1 hadoop exit
  4. node2重复步骤2和3 。
  5. 将Hadoop配置文件复制到从属节点: for node in node1 node2; do scp ~/hadoop/etc/hadoop/* $node:/home/hadoop/hadoop/etc/hadoop/; done

格式化HDFS

HDFS需要像任何经典文件系统一样进行格式化。在node-master上,运行以下命令:

代码语言:javascript
复制
hdfs namenode -format

您的Hadoop安装现已配置并准备运行。

运行并监控HDFS

本节将介绍如何在NameNode和DataNodes上启动HDFS,并监控所有内容是否正常工作以及与HDFS数据交互。

启动和停止HDFS

  1. 通过从node-master运行以下脚本来启动HDFS : start-dfs.sh 根据配置文件slaves中的配置,它将在node-master上启动NameNodeSecondaryNameNode,在node1node2上启动DataNode
  2. 在每个节点上的使用命令jps检查每个进程是否正在运行。你在node-master使用(PID会有所不同): 21922 Jps 21603 NameNode 21787 SecondaryNameNode 在node1node2上使用: 19728 DataNode 19819 Jps
  3. 要在主节点和从节点上停止HDFS,请从node-master运行以下命令: stop-dfs.sh

监控您的HDFS群集

  1. 您可以使用该hdfs dfsadmin命令获取有关运行HDFS群集的有用信息。试试例子: hdfs dfsadmin -report 这将打印所有正在运行的DataNode的信息(例如,容量和使用情况)。要获取所有可用命令的描述,请键入: hdfs dfsadmin -help
  2. 您还可以自动使用更友好的Web用户界面。将浏览器指向http:// node-master-IP:50070

,您将获得一个用户友好的监控控制台。

将数据放入HDFS

使用命令hdfs dfs完成HDFS的写入和读取。首先,手动创建主目录。所有其他命令将使用相对于此默认主目录的路径:

代码语言:javascript
复制
hdfs dfs -mkdir -p /user/hadoop

让我们以Gutenberg项目中的一些教科书为例。

  1. 在HDFS中创建books目录。以下命令将在主目录中创建它/user/hadoop/books: hdfs dfs -mkdir books
  2. 从Gutenberg项目中获取一些书籍: cd /home/hadoop wget -O alice.txt https://www.gutenberg.org/files/11/11-0.txt wget -O holmes.txt https://www.gutenberg.org/ebooks/1661.txt.utf-8 wget -O frankenstein.txt https://www.gutenberg.org/ebooks/84.txt.utf-8
  3. 将三本书通过HDFS放在books目录中: hdfs dfs -put alice.txt holmes.txt frankenstein.txt books
  4. 列出目录的内容book: hdfs dfs -ls books
  5. 将其中一本书移到本地文件系统: hdfs dfs -get books/alice.txt
  6. 您也可以直接从HDFS打印书籍: hdfs dfs -cat books/alice.txt

有许多命令可以管理您的HDFS。有关完整列表,您可以查看Apache HDFS shell文档,或者打印以下帮助:

代码语言:javascript
复制
hdfs dfs -help

运行YARN

HDFS是一个分布式存储系统,它不为集群中的运行和调度任务提供任何服务。这是YARN框架的工作。以下部分介绍如何启动,监控和向YARN提交作业。

启动和停止YARN

  1. 使用脚本启动YARN: start-yarn.sh
  2. 使用该jps命令检查一切是否正在运行。除了以前的HDFS守护程序,您应该在node-master上看到ResourceManager,在node1node2上看到NodeManager
  3. 要停止YARN,请在node-master上运行以下命令: stop-yarn.sh

监控YARN

  1. yarn命令提供了用于管理YARN群集的实用程序。您还可以使用以下命令打印正在运行的节点的报告: yarn node -list 同样,您可以使用以下命令获取正在运行的应用程序列表: yarn application -list 要获取该yarn命令的所有可用参数,请参阅Apache YARN文档
  2. 与HDFS一样,YARN提供了更友好的Web UI,默认情况下在8088资源管理器的端口上启动。将浏览器指向http:// node-master-IP:8088并浏览UI:

将MapReduce作业提交给YARN

将Yarn作业打包到jar文件中并提交给YARN以使用该命令执行yarn jar。Hadoop安装包提供了可以运行以测试集群的示例应用程序。您将使用它们在之前上传到HDFS的三本书上运行字数统计。

  1. 将样品罐提交给YARN。在node-master上,运行: yarn jar ~/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.1.jar wordcount "books/*" output 最后一个参数是保存作业的输出 - 在HDFS中。
  2. 作业完成后,您可以通过查询HDFS获得结果hdfs dfs -ls output。如果成功,输出将类似于: Found 2 items -rw-r--r-- 1 hadoop supergroup 0 2017-10-11 14:09 output/_SUCCESS -rw-r--r-- 1 hadoop supergroup 269158 2017-10-11 14:09 output/part-r-00000
  3. 打印结果: hdfs dfs -cat output/part-r-00000

下一步

现在您已启动并运行YARN群集,您可以:

更多信息

有关此主题的其他信息,您可能需要参考以下资源。虽然提供这些是希望它们有用,但请注意,我们无法保证外部托管材料的准确性或及时性。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是Hadoop?
  • 在你开始之前
  • Hadoop集群的体系结构
  • 配置系统
    • 在每个节点上创建主机文件
      • 为Hadoop用户分发身份验证密钥对
        • 下载并解压缩Hadoop二进制文件
          • 设置环境变量
          • 配置主节
            • 设置JAVA_HOME
              • 设置NameNode位置
                • 设置HDFS的路径
                  • 将YARN设置为Job Scheduler
                    • 配置YARN
                      • 配置Slaves
                      • 配置内存分配
                        • 内存分配属性
                          • 2GB节点的示例配置
                          • 每个节点上的重复配置文件
                          • 格式化HDFS
                          • 运行并监控HDFS
                            • 启动和停止HDFS
                              • 监控您的HDFS群集
                                • 将数据放入HDFS
                                • 运行YARN
                                  • 启动和停止YARN
                                    • 监控YARN
                                      • 将MapReduce作业提交给YARN
                                      • 下一步
                                      • 更多信息
                                      相关产品与服务
                                      容器服务
                                      腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                                      领券
                                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档