史上最全的单机hadoop集群搭建

零零散散两周时间,终于在单机环境下搭建起来了一个4节点的hadoop集群。在这篇文章中,我将分成如下部分进行分享

  1. 使用vagrant在本地运行虚拟机
  2. 使用vagrant在本地搭建多机网络
  3. Hadoop 基础环境搭建
  4. Hadoop 集群的简单验证
  5. Hadoop HA 模式搭建及验证
  6. 搭建过程中遇到的问题,及解决方案

1. 使用vagrant在本地运行虚拟机

vagrant是一个用于创建和部署虚拟化开发环境的工具,它能很方便地在本地生成多个虚拟机器,进而帮助我们在本地实现集群搭建。

1.1 vagrant 安装

vagrant下载

1.2 vagrant box 下载安装

首先在这里找到你想要的box: https://app.vagrantup.com/boxes/search

1.2.1 vagrant 命令下载安装

使用vagrant之前,先在本地新建一个文件夹 ~/hadoop-full/vagrant。后续所有的操作都在此文件加下进行。

vagrant init centos/7 
vagrant up

vagrant init 会创建一个VagrantFile文件,vagrant up会在启动的时候下载一个centos/7的虚拟机。该方式下载的比较慢,比较推荐使用第二种方式安装box

1.2.2 手动下载安装

