在腾讯云CVM上搭建Hadoop集群

介绍

本教程将介绍如何在腾讯云CVM上搭建Hadoop集群。Hadoop中是一个Apache的框架,可以让你通过基本的编程处理跨服务器集群的分布式方式的大型数据集。Hadoop提供的可扩展性允许你从单个服务器扩展到数千台计算机。它还在应用层提供故障检测,因此它可以检测和处理故障,作为高可用性服务。

我们将在本教程中使用4个重要模块:

  • Hadoop Common是支持其他Hadoop模块所必需的常用实用程序和库的集合。
  • Apache组织所述,Hadoop分布式文件系统(HDFS)是一种高度容错的分布式文件系统,专门设计用于在商用硬件上运行以处理大型数据集。
  • Hadoop YARN是用于作业调度和集群资源管理的框架。
  • Hadoop MapReduce是一个基于YARN的系统,用于并行处理大型数据集。

在本教程中,我们将在四台腾讯云CVM上搭建Hadoop集群

准备

本教程需要以下内容:

  • 4台Ubuntu 16.04 服务器,每一台服务都需要设置好一个可以使用sudo命令的非root账户。根据Hadoop的语言,我们给4台服务器分别命名如下:
    • hadoop-master
    • hadoop-worker-01
    • hadoop-worker-02
    • hadoop-worker-03

没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后在购买服务器。因为最开始搭建环境都是一样的步骤,步骤1和步骤2是需要我们为4台服务器都执行的操作,为此我们不必一样的步骤操作4次,我们可以利用腾讯云的快照服务。

第1步 - 安装Hadoop

我们要安装Java和Hadoop

首先,更新一下Ubuntu 系统,确保本地的软件包都是最新的:

sudo apt-get update && sudo apt-get -y dist-upgrade

接下来,安装Java开发包。

sudo apt-get -y install openjdk-8-jdk-headless

创建安装Hadoop的目录my-hadoop-install,然后进入该目录。

mkdir my-hadoop-install && cd my-hadoop-install

一旦我们创建了目录,我们会从Hadoop发布列表中安装最新的二进制文件。在本教程的时候,最新的是Hadoop 3.0.1

注意:请记住,这些下载是通过镜像站点分发的,建议使用GPG或SHA-256检查它是否被篡改。

确定你要下载的版本,复制下载链接,然后用wget命令下载,例如:

wget http://mirror.cc.columbia.edu/pub/software/apache/hadoop/common/hadoop-3.0.1/hadoop-3.0.1.tar.gz 

下载完成后,使用tar命令解压缩:

tar xvzf hadoop-3.0.1.tar.gz

我们现在准备开始我们的初始配置了。

第2步 - 更新Hadoop环境配置

对于每个CVM节点,我们都需要进行设置JAVA_HOME。使用nano或其他你喜欢的文本编辑器打开以下文件:

nano ~/my-hadoop-install/hadoop-3.0.1/etc/hadoop/hadoop-env.sh

找到示例的这部分内容,包含JAVA_HOME

...
###
# Generic settings for HADOOP
###
​
# Technically, the only required environment variable is JAVA_HOME.
# All others are optional.  However, the defaults are probably not
# preferred.  Many sites configure these options outside of Hadoop,
# such as in /etc/profile.d
​
# The java implementation to use. By default, this environment
# variable is REQUIRED on ALL platforms except OS X!
# export JAVA_HOME=
​
# Location of Hadoop.  By default, Hadoop will attempt to determine
# this location based upon its execution path.
# export HADOOP_HOME=
...

改完后看起来像这样:

...
###
# Generic settings for HADOOP
###
​
# Technically, the only required environment variable is JAVA_HOME.
# All others are optional.  However, the defaults are probably not
# preferred.  Many sites configure these options outside of Hadoop,
# such as in /etc/profile.d
​
# The java implementation to use. By default, this environment
# variable is REQUIRED on ALL platforms except OS X!
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
​
# Location of Hadoop.  By default, Hadoop will attempt to determine
# this location based upon its execution path.
# export HADOOP_HOME=
...

我们还需要添加一些环境变量来运行Hadoop及模块。它们添加到文件的底部,所以它看起来如下所示,把sammy替换成你登陆系统所用的账户,也就是设置好的可以使用sudo命令的非root的账户名。

注意:建议使用腾讯云快照,这样的话每台CVM的账户都是统一的名字,就会方便很多。当然你想要每台CVM的账户都不一样,也是可以的,但是要注意修改正确。

