1,Local(Standalone) Mode 单机模式

  $ mkdir input$ cp etc/hadoop/*.xml input$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.9.2.jar grep input output 'dfs[a-z.]+'$ cat output/*

  解析$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.9.2.jar grep input output 'dfs[a-z.]+'  input 夹下面的文件 :capacity-scheduler.xml  core-site.xml  hadoop-policy.xml  hdfs-site.xml  httpfs-site.xml  yarn-site.xml

  bin/hadoop    hadoop 命令  jar           这个命令在jar包里面  share/hadoop/mapreduce/hadoop-mapreduce-examples-2.9.2.jar  具体位置  grep          grep 函数  input         grep 函数的目标文件夹  output        grep 函数结果的输出文件夹  'dfs[a-z.]+'  grep 函数的匹配正则条件

  直译:将input文件下面的文件中包含 'dfs[a-z.]+' 的字符串给输出到output 文件夹中  输出结果:part-r-00000  _SUCCESS  cat part-r-00000:1 dfsadmin  在hadoop-policy.xml 存在此字符串

2,Pseudo-Distributed Operation 伪分布式

在 etc/hadoop/core.site.xml 添加以下属性<configuration><property><name>fs.defaultFS</name><value>hdfs://hella-hadoop.chris.com:8020</value>   hella-hadoop.chris.com是主机名,已经和ip相互映射</property>

还需要覆盖默认的设定,mkdir -p data/tmp    <property>        <name>hadoop.tmp.dir</name>        <value>/opt/modules/hadoop-2.5.0/data/tmp</value>   hella-hadoop.chris.com是主机名,已经和ip相互映射    </property>

 垃圾箱设置删除文件保留时间(分钟)    <property>        <name>fs.trash.interval</name>        <value>10080</value>    </property></configuration>

etc/hadoop/hdfs-site.xml: 伪分布式1个备份<configuration>    <property>        <name>dfs.replication</name>        <value>1</value>    </property>配置从节点    <property>        <name>dfs.namenode.secondary.http-address</name>        <value>主机名:50090</value>    </property> </configuration>

格式化元数据,进入到安装目录下

bin/hdfs namenode -format

启动namenode,所有的命令都在sbin下,通过ls sbin/   可以查看

sbin/hadoop-daemon.sh start namenode    hadoop 的守护线程启动(主数据)

sbin/hadoop-daemon.sh start datanode     启动datanode(从数据)

nameNode都有个web网页,端口50070

创建hdfs 文件夹,创建在用户名下面

bin/hdfs dfs -mkdir -p /user/chris

查看文件夹

bin/hdfs dfs -ls -R /     回调查询

本地新建文件夹mkdir wcinput   mkdir wcoutput   vi wc.input创建wc.input文件,并写入内容

hdfs文件系统新建文件夹

bin/hdfs dfs -mkdir -p /user/chris/mapreduce/wordcount/input

本地文件上传hdfs文件系统

bin/hdfs dfs  -put wcinput/wc.input /user/chris/mapreduce/wordcount/input/

在hdfs文件系统上使用mapreduce

$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.9.2.jar wordcount /user/chris/mapreduce/wordcount/input /user/chris/mapreduce/wordcount/output

红色代表:读取路径

蓝色代表:输出路径

所以mapreduce的结果已经写到了hdfs的输出文件里面去了

Yarn on a Single Node

/opt/modules/hadoop-2.5.0/etc/hadoop/yarn-site.xml 在hadoop的安装路径下
<configuration><property><name>yarn.resourcemanager.hostname</name><value>hella-hadoop.chris.com</value></property><property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value></property>
</configuration>

yarn 的配置已经完成

在同一目录下slave文件上添加主机名或者主机ip,默认是localhost

yarn-env.sh 和 mapred-env.sh把JAVA_HOME 更改下,防止出错

export JAVA_HOME=/home/chris/software/jdk1.8.0_201

将mapred-site.xml.template 重命名为mapred-site.xml,同时添加以下配置

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

先将/user/chris/mapreduce/wordcount/output/删除

再次执行$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.9.2.jar wordcount /user/chris/mapreduce/wordcount/input /user/chris/mapreduce/wordcount/output

伪分布式执行完毕,mapreduce 执行在了yarn 上

3,完全分布式

   基于伪分布式,配置好一台机器后,分发至其它机器

step1: 配置ip 和 hostname 映射

vi /etc/hosts

192.168.178.110 hella-hadoop.chris.com hella-hadoop

192.168.178.111 hella-hadoop02.chris.com hella-hadoop02

192.168.178.112 hella-hadoop03.chris.com hella-hadoop03

同时在window以下路径也得设置

C:\Windows\System32\drivers\etc\hosts

192.168.178.110 hella-hadoop.chris.com hella-hadoop

192.168.178.111 hella-hadoop02.chris.com hella-hadoop02

192.168.178.112 hella-hadoop03.chris.com hella-hadoop03

具体可参考linux ip hostname 映射

https://www.cnblogs.com/pickKnow/p/10701914.html

step2:部署(假设三台机器)

不同机器配置不同的节点

部署:hella-hadoop        hella-hadoop02         hella-hadoop03
HDFS:NameNodeDataNode            DataNode               DataNodeSecondaryNameNode
YARN:ResourceManagerNodeManager            NodeManager            NodeManager                                   MapReduce:JobHistoryServer配置:* hdfshadoop-env.sh core.site.xmlhdfs-site.xmlslaves*yarnyarn-env.shyarn-site.xmlslaves*mapreducemapred-env.shmapred-site.xml

step3:修改配置文件

core.xml<configuration><property><name>fs.defaultFS</name><value>hdfs://hella-hadoop.chris.com:8020</value></property><property><name>hadoop.tmp.dir</name><value>/opt/app/hadoop-2.5.0/data/tmp</value></property><property><name>fs.trash.interval</name><value>10080</value></property></configuration>

hdfs-site.xml
<configuration><property><name>dfs.namenode.secondary.http-address</name><value>hella-hadoop03.chris.com:50090</value></property>
</configuration>

slaveshella-hadoop.chris.com
hella-hadoop02.chris.com
hella-hadoop03.chris.com

yarn-site.xml<configuration><property><name>yarn.resourcemanager.hostname</name><value>hella-hadoop02.chris.com</value></property><property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value></property><!--NodeManager Resouce --><property><name>yarn.nodemanager.resource.memory-mb</name><value>4096</value></property><property><name>yarn.nodemanager.resource.cpu-vcores</name><value>4</value></property><property><name>yarn.log-aggregation-enable</name><value>true</value></property><property><name>yarn.log-aggregation-retain-seconds</name><value>640800</value></property></configuration>

mapred-site.xml<configuration><property><name>mapreduce.framework.name</name><value>yarn</value></property><property><name>mapreduce.jobhistory.address</name><value>hella-hadoop.chris.com:10020</value></property><property><name>mapreduce.jobhistory.webapp.address</name><value>hella-hadoop.chris.com:19888</value></property>
</configuration

step4:集群的配置路径在各个机器上要一样,用户名一样

step5: 分发hadoop 安装包至各个机器节点

scp -p 源节点 目标节点

使用scp 命令需要配置ssh 无密钥登陆,博文如下:

https://www.cnblogs.com/pickKnow/p/10734642.html

step6:启动并且test mapreduce

可能会有问题No route to Host 的Error,查看hostname 以及 ip 配置,或者是防火墙有没有关闭

防火墙关闭,打开,状态查询,请参考以下博文:

https://www.cnblogs.com/pickKnow/p/10670882.html

4,完全分布式+  HA

HA全称:HDFS High Availability Using the Quorum Journal Manager 即 HDFS高可用性通过配置分布式日志管理

HDFS集群中存在单点故障(SPOF),对于只有一个NameNode 的集群,若是NameNode 出现故障,则整个集群无法使用,知道NameNode 重新启动。

HDFS HA 功能则通过配置Active/StandBy 两个NameNodes 实现在集群中对NameNode 的热备来解决上述问题,如果出现故障,如机器崩溃或机器需要升级维护,这时可以通过此种方式将NameNode很快的切换到另一台机器.

在以上的分布式配置如下:假设有三台机器

配置要点:

* share edits

JournalNode

*NameNode

Active,Standby

*Client

proxy

*fence

隔离,同一时刻只能仅有一个NameNode对外提供服务

规划集群:

hella-hadoop.chris.com           hella-hadoop02.chris.com         hella-hadoop03.chris.com

NameNode                               NameNode

JournalNode                             JournalNode                             JournalNode

DateNode                                  DateNode                                 DateNode

因为NameNode有两个,一个备份,所以就不需要secondarynamenode了

配置:

core-site.xml

    <property><name>fs.defaultFS</name><value>hdfs://ns1</value></property>

hdfs-site.xml

<!-- 代表一个nameservice --><property><name>dfs.nameservices</name><value>ns1</value></property><!-- ns1 有两个namenode --><property><name>dfs.ha.namenodes.ns1</name><value>nn1,nn2</value></property><!-- 分别配置namenode的地址 --><property><name>dfs.namenode.rpc-address.ns1.nn1</name><value>hella-hadoop.chris.com:8020</value></property><property><name>dfs.namenode.rpc-address.ns1.nn2</name><value>hella-hadoop02.chris.com:8020</value></property><!-- 分别配置namenode web 端地址 --><property><name>dfs.namenode.http-address.ns1.nn1</name><value>hella-hadoop.chris.com:50070</value></property><property><name>dfs.namenode.http-address.ns1.nn2</name><value>hella-hadoop02.chris.com:50070</value></property><!-- NameNode Shared Edits Address 即 journal node 地址 -->     <property><name>dfs.namenode.shared.edits.dir</name><value>qjournal://hella-hadoop.chris.com:8485;hella-hadoop02.chris.com:8485;hella-hadoop03.chris.com:8485/ns1</value></property><!-- journal node 目录-->     <property><name>dfs.journalnode.edits.dir</name><value>/opt/app/hadoop-2.5.0/data/dfs/jn</value></property><!-- HDFS 代理客户端 -->     <property><name>dfs.client.failover.proxy.provider.ns1</name><value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value></property><!-- fence 隔离 只允许一个namenode 激活 -->    <!-- 如果使用fence ssh 隔离,要求机器namenode 的机器能够相互无密钥登陆-->    <property><name>dfs.ha.fencing.methods</name><value>sshfence</value></property><property><name>dfs.ha.fencing.ssh.private-key-files</name><value>/home/chris/.ssh/id_rsa</value></property>    

配置完毕,分发到其他的两台机器,开始启动

step1:在各个JournalNode 节点桑,输入以下命令启动journalnode 服务

$sbin/hadoop-daemon.sh start journalnode

step2:在【nn1】上,对其进行格式化,并启动:

$bin/hdfs namenode-format

$sbin/hadoop-daemon.sh start namenode

step3:在【nn2】上,同步nn1的元数据信息:

$bin/hdfs namenode-bootstrapStandby

step4:启动【nn2】

$sbin/hadoop-daemon.sh start namenode

step5:将【nn1】切换为Active

$bin/hdfs haadmin-transitionToActive nn1

step6:在【nn1】上,启动所有的datanode

$sbin/hadoop-daemon.sh start datanode

4,完全分布式+  HA  + zookeeper

只配置HA,只是手动的故障转移,要想做到自动的故障转移,需要通过zookeeper 对集群的服务进行一个监控

zookeeper的作用:
     * 启动以后两个namenode 都是standby

zookeeper 选举一个为Active

*监控

ZKFC:zookeeper failover controller

集群的守护进程更新如下:

hella-hadoop.chris.com           hella-hadoop02.chris.com         hella-hadoop03.chris.com

NameNode                               NameNode

ZKFC                                       ZKFC

JournalNode                             JournalNode                             JournalNode

DateNode                                  DateNode                                 DateNode

ZKFC用来监控namenode

开始配置:

core-site.xml

<!--zookeeper集群配置-->  <property><name>ha.zookeeper.quorum</name><value>hella-hadoop.chris.com:2181,hella-hadoop02.chris.com:2181,hella-hadoop03.chris.com:2181</value></property>

hdfs-site.xml

<!-- failover 故障自动转移,依靠zookeeper 集群,zookeeper 配置在core -->    <property><name>dfs.ha.automatic-failover.enabled</name><value>true</value></property>

配置完毕,开始启动并且验证:

step1:关闭所有的HDFS 服务 sbin/stop-dfs.sh

step2: 启动Zookeeper集群 bin/zkServer.sh start

step3: 初始化HA 在Zookeeper中的状态 bin/hdfs zkfc -formatZK

step4:启动HDFS服务sbin/start-dfs.sh

stepc5:在各个NameNode 节点上启动DFSZK Failover Controller,先在那台机器启动,那台机器的NameNode就是Active NameNode

sbin/hadoop-daemon.sh start zkfc

验证:

jps 查看进程,可以将Active的进程kill, kill -9 pid

可以通过50070端口号在网页上直接查看,也可以通过命令查看namenode 是否实现故障自动转移,本来是standby 的namenode 转化为active

转载于:https://www.cnblogs.com/pickKnow/p/10701433.html

Hadoop 集群的三种方式相关推荐

  1. Linux从头开始搭建Redis集群(三种方式)

    Linux搭建Redis集群 前言 一.下载Redis安装程序包 1.打开虚拟机终端,输入以下命令,下载对应的 Redis 文件 2.下载好之后,进行解压 3.将解压好的文件移动/复制到 /usr/l ...

  2. etcd部署集群的三种方式

    静态启动 需要三台物理机或虚拟机 $ etcd --name infra0 --initial-advertise-peer-urls http://10.0.1.10:2380 \--listen- ...

  3. java 连接mongodb 集群_Java 连接MongoDB集群的几种方式

    先决条件 先运行mongodb肯定是必须的,然后导入以下包: import com.mongodb.MongoClient; import com.mongodb.MongoClientURI; im ...

  4. Hadoop 07_MapReduce运行的三种方式

    Mapreduce运行3种方式 本地方式运行: pc环境 1.1.将 Hadoop安装本地解压 1.2.配置 Hadoop的环境变量 添加%HADOOP_HOME% 修改%PATH%添加%HADOOP ...

  5. 阿里云ECS服务器部署HADOOP集群(三):ZooKeeper 完全分布式集群搭建

    本篇将在阿里云ECS服务器部署HADOOP集群(一):Hadoop完全分布式集群环境搭建的基础上搭建,多添加了一个 datanode 节点 . 1 节点环境介绍: 1.1 环境介绍: 服务器:三台阿里 ...

  6. Redis集群的三种配置方式案例

    前言 Redis有三种集群模式: 主从复制 哨兵(Sentinel) 集群(Cluster)

  7. redis集群的三种模式

    通过持久化功能,Redis保证了即使在服务器重启的情况下也不会丢失(或少量丢失)数据,因为持久化会把内存中数据保存到硬盘上,重启会从硬盘上加载数据.但是由于数据是存储在一台服务器上的,如果这台服务器出 ...

  8. redis 高可用(持久化、主从复制、哨兵、集群)以及集群的三种模式

    Redis高可用定义 在web服务器中,高可用代表服务器可以正常访问的时间,一般使用百分比来衡量多长时间内可以提供正常服务 但是在redis中,高可用的定义还要更广泛一点,除了提供正常的服务(如主从分 ...

  9. redis存opc_Redis集群的三种模式

    一.主从模式 通过持久化功能,Redis保证了即使在服务器重启的情况下也不会损失(或少量损失)数据,因为持久化会把内存中数据保存到硬盘上,重启会从硬盘上加载数据. 但是由于数据是存储在一台服务器上的, ...

最新文章

  1. 6月第1周回顾:华为再现猝死 中国成全球最大宽带市场
  2. python使用spark_apache spark - 在python中导入pyspark
  3. Squid正向代理矩阵
  4. PHP-7.1 源代码学习:字节码在 Zend 虚拟机中的解释执行 之 概述
  5. System.Net.WebException: The operation has timed out at System.Net.HttpWebRequest.GetResponse()
  6. 前端学习(3342):ant design中grid排版使用
  7. JavaScript 设计模式核⼼原理与应⽤实践 之 结构型设计模式
  8. 95-235-070-源码-task-OneInputStreamTask
  9. 新版本eclipse Neon 4.6.1,登录git报401 没有权限
  10. java常用设计模式 看了她,改变你的一生~~~
  11. DRF实战1 - 环境搭建
  12. 免费的视频格式转换器哪个最好用呢?
  13. Unity动态天空shader实现
  14. matlab三维立体图
  15. 2014最火的10分钟6块腹肌动图gif教程,男人不能没有腹肌!
  16. mapgis java二次开发_mapgis7.0二次开发小试牛刀
  17. Android 将文本和图片写入到pdf文件以及读取手机里的pdf文件
  18. [cnblogs镜像]Unity 移动键Q的三种用法 For Mac,Windows类同
  19. 有主力资金活跃迹象的三大板块
  20. Samba 服务使用的端口和协议

热门文章

  1. WordPress 添加网页图标
  2. CommonCollection1反序列化链学习
  3. PCB中加入logo
  4. h264 I帧的判断
  5. fatal error C1083: 无法打开包括文件:dxtrans.h: No such file or directory
  6. [react] react中可以在render访问refs吗?为什么?
  7. 前端学习(3115):react-hello-初始化state
  8. 前端学习(2978):上午回顾
  9. 前端学习(2972):使用mock假数据
  10. 前端学习(2962):前一天回顾