什么是Hadoop?

Hadoop是一个开源的Apache项目,通常用来进行大数据处理。

Hadoop集群的架构:

master节点维护分布式文件系统的所有信息,并负责调度资源分配,在Hadoop集群中node-master就是master的角色,其包括两个服务:

  • NameNode: 负责管理分布式文件系统,维护了数据块在集群中的存储信息;
  • ResourceManager: 管理YARN任务,同时负责在worker节点的调度和执行。

worker节点负责存放数据,并提供执行任务的能力。在worker节点上包含两个进程:

  • DataNode: 管理在该节点上存放的物理数据,称为NameNode
  • NodeManager: 管理在该节点上运行的任务。

机器设置

以下配置都是针对Ubuntu系统的。我准备了3台机器:

  • node-master: 192.168.0.113
  • node1: 192.168.0.114
  • node2: 192.168.0.115

用户hadoop创建

  1. 创建用户hadoop,并设置密码:
sudo adduser hadoop
  1. hadoop用户添加到sudo用户组获取管理员权限:
sudo adduser hadoop sudo

安装JDK

我安装的是JDK8,安装方式略。

host文件配置

为了节点之间可以方便的通过名字来通信,我们在hosts文件中加入如下内容:

192.168.0.113  node-master
192.168.0.114 node1
192.168.0.115 node2
192.168.0.116 node3

配置ssh免密登录

配置了ssh证书后,master阶段通过ssh免密登录其他节点。

  1. 使用hadoop用户登录到mastr机器,并创建SSH证书:
ssh-keygen -b 4096 -C 'hadoop-yarn'
  1. 查看生成的公钥,并复制下公钥的内容:
cat /home/hadoop/.ssh/id_rsa.pub
  1. 在每个机器的/home/hadoop/.ssh文件夹下创建名为master.pub的文件,并将上面复制的公钥信息粘贴到里面;
  2. 将证书信息拷贝到已授权秘钥文件中:
cat ~/.ssh/master.pub >> ~/.ssh/authorized_keys

Hadoop安装

登录到node-master,下载hadoop,并解压:

http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-3.1.3/hadoop-3.1.3.tar.gz
tar -xzf hadoop-3.1.3.tar.gz
ln -s hadoop-3.1.3 hadoop

环境变量设置

  1. 添加Hadoop可执行目录到PATH。修改/home/hadoop/.profile,添加如下内容:
PATH=/home/hadoop/hadoop/bin:/home/hadoop/hadoop/sbin:$PATH
  1. 添加hadoop到shell的PATH路径。修改.bashrc,添加下面的内容:
export HADOOP_HOME=/home/hadoop/hadoop
export PATH=${PATH}:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin

MASTER节点设置

设置JAVA_HOME

这里我安装的是ORACLE版本的JDK,目录/usr/local/jdk,修改~/hadoop/etc/hadoop-env.sh,设置JAVA_HOME:

export JAVA_HOME=/usr/local/jdk

设置NameNode的位置

修改~/hadoop/etc/hadoop/core-site.xml文件,设置NameNode的路径为node-master的9000端口:

<?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.xml,内容如下:

<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表示该集群上的数据被冗余多少倍。注意replication的值不要超过worker节点的实际数量。

设置YARN作为任务调度器

修改mapred-site.xml,设置YARN作为默认的MapReduce操作的框架:

<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value>
</property>
<property>
<name>mapreduce.map.env</name>
<value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value>
</property>
<property>
<name>mapreduce.reduce.env</name>
<value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value>
</property>
</configuration>

配置YARN

修改yarn-site.xmlyarn.resourcemanager.hostname的值设置为node-master的ip地址:

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

设置Worker

创建一个名为workers的启动脚本,用来启动需要的进程。修改~/hadoop/etc/hadoop/workers,把所有的worker节点都加进去。

修改内存分配

默认的内存分配对于内存小于8GB的机器并不合适,所有对低内存的机器需要做一些特殊配置。