...
#
# To prevent accidents, shell commands be (superficially) locked
# to only allow certain users to execute certain subcommands.
# It uses the format of (command)_(subcommand)_USER.
#
# For example, to limit who can execute the namenode command,
export HDFS_NAMENODE_USER="sammy"
export HDFS_DATANODE_USER="sammy"
export HDFS_SECONDARYNAMENODE_USER="sammy"
export YARN_RESOURCEMANAGER_USER="sammy"
export YARN_NODEMANAGER_USER="sammy"

保存并退出。接下来,运行以下命令应用:

source ~/my-hadoop-install/hadoop-3.0.1/etc/hadoop/hadoop-env.sh

随着hadoop-env.sh脚本源代码的更新,我们需要为Hadoop分布式文件系统(HDFS)创建一个数据目录来存储有关的HDFS文件。

sudo mkdir -p /usr/local/hadoop/hdfs/data

使用你的相应用户设置此文件的权限。请记住,如果每个CVM上有不同的账户名,请确保允许相应的账户拥有这些权限:

sudo chown -R sammy:sammy /usr/local/hadoop/hdfs/data

到此,4台CVM公共基础环境的部署差不多了,因为考虑到4台CVM使用4个不同命的账户名称,会很不方便,建议到这个步骤只要配置一台CVM,然后再使用腾讯云的快照服务。这样每一台CVM都会有统一的基础环境。

第3步 - 完成每个节点的初始配置

此时,我们需要更新4个CVM节点的core_site.xml文件。在每个CVM中,打开以下文件:

nano ~/my-hadoop-install/hadoop-3.0.1/etc/hadoop/core-site.xml

可以看到以下行:

...
<configuration>
</configuration>

添加以下内容,将server-ip替换成每个CVM的相应的IP。如果你开启了防火墙,则需要打开9000端口。

...
<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://server-ip:9000</value>
    </property>
</configuration>

现在为每个服务器节点更新所有常规Hadoop设置,我们可以继续通过SSH密钥连接我们的节点。

步骤4 - 为每个节点设置SSH

为了让Hadoop的正常工作,我们需要设置主节点和从节点之间的无密码SSH连接(命名为hadoop-master的是主服务器(主节点),命名为hadoop-worker-xx的是从服务器(从节点))。

我们首先需要在主节点上创建一对公钥 - 私钥,该节点将是IP地址所属的节点hadoop-master

hadoop-masterCVM上,运行以下命令。你将按下enter以使用键位置的默认值,然后按enter两次以使用空密码:

ssh-keygen

对于每个从节点,我们需要将主节点的公钥其复制到每个从节点的authorized_keys文件中。

使用cat命令将.ssh文件夹中的id_rsa.pub文件存储的公钥打印到控制台:

cat ~/.ssh/id_rsa.pub

现在登录每个从节点CVM,然后打开authorized_keys文件:

nano ~/.ssh/authorized_keys

然后将主节点的公钥(就是运行cat ~/.ssh/id_rsa.pub命令后生成的输出)复制到每个CVM的~/.ssh/authorized_keys文件中。请务必在关闭前保存每个文件

完成后,还可以使用相同的命令将主节点的公钥复制到它自己的authorized_keys文件中:

nano ~/.ssh/authorized_keys

hadoop-master,配置ssh,添加每个节点的主机名:

nano ~/.ssh/config

将文件修改为如下所示,并修改成相关的IP和账户名(统一的账户名,会方便一点)。

Host hadoop-master-server-ip
    HostName hadoop-example-node-server-ip
    User sammy
    IdentityFile ~/.ssh/id_rsa
​
Host hadoop-worker-01-server-ip
    HostName hadoop-worker-01-server-ip
    User sammy
    IdentityFile ~/.ssh/id_rsa
​
Host hadoop-worker-02-server-ip
    HostName hadoop-worker-02-server-ip
    User sammy
    IdentityFile ~/.ssh/id_rsa
​
Host hadoop-worker-03-server-ip
    HostName hadoop-worker-03-server-ip
    User sammy
    IdentityFile ~/.ssh/id_rsa

保存并关闭文件。

hadoop-master,用SSH进入每个节点:

ssh sammy@hadoop-worker-01-server-ip

由于你是第一次使用当前系统设置登录每个节点,因此会询问以下内容:

are you sure you want to continue connecting (yes/no)?

输入yes每个从节点都需要初始SSH连接。最后,使用logout注销登录,就可以返回hadoop-master