在搜索列表里面点击自己想要下载的box进入详情页,然后点击选择想要下载的版本,进入该版本的详情页。在详情页URL的后面加上/providers/virtualbox.box(例如:https://app.vagrantup.com/centos/boxes/7/versions/2004.01/providers/virtualbox.box), 即可下载该版本的box。
下载完后,就可以用vagrant来添加box了。 将下载下来的box转移到~/hadoop-full/vagrant,然后使用 vagrant box add <boxName> <boxFilePath>命令 添加box

vagrant box add CentOS-7 CentOS-7-x86_64-Vagrant-2004_01.VirtualBox.box

添加完box后,使用vagrant box list 来查看box是否添加成功。在确定box添加成功后,就可以初始化box了 vagrnat init CentOS-7 (注意这里的CentOS-7就是在添加box的时候指定的boxName)。在初始化之后,会生成一个VagrantFile文件,该文件包含了虚拟机的各种配置信息,在后面我们会用到。接下来,我们就可以使用vagrant up 启动虚拟机啦。

Note: 更多关于vagrant的使用细节,可以去访问vagrant的官网。这里我做减法,只介绍如何使用vagrant在本地搭建集群

2 使用vagrant在本地搭建多机网络

要想在本地搭建起一个4节点的hadoop集群,就需要使用vagrant创建四个虚拟机节点,并保证四节点之间可以相互通信。在上面的介绍中我们知道,vagrant在启动虚拟机时,会去读取VagrantFile文件配置,那么我们只需要在VagrantFile里面配置好四台虚拟机,并指定它们的网络模式,就能启动4台虚拟机。

2.1 VagrantFIle配置

boxes = [
    {
        :name => "hadoop1",
        :mem => "1024",
        :cpu => "1"
   },
    {
        :name => "hadoop2",
        :mem => "1024",
        :cpu => "1"
    },
    {
        :name => "hadoop3",
        :mem => "1024",
        :cpu => "1"
    },
    {
        :name=> "hadoop4",
        :mem => "1024",
        :cpu => "1"
    }
]

Vagrant.configure("2") do |config|
  # box名称
  config.vm.box = "CentOS-7"
  # 循环设置每台虚拟机
  boxes.each do |opts|
    config.vm.define opts[:name] do |config|
      # 配置 hostname
      config.vm.hostname = opts[:name]
      # 配置内存和CPU
      config.vm.provider "virtualbox" do |v|
        v.customize ["modifyvm", :id, "--memory", opts[:mem]]
        v.customize ["modifyvm", :id, "--cpus", opts[:cpu]]
      end
      # 配置 IP
      config.vm.network "private_network", type: "dhcp"
    end
  end
end

注意:为了简单起见,这里的网络模式选择"private_network", ip地址自动分配。如果只想快速搭建集群,可以不用花很多时间研究网络模式这块。当然vagrant官网已经给出了很详尽的介绍,感兴趣的可以去看看。
配置完VagrantFile后,可以vagrant up 启动虚拟就,此刻你就会发现,在你本地有4台虚拟机启动,每台都分配有一个ip地址。

2.2 虚拟机相互通信

首先使用vagrant ssh hadoop1 登陆到名字为hadoop1的虚拟机中(名称是在VagrantFile中指定的)。新启动的虚拟机,有很多功能未安装,可以使用yum进行安装。比如 yum -y install net-tools. 在安装完net-tools后,就可以使用ifconfig查看hadoop1虚拟机的IP了;依照此方法一次得到4台虚拟机的IP

节点名 IP地址
hadoop1 172.28.128.3
hadoop2 172.28.128.4
hadoop3 172.28.128.5
hadoop4 172.28.128.6

在确定完各台虚拟机的IP后,就可以使用ping 命令来检查各虚拟机之间的通信状况了,如:ping 172.28.128.4
为了简化后续的网路连接操作,我们可以在每台虚拟机的 /etc/hosts中添加ip映射关系,如

172.28.128.3 hadoop1
172.28.128.4 hadoop2
172.28.128.5 hadoop3
172.28.128.6 hadoop4

还有一点非常重要,就是一定要关闭每台虚拟机的防火墙设置,因为后续节点之间要相互通信,如果没能关闭防火墙,集群的之间的通信就会受阻,从而集群搭建失败。可以使用如下命令关闭防火墙

firewall-cmd --state #检查防火墙状态
sudo systemctl stop firewalld.service   #停止firewall
sudo systemctl disable firewalld.service #禁止firewall开机启动

3. Hadoop 集群环境搭建

3.1 下载Hadoop安装包

这里我选择的是hadoop 3.2.1 版本https://www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-3.2.1/hadoop-3.2.1.tar.gz
将安装包放在放在~/hadoop-full/vagrant目录下,这样当启动虚拟机时,每台虚拟机的/vagrant目录下,就会有Hadoop的安装包。然后解压安装包tar -xzvf hadoop-3.2.1.tar.gz

3.2 下载java包

https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html
注意要选择linux版本。将下载下来的安装包放到~/hadoop-full/vagrant下,并解压。

3.3 Hadoop环境搭建

3.3.1 hadoop,java 配置

环境搭建主要是为各虚拟机配置hadoop环境和 java环境,首先在~/hadoop-full/vagrant目录下,使用vagrant up 启动虚拟机。
依次进入到hadoop1, hadoop2, hadoop3, hadoop4 在/etc/profile文件中添加hadoop 和java 配置

export JAVA_HOME=/vagrant/jdk1.8.0_261
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export HADOOP_HOME=/vagrant/hadoop-3.2.1
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:

并执行source etc/profile 使之生效。接下来可以使用下面的命令来验证安装配置是否成功

java -version 
hadoop version

最后进入/vagrant/hadoop-3.2.1/etc/hadoop/hadoop-env.sh, 在里面为Hadoop增加Java配置 export JAVA_HOME=/vagrant/jdk1.8.0_261

3.3.2 虚拟机之间免密登陆

首先确保各台虚拟机能免密登陆自己. 在每台虚拟机上执行下面的命令

ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

然后将主机hadoop1的公钥分发到hadoop2,hadoop3, hadoop4

scp id_dsa.pub hadoop2:~/.ssh/hadoop1.pub

接着将hadoop1.pub 公钥添加到hadoop2,hadoop3,hadoop3 的 authorized_keys中

cat ~/.ssh/hadoop1.pub >> ~/.ssh/authorized_keys

3.3.3 Hadoop集群配置

进入虚拟机/vagrant/hadoop-3.2.1/etc/hadoop目录下

3.3.3.1 core-site.xml

    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://hadoop1:9000</value>
    </property>
    <property>
         <name>hadoop.tmp.dir</name>
         <value>/data/hadoop/tmp</value>
   </property>

3.3.3.2 hdfs-site.xml

   <configuration>
        <property>
                <name>dfs.namenode.name.dir</name>
                <value>/data/hadoop/tmp/name</value>
                <description>为了保证元数据的安全一般配置多个不同目录</description>
        </property>

        <property>
                <name>dfs.datanode.data.dir</name>
                <value>/data/hadoop/tmp/data</value>
                <description>datanode 的数据存储目录</description>
        </property>

        <property>
                <name>dfs.replication</name>
                <value>3</value>
                <description>HDFS 的数据块的副本存储个数, 默认是3</description>
        </property>

        <property>
                <name>dfs.secondary.http.address</name>
                <value>hadoop3:50090</value>
                <description>secondarynamenode 运行节点的信息,和 namenode 不同节点</description>
        </property>
</configuration>

在指定dataNode、nameNode文件夹的时候,一定要自己先创建 /data/hadoop/tmp/data/data/hadoop/tmp/name 文件夹,并赋予文件权限

sudo mkdir -p /data/hadoop/tmp/data 
sudo mkdir -p /data/hadoop/tmp/name
sudo chmod -R 777 /data
sudo chown -R vagrant /data

3.3.3.3 mapred-site.xml

<configuration>
        <property>
                <name>mapreduce.framework.name</name>
                <value>yarn</value>
        </property>
</configuration>

3.3.3.4 workers

在workers文件中,添加slaves机器

hadoop2
hadoop3
hadoop4

3.3.3.5 masters

添加masters文件, 指定集群master服务器

hadoop1

3.3.3.6初始化hdfs并启动

hdfs namenode -format
start-all.sh

然后打开网页验证:172.28.128.3:9870

4. Hadoop HA搭建

集群分配

虚拟机 NN DN JN ZKFC ZK RM NM
hadoop1 * * *
hadoop2 * * * * * *
hadoop3 * * * * *
hadoop4 * * * *
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,392评论 5 470
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,258评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,417评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,992评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,930评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,199评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,652评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,327评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,463评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,382评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,432评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,118评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,704评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,787评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,999评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,476评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,057评论 2 341