一个YARN任务的执行会用用到两种类型的资源:

  • 应用MASTER(AM)负责监控应用并协调集群中的exector;
  • AM创建的Executor才会真正的执行任务。对MapReduce任务,exectors上会并行的执行map或者reduce的操作。

    两者都是运行在worker节点上。每个worker节点运行一个NodeManager的进程,该进程负责在该节点上创建容器。整个集群被ResourceManager管理,ResourceManger在所有的worker节点上根据容量需求以及当前的负载,进行容器的分配与创建。

为了集群能够正常工作,下面4个配置必须合理的配置:

  1. 单个节点上YARN容器最多可以分配多少内存。这个配置的值需要比其他的都大,否则容器分配会被拒,application会失败。但是,这个值不应该是该节点的实际内存大小。该配置是yarn.nodemanager.resource.memory-mb,配置在yarn-site.xml中;
  2. 每个容器可以分配的最大最小内存。如果一个容器申请的内存超过设置的最大值,否则分配会失败,并会被分配成最小内存的整数倍。配置yarn.scheduler.maximum-allocation-mbyarn.scheduler.minimum-allocation-mb,都在yarn-site.xml文件中配置;
  3. ApplicationMaster分配的内存大小。yarn.app.mapreduce.am.resource.mb,配置在mapred-site.xml中;
  4. 每个map或者reduce操作可以分配的内存大小。这个值需要小于最大内存大小。mapreduce.map.memory.mbmapreduce.reduce.memory.mb,都配置在mapred-site.xml

以上四个类型的配置之间的关系如下图:

以2G内存的节点为例,可行的配置如下:

属性
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
  1. 修改home/hadoop/hadoop/etc/hadoop/yarn-site.xml,添加如下配置:
<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>

最后一个配置禁用虚拟内存检查。

  1. 修改/home/hadoop/hadoop/etc/hadoop/mapred-site.xml, 添加如下内容:
<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>

格式化HDFS

和正常的单机文件系统一样,HDFS在使用之前也需要格式化。在node-master上,运行如下命令:

hdfs namenode -format

到这里,hadoop的安装完成了,可以运行了。

运行和监控

接下来看下如何在NameNode和DataNodes上启动HDFS,以及如何进行监控。

HDFS的启停

  1. 在node-master上运行下面的命令启动HDFS:
start-dfs.sh

这个命令会在node-master上启动NameNodeSecondaryNameNode进程,同时在数据节点上创建DataNode进程。数据节点根据workers文件中的配置。

  1. 检查node-master和其他节点上的进程情况,可以通过jps命令来查看。在node-master上运行jps,可以看到NameNode和SecondaryNameNode,在worker节点上运行jps课题看到DataNode进程。
  2. 在node-master上通过下面的命令开停止hdfs:
stop-dfs.sh

监控HDFS集群

  1. 通过hdfs dfsadmin命令可以获得一些有用的信息:
  2. 另外HDFS提供了一个Web UI来查看hdfs集群的状态,访问地址: http://node-master-IP:9870

参考资料

本地Hadoop集群搭建的更多相关文章

  1. 大数据 --> Hadoop集群搭建

    Hadoop集群搭建 1.修改/etc/hosts文件 在每台linux机器上,sudo vim /etc/hosts 编写hosts文件.将主机名和ip地址的映射填写进去.编辑完后,结果如下: 2. ...

  2. Hadoop(二) HADOOP集群搭建

    一.HADOOP集群搭建 1.集群简介 HADOOP集群具体来说包含两个集群:HDFS集群和YARN集群,两者逻辑上分离,但物理上常在一起 HDFS集群: 负责海量数据的存储,集群中的角色主要有 Na ...

  3. 三节点Hadoop集群搭建

    1. 基础环境搭建 新建3个CentOS6.5操作系统的虚拟机,命名(可自定)为masternode.slavenode1和slavenode2.该过程参考上一篇博文CentOS6.5安装配置详解 2 ...

  4. 大数据初级笔记二:Hadoop入门之Hadoop集群搭建

    Hadoop集群搭建 把环境全部准备好,包括编程环境. JDK安装 版本要求: 强烈建议使用64位的JDK版本,这样的优势在于JVM的能够访问到的最大内存就不受限制,基于后期可能会学习到Spark技术 ...

  5. 大数据学习——HADOOP集群搭建

    4.1 HADOOP集群搭建 4.1.1集群简介 HADOOP集群具体来说包含两个集群:HDFS集群和YARN集群,两者逻辑上分离,但物理上常在一起 HDFS集群: 负责海量数据的存储,集群中的角色主 ...

  6. 环境搭建-Hadoop集群搭建

    环境搭建-Hadoop集群搭建 写在前面,前面我们快速搭建好了centos的集群环境,接下来,我们就来开始hadoop的集群的搭建工作 实验环境 Hadoop版本:CDH 5.7.0 这里,我想说一下 ...

  7. Hadoop集群搭建-03编译安装hadoop

    Hadoop集群搭建-05安装配置YARN Hadoop集群搭建-04安装配置HDFS  Hadoop集群搭建-03编译安装hadoop Hadoop集群搭建-02安装配置Zookeeper Hado ...

  8. Hadoop集群搭建(完全分布式版本) VMWARE虚拟机

    Hadoop集群搭建(完全分布式版本) VMWARE虚拟机 一.准备工作 三台虚拟机:master.node1.node2 时间同步 ntpdate ntp.aliyun.com 调整时区 cp /u ...

  9. Hadoop 集群搭建

    Hadoop 集群搭建 2016-09-24 杜亦舒 目标 在3台服务器上搭建 Hadoop2.7.3 集群,然后测试验证,要能够向 HDFS 上传文件,并成功运行 mapreduce 示例程序 搭建 ...