logout

现在我们已经为每个从节点成功设置了无密码SSH,现在我们可以继续配置主节点。

步骤5 - 配置主节点

对于我们的Hadoop集群,我们需要在主节点CVM上配置HDFS。

在主节点上,编辑以下文件:

nano ~/my-hadoop-install/hadoop-3.0.1/etc/hadoop/hdfs-site.xml

编辑configuration部分如下:

...
<configuration>
    <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:///usr/local/hadoop/hdfs/data</value>
    </property>
</configuration>

保存并关闭文件。

接下来,我们将在主节点上配置MapReduce属性。使用nano或其他文本编辑器打开mapred.site.xml

nano ~/my-hadoop-install/hadoop-3.0.1/etc/hadoop/mapred-site.xml

然后更新文件,将hadoop-master-server-ip替换成主节点的的IP地址:

...
<configuration>
    <property>
        <name>mapreduce.jobtracker.address</name>
        <value>hadoop-master-server-ip:54311</value>
    </property>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>

保存并退出。如果你开启了防火墙,请务必打开端口54311。

接下来,在主节点上设置YARN。打开yarn-site.xml文件:

nano ~/my-hadoop-install/hadoop-3.0.1/etc/hadoop/yarn-site.xml

更新文件,确保输入当前服务器的IP地址:

...
<configuration>
​
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <property>
        <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
        <value>org.apache.hadoop.mapred.ShuffleHandler</value>
    </property>
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>hadoop-master-server-ip</value>
    </property>
</configuration>

最后,要让Hadoop知道哪个是主节点,哪个是从节点。首先,打开masters文件:

nano ~/my-hadoop-install/hadoop-3.0.1/etc/hadoop/masters

在此文件中,你将添加当前服务器的IP地址:

hadoop-master-server-ip

现在,打开并编辑workers文件:

nano ~/my-hadoop-install/hadoop-3.0.1/etc/hadoop/workers

然后在localhost下面添加每个从节点的IP地址,。

localhost
hadoop-worker-01-server-ip
hadoop-worker-02-server-ip
hadoop-worker-03-server-ip

完成MapReduceYARN配置后,我们现在可以完成配置从节点。

步骤6 - 配置从节点

我们现在将配置从节点,以便它们每个都具有对HDFS的数据目录的正确引用。

每个从节点上,编辑hdfs-site.xml文件:

nano ~/my-hadoop-install/hadoop-3.0.1/etc/hadoop/hdfs-site.xml

用以下内容替换配置部分:

<configuration>
    <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:///usr/local/hadoop/hdfs/data</value>
    </property>
</configuration>

保存并关闭文件。确保在三个从节点上都执行此步骤。

此时,我们的从节点CVMs指向HDFS的数据目录,这将允许我们运行我们的Hadoop集群。

第7步 - 运行Hadoop集群

我们已经到了可以启动Hadoop集群的程度。在我们启动它之前,我们需要在主节点上格式化HDFS。在主节点CVM上,将目录更改为安装Hadoop的位置:

cd ~/my-hadoop-install/hadoop-3.0.1/

然后运行以下命令格式化HDFS:

sudo ./bin/hdfs namenode -format

成功格式化namenode将会有大量的输出,主要由INFO语句组成。在底部,你将看到以下内容,确认你已成功格式化存储目录。

Output...
2018-01-28 17:58:08,323 INFO common.Storage: Storage directory /usr/local/hadoop/hdfs/data has been successfully formatted.
2018-01-28 17:58:08,346 INFO namenode.FSImageFormatProtobuf: Saving image file /usr/local/hadoop/hdfs/data/current/fsimage.ckpt_0000000000000000000 using no compression
2018-01-28 17:58:08,490 INFO namenode.FSImageFormatProtobuf: Image file /usr/local/hadoop/hdfs/data/current/fsimage.ckpt_0000000000000000000 of size 389 bytes saved in 0 seconds.
2018-01-28 17:58:08,505 INFO namenode.NNStorageRetentionManager: Going to retain 1 images with txid >= 0
2018-01-28 17:58:08,519 INFO namenode.NameNode: SHUTDOWN_MSG: 
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at hadoop-example-node/127.0.1.1
************************************************************/

现在,通过运行以下脚本来启动Hadoop集群(在使用less命令运行之前检查脚本):

sudo ./sbin/start-dfs.sh

然后,你将看到包含以下内容的输出:

