一、hadoop简介

1、hadoop的初衷是为了解决Nutch的海量数据爬取和存储的需要,HDFS来源于google的GFS,MapReduce来源于Google的MapReduce,HBase来源于Google的BigTable.hadoop后被引入Apache基金会.

2、hadoop两大核心设计是HDFS和MapReduce,HDFS是分布式存储系统,提供高可靠性、高扩展性、高吞吐率的数据存储服务;MapReduce是分布式计算框架,具有易于编程、高容错性和高扩展性等优点.

3、hadoop和传统数据库相比存储的数据更大,且为半结构化和非结构化数据,基于数据挖掘和数据预测性分析更有意义,hadoop又快又好维护又廉价.

4、hadoop版本几条线并行分0.x,1.x,2.x,0.23增加用户认证管理(通过密码访问hadoop),2.x加NN HA,企业目前用2.x.

二、HDFS简介

1、HDFS优缺点

优点:

高容错性:数据自动保存多个副本,副本丢失后,自动恢复,可靠性同时也实现了加快处理速度,A节点负载高,可读取B节点

适合批处理:移动计算而非数据,数据位置暴漏给计算框架

适合大数据处理:甚至PB级数据,百万规模以上文件数量,10k+节点

可构建在廉价机器上:通过多副本提高可靠性,提供容错和恢复机制

缺点:

低延迟数据访问:比如订单是不适合存储HDFS中的,要求数据毫秒级就要查出来

小文件存取:不适合大量的小文件存储,如真有这种需求的话,要对小文件进行压缩

并发写入、文件随机修改:不适合修改,实际中网盘、云盘内容是不允许修改的,只能删了从新上传,他们都是hadoop做的

2、HDFS架构

1>HDFS中的存储单元(block),一个文件会被切分成若干个固定大小的block(块默认是64MB,可配置,若不足64MB,则单独一个块),存储在不同节点上,默认每个block有三个副本(副本越多,磁盘利用率越低),block大小和副本数通过Client端上传文件时设置,文件上传成功后副本数可变,block size不可变.如一个200M文件会被切成4块,存在不同节点,如挂了一台机器后,会自动在复制副本,恢复到正常状态,只要三个机器不同时挂,数据不会丢失.

2、HDFS包含3种节点,NameNode(NN),secondary NameNode(SNN),DataNode(DN).

NN节点功能

接收客户端的读写请求,NN中保存文件的metadata数据(元数据是最重要的,元数据丢失的话,dateNode都是垃圾数据)包括除文件内容外的文件信息;文件包含哪些block;Block保存在哪个DN上(由DN启动时上报,因为这个可能随时变化),NN中的metadata信息在启动后会加载到内存,metadata存储在磁盘的文件名为fsimage,block的位置信息不会保存到fsimage,edits记录对metadata的操作日志.比如有一个插入文件的操作,hadoop不会直接修改fsimage,而是记录到edits日志记录文件中,但是NN内存中的数据是实时修改的.隔断时间后会合并edits和fsimage,生成新的fsimage,edits的机制和关系型数据库事务的预提交是一样的机制.

SNN节点功能

它的主要工作是帮助NN合并edits log,减少NN启动时间,另一方面合并会有大量的IO操作,但是NN最主要的作用是接收用户的读写服务的,所以大量的资源不能用来干这个.SNN它不是NN的备份,但可以做一部分的元数据备份,不是实时备份(不是热备).

SNN合并流程

满足合并时机后(合并时机:配置设置时间间隔fs.checkpoint.period,默认3600秒;或者配置edit log大小,最大64M),SNN会拷贝NN的edits日志记录文件和fsimage元数据文件到SNN中,可能会跨网络拷贝,这时同时NN会创建一个新的edits文件来记录用户的读写请求操作,然后SNN就会进行合并为一个新的fsimage文件,然后SNN会把这个文件推送给NN,最后NN会用新的fsimage替换旧的fsimage,然后如此反复…

面试题:

1、SNN的作用?

当NameNode启动的时候,首先装载fsimage文件,然后再应用edits文件,最后还会将最新的目录树信息到新的fsimage文件中,然后启用新的edits文件.整个流程是没有问题的,但有个小瑕疵,就是如果NameNode在启动后发生的改变过多,会导致edit文件变得非常大,大得程度与NameNode的更新频率有关系.那么在下一次NameNode启动的过程中,读取了fsimage文件后,会应用这个无比大的edits文件,导致启动时间变长,并且不可能控,可能需要启动几个小时也说不定.NameNode的edits文件过大的问题,也就是SecondeNameNode要解决的主要问题.

2、如果NN挂掉(硬盘坏掉)后,数据还能不能找回?

如果SNN和NN在同一台机器无法找回,所以NN和SNN最好不在一台机器.

DN节点功能

存储数据;启动DN线程的时候向NN汇报block信息;通过向NN发送心跳保持与其联系(3秒1次),如果NN10分钟没有收到DN心跳,则认为其lost,并copy其上的block到其它DN.