随机推荐

  1. [SDOI2006] 线性方程组

    洛谷 P2455 传送门 刚开始写了个消成上三角的,结果狂wa. 后来经过研究发现,消成上三角那种不能直接判断无解或无穷多解,需要其它的操作. 所以干脆学了个消成对角线的,写了一发A了. 其实两种消元 ...

  2. 在shell下执行命令的方法

    在shell下执行命令的方法 1. #!/bin/sh 语法:在shell.sh的开头写入 #!/bin/sh 一般的shell脚本就是这种用法.这种方法调用脚本开头的shell执行命令,子shell ...

  3. Java找出两个链表的第一个公共节点

    题目描述输入两个链表,找出它们的第一个公共结点. 我的思路:因为是链表,长度都是未知的,不能盲目的两个一起开始自增判断. 首先需要得到 L1的长度 和 L2的长度,让较长的那个先走 (length1- ...

  4. maven创建Java项目命令

    1.maven创建普通Java项目的命令 mvn archetype:create -DgroupId=packageName -DartifactId=projectName 2.maven创建Ja ...

  5. 三星HTC价格跳水 安卓旗舰会否崩塌?

    安卓旗舰会否崩塌?" title="三星HTC价格跳水 安卓旗舰会否崩塌?"> 官方降价,对于国产手机来说似乎是家常便饭.小米.魅族等,总会时隔几个月就将自家旗舰机 ...

  6. getshell技巧-phpMyAdmin的利用

    生活就是泥沙俱下,鲜花和荆棘并存.--毕淑敏 1.明确目标2.信息收集3.漏洞挖掘和利用 信息收集 明确路径 利用目录扫描工具,对目标网站进行扫描,获取网站目录.常用工具有Kali中的DirBuste ...

  7. ARTS 第 1 周

    每周一道算法.点评一篇英文技术文章.学习一个技术技巧.分享一个技术观点和思路 Algorithm 题目:两数和 给定一个整数数组,返回这两个数字的索引,使它们相加为一个指定的数. 因为是返回两个数字的 ...

  8. 阿里凭啥比腾讯更会和Groupon相处好?

    提起Groupon,大部分人对其第一反应就是那个"过气"的团购网鼻祖和与腾讯合作推出的国内团购网站"高朋网",死相极惨!虽然马化腾表示是双方准备不足的原因,但却 ...

  9. linux Init分析(原创)

    1.uboot的目标就是启动内核kernel: 2.kernel的目的就是启动应用程序,而第一个应用程序即是Init,构建根文件系统. 从uboot初始化配置后,引导内核的启动,启动函数为:start ...

  10. 分析Android中View的工作流程

    在分析View的工作流程时,需要先分析一个很重要的类,MeasureSpec.这个类在View的测量(Measure)过程中会用到. MeasureSpec MeasureSpec是View的静态内部 ...