Starting namenodes on [hadoop-master-server-ip]
Starting datanodes
Starting secondary namenodes [hadoop-master]

然后使用以下命令运行YARN:

./sbin/start-yarn.sh

会有以下输出:

Starting resourcemanager
Starting nodemanagers

运行这些命令后,应该在主节点上和每个从节点上都运行守护程序。

我们可以通过运行jps命令来检查守护进程以检查Java进程:

jps

运行后jps命令,你会看到NodeManagerSecondaryNameNodeJpsNameNodeResourceManager,和DataNode正在运行。将出现类似于以下输出的内容:

9810 NodeManager
9252 SecondaryNameNode
10164 Jps
8920 NameNode
9674 ResourceManager
9051 DataNode

这将验证我们是否已成功创建群集并验证Hadoop守护程序是否正在运行。

在你选择的Web浏览器中,输入下内容来全面了解群集的运行状况:

http://hadoop-master-server-ip:9870

如果你有开启防火墙,请务必打开9870端口。你将看到类似于以下内容:

从这里,你可以导航到Datanodes菜单栏中的项目以查看节点活动。

结论

在本教程中,我们讨论了如何使用DigitalOcean Ubuntu 16.04 CVM设置和配置Hadoop多节点集群。你现在还可以使用Hadoop的DFS Health Web界面监视和检查群集的运行状况。要了解可以使用新配置的集群的可能项目,请查看Apache 由Hadoop提供支持的长项目列表。创建Hadoop教程就到这里,我们发现配置非常繁琐,这里我推荐你使用腾讯云弹性MapReduce服务,弹性MapReduce (EMR)结合云技术和 Hadoop、Hive、Spark、Hbase、Storm 等社区开源技术,提供安全、低成本、高可靠、可弹性伸缩的云端托管 Hadoop 服务。您可以在数分钟内创建安全可靠的专属 Hadoop 集群,以分析位于集群内数据节点或 COS 上的 PB 级海量数据。 更多Hadoop教程请前往腾讯云+社区学习更多知识。


参考文献:《How To Spin Up a Hadoop Cluster with DigitalOcean Droplets》

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏分布式系统和大数据处理

安装和配置Hadoop集群(3节点)

在 安装和配置Hadoop(单节点) 这篇文章中,已经进行了Hadoop单机伪集群模式的部署。生产环境中,Hadoop都是以集群方式进行安装和部署的,否则,就不...

37850
来自专栏牛肉圆粉不加葱

YARN 设计理念与基本架构

ResourceManager 是一个全局的资源管理器,负责整个集群的资源管理和分配。它主要由两个组件构成:调度器(Scheduler)和应用程序管理器(App...

10910
来自专栏Hadoop实操

如何使用StreamSets实时采集Kafka数据并写入Hive表

90520
来自专栏Hadoop实操

如何为Kerberos环境的CDH集群在线扩容数据节点

Hadoop集群其中一个优点就是可伸缩性(横向扩展),通过增加计算节点使服务容量产生线性增长的能力。可伸缩的应用程序的主要特点是:只需要增加资源,而不需要对应用...

61180
来自专栏Ken的杂谈

Hadoop高可用集群部署指南

Hadoop是一个由Apache基金会所开发的分布式系统基础架构,用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。

22130
来自专栏Hadoop实操

0463-如何使用SQuirreL通过JDBC连接CDH的Hive(方式二)

Fayson在前面的《0459-如何使用SQuirreL通过JDBC连接CDH的Hive(方式一)》简单的介绍了SQuirreL SQL Client的安装、注...

18030
来自专栏Hadoop实操

如何修改CM及CDH元数据库配置

在前面Fayson介绍了《如何实现CDH元数据库MySQL的主主互备》和《如何实现CDH元数据库MySQL的高可用》,实现了MySQL的高可用后访问地址有了变化...

67250
来自专栏我是攻城师

hive on spark 测试

37690
来自专栏分布式系统和大数据处理

安装和配置Hadoop集群(3节点)

在 安装和配置Hadoop(单节点) 这篇文章中,已经进行了Hadoop单机伪集群模式的部署。生产环境中,Hadoop都是以集群方式进行安装和部署的,否则,就不...

67430
来自专栏Hadoop实操

CDSW1.3的新功能

前两天Fayson介绍过《CDH5.14和CM5.14的新功能》,与CDH5.14同时发布的还有CDSW1.3,以下我们具体看看CDSW1.3的新功能。

44360

扫码关注云+社区

领取腾讯云代金券