ps:面试题:block的副本放置策略

第一个副本:放置在上传文件的DN;如果是集群外提交,则随机挑选一台磁盘不太满,cpu不太忙的节点.第二个副本:放置在于第一个副本不同的机架的节点上.第三个副本:与第二个副本相同的机架节点(一个机架电源相同,保证安全的同时提高速度).

3、HDFS读写流程

read是并发读取

只写了一份block,然后由DN产生线程去往其他DN上复制block副本,速度快.

4、HDFS文件权限和认证

权限和linux类似,如果linux用户wangwei使用hadoop命令创建一个文件,那么这个文件在HDFS中owner就是wangwei;HDFS不做密码的认证,这样的好处是速度快,不然每次读写都要验密码,HDFS存的数据一般都是安全性不是很高的数据.HDFS理论结束.

三、HDFS安装部署

1、下载编译好的hadoop并解压:tar -xzf hadooop-2.7.3.tar.gz.

2、安装jdk并设置JAVA_HOME

1>第一种,这种方式关闭终端后就失效了

linux-02:~ # declare -x JAVA_HOME="/usr/local/jdk1.7.0_03/bin/"
linux-02:~ # export PATH=$JAVA_HOME:$PATH

2>第二种,永久方式

vim /etc/profile,增加以下内容:
export JAVA_HOME=/usr/local/jdk1.7.0_03/
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin

保存profile文件,并执行source /etc/profile让设置立即生效.同时要在conf/hadoop-env.sh中配置jdk.

3、免密码登录配置(现在打算用三个节点来部署hadoop)

1> 在node1上执行ssh node2不需要密码即可登录node2就是免密码登录.

2> 为什么需要免密码登录?HDFS能做到在任何一个机器上敲命令启动HDFS,那么它就能启动所有节点的所有的Java进程(每个节点实际就是一个java 进程),也就是启动整个集群,其实就是远程登录到其他机器上去启动那些节点.如 start-all.sh命令.它其实只是为了一个方便,不然需要逐个启 动节点.

3>要在Node1上敲start-all.sh启动集群,就需要做node1到node2,node3的免密码登录.首先在各个节点的/etc/hosts里面添加node1,node2,node3主机名和iP映射

192.168.144.11 node1
192.168.144.12 node2
192.168.144.13 node3

然后各个节点生成公钥和私钥,公钥放入本地认证,先完成本地的免密码登录

  $ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
$ chmod 0600 ~/.ssh/authorized_keys

最后复制node1的id_dsa.pub到node2和node3,然后分别追加到各自的本地认证中,直接复制粘贴内容有问题.

[root@node1 ~]# scp ~/.ssh/id_dsa.pub   root@node2:~
[root@node1 ~]# scp ~/.ssh/id_dsa.pub root@node3:~
[root@node2 ~]# cat id_dsa.pub >> ~/.ssh/authorized_keys
[root@node3 ~]# cat id_dsa.pub >> ~/.ssh/authorized_keys

4、配置node1节点conf/core-site.xml

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
<!--配置NN在哪台机器以及它的端口,也可说是HDFS的入口 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://node1:9000</value>
</property>
<!-- HDFS工作目录的设置,默认是linux的/temp,每次linux重启会清空,hadoop中的数据会全部丢失.-->
<!-- 其它一些目录是以这个临时目录为基本目录的,如dfs.name.dir和dfs.name.edits.dir等-->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/hadoop-2.7.3</value>
</property>
</configuration>

5、node1节点上conf/slaves配置DN,conf/masters 配置SNN(尽量和NN不要在一个节点),NN已经在core.site.xml中配置.

<!--配置主机名或ip -->
[root@node1 conf]# vim masters
node2
[root@node1 conf]# vim slaves
node2
node3

6、把node1/conf下所有的配置文件复制到node2,node3.

[root@node1 conf]# scp  ./*  root@node2: ~/hadoop-1.2.1/conf/
[root@node1 conf]# scp ./* root@node3: ~/hadoop-1.2.1/conf/

7、bin目录下格式化NN并启动

./hadoop namenode  -format  //只需一次即可
./start-dfs.sh //启动HDFS

启动成功后 通过jps命令查看java进程(需要安装jdk并且在/etc/profile中配置好JAVA_HOME),这时NN的日志提示,全部启动成功,但是去node2,node3通过jps查看Java进程但发现没有启动成功,这是防火墙的原因,在NN执行:service iptables stop关掉防火墙,stop掉hdfs重新启动,就可通过浏览器http://node1:50070可以访问HDFS管理页面.

1_HDFS理论及安装部署的更多相关文章

  1. hadoop入门(3)——hadoop2.0理论基础:安装部署方法

    一.hadoop2.0安装部署流程         1.自动安装部署:Ambari.Minos(小米).Cloudera Manager(收费)         2.使用RPM包安装部署:Apache ...

  2. 3_HA介绍和安装部署

    一.hadoop 2.x产生背景 1.hadoop 1.x中hdfs和mr在高可用和扩展性等方面存在问题.2.hdfs存在的问题:NN单点故障,难以应用于在线场景:NN压力过大,内存受限,影响系统扩展 ...

  3. Oracle安装部署,版本升级,应用补丁快速参考

    一.Oracle安装部署 1.1 单机环境 1.2 Oracle RAC环境 1.3 Oracle DataGuard环境 1.4 主机双机 1.5 客户端部署 二.Oracle版本升级 2.1 单机 ...

  4. KVM安装部署

    KVM安装部署 公司开始部署KVM,KVM的全称是kernel base virtual machine,对KVM虚拟化技术研究了一段时间, KVM是基于硬件的完全虚拟化,跟vmware.xen.hy ...

  5. Linux平台oracle 11g单实例 + ASM存储 安装部署 快速参考

    操作环境:Citrix虚拟化环境中申请一个Linux6.4主机(模板)目标:创建单机11g + ASM存储 数据库 1. 主机准备 2. 创建ORACLE 用户和组成员 3. 创建以下目录并赋予对应权 ...

  6. 分布式文件系统 - FastDFS 在 CentOS 下配置安装部署

    少啰嗦,直接装 看过上一篇分布式文件系统 - FastDFS 简单了解一下的朋友应该知道,本次安装是使用目前余庆老师开源的最新 V5.05 版本,是余庆老师放在 Github 上的,和目前你能在网络上 ...

  7. C# winform安装部署(转载)

    c# winform 程序打包部署 核心总结: 1.建议在完成的要打包的项目外,另建解决方案建立安装部署项目(而不是在同一个解决方案内新建),在解决方案上右击-〉添加-〉现有项目-〉选择你要打包的项目 ...

  8. Ubuntu14.04 Django Mysql安装部署全过程

    Ubuntu14.04 Django Mysql安装部署全过程   一.简要步骤.(阿里云Ubuntu14.04) Python安装 Django Mysql的安装与配置 记录一下我的部署过程,也方便 ...

  9. 比Ansible更吊的自动化运维工具,自动化统一安装部署_自动化部署udeploy 1.0

    新增功能: 2015-03-11 除pass(备份与更新)与start(启动服务)外,实现一切自动化. 注:pass与start设为业务类,由于各类业务不同,所以无法实现自动化.同类业务除外,如更新的 ...

随机推荐

  1. 洛谷P3182 [HAOI2016]放棋子

    P3182 [HAOI2016]放棋子 题目描述 给你一个N*N的矩阵,每行有一个障碍,数据保证任意两个障碍不在同一行,任意两个障碍不在同一列,要求你在这个矩阵上放N枚棋子(障碍的位置不能放棋子),要 ...

  2. 一个VUE的小案例

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. 1.检索数据 ---SQL

    相关提示: 结束SQL语句 多条SQL语句必须以分号(:)分隔.多数DBMS不需要在单条SQL语句后加分号,但也有DBMS可能必须在单条SQL语句后加上分号.当然,如果愿意可以总是加上分号.事实上,即 ...

  4. Python面向对象之结构与成员

    1.面向对象结构分析: ----面相对象整体大致分为两块区域: --------第一部分:静态字段(静态变量)部分 --------第二部分:方法部分 --每个大区域可以分为多个小部分: class ...

  5. [Android]解决 Could not read entry xxx from cache taskArtifacts.bin

    Bug 出现 事情是这样的,昨天早晨我正做着项目,坐在我旁边的小伙伴呼唤了我一下,说项目运行不起来了. 我纳闷着,前天的时候还好好的,怎么过了一晚就出问题了.我问他是不是改了什么配置,或者添加了什么东 ...

  6. B.Icebound and Sequence

    链接:https://ac.nowcoder.com/acm/contest/903/B 题意: Icebound hates math. But Imp loves math. One day, I ...

  7. mybatis pageHelper 分页插件使用

    转载大神 https://blog.csdn.net/qq_33624284/article/details/72828977 把插件jar包导入项目(具体上篇有介绍http://blog.csdn. ...

  8. criteria用法

    Criteria Query通过面向对象化的设计,将数据查询条件封装为一个对象.简单来讲,Criteria Query可以看作是传统SQL的对象化表示,如: Java代码   Criteria cri ...

  9. JavaSE---悲观锁与乐观锁

    1.[悲观锁] 1.1 在数据处理的整个过程中,数据将处于锁定状态: 1.2 悲观锁的实现,依赖于数据库提供的锁机制(只有数据库提供的锁机制才能真正保证数据访问的排他性,否则,即使在系统中加锁机制,也 ...

  10. (转)命令passwd报错因inode节点处理记录

    命令passwd报错因inode节点处理记录 原文:http://blog.sina.com.cn/s/blog_506ed9e6010106kj.html 故障现象:      1.修改密码时报错 ...