1_HDFS理论及安装部署
一、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理论及安装部署的更多相关文章
- hadoop入门(3)——hadoop2.0理论基础:安装部署方法
一.hadoop2.0安装部署流程 1.自动安装部署:Ambari.Minos(小米).Cloudera Manager(收费) 2.使用RPM包安装部署:Apache ...
- 3_HA介绍和安装部署
一.hadoop 2.x产生背景 1.hadoop 1.x中hdfs和mr在高可用和扩展性等方面存在问题.2.hdfs存在的问题:NN单点故障,难以应用于在线场景:NN压力过大,内存受限,影响系统扩展 ...
- Oracle安装部署,版本升级,应用补丁快速参考
一.Oracle安装部署 1.1 单机环境 1.2 Oracle RAC环境 1.3 Oracle DataGuard环境 1.4 主机双机 1.5 客户端部署 二.Oracle版本升级 2.1 单机 ...
- KVM安装部署
KVM安装部署 公司开始部署KVM,KVM的全称是kernel base virtual machine,对KVM虚拟化技术研究了一段时间, KVM是基于硬件的完全虚拟化,跟vmware.xen.hy ...
- Linux平台oracle 11g单实例 + ASM存储 安装部署 快速参考
操作环境:Citrix虚拟化环境中申请一个Linux6.4主机(模板)目标:创建单机11g + ASM存储 数据库 1. 主机准备 2. 创建ORACLE 用户和组成员 3. 创建以下目录并赋予对应权 ...
- 分布式文件系统 - FastDFS 在 CentOS 下配置安装部署
少啰嗦,直接装 看过上一篇分布式文件系统 - FastDFS 简单了解一下的朋友应该知道,本次安装是使用目前余庆老师开源的最新 V5.05 版本,是余庆老师放在 Github 上的,和目前你能在网络上 ...
- C# winform安装部署(转载)
c# winform 程序打包部署 核心总结: 1.建议在完成的要打包的项目外,另建解决方案建立安装部署项目(而不是在同一个解决方案内新建),在解决方案上右击-〉添加-〉现有项目-〉选择你要打包的项目 ...
- Ubuntu14.04 Django Mysql安装部署全过程
Ubuntu14.04 Django Mysql安装部署全过程 一.简要步骤.(阿里云Ubuntu14.04) Python安装 Django Mysql的安装与配置 记录一下我的部署过程,也方便 ...
- 比Ansible更吊的自动化运维工具,自动化统一安装部署_自动化部署udeploy 1.0
新增功能: 2015-03-11 除pass(备份与更新)与start(启动服务)外,实现一切自动化. 注:pass与start设为业务类,由于各类业务不同,所以无法实现自动化.同类业务除外,如更新的 ...
随机推荐
- 洛谷P3182 [HAOI2016]放棋子
P3182 [HAOI2016]放棋子 题目描述 给你一个N*N的矩阵,每行有一个障碍,数据保证任意两个障碍不在同一行,任意两个障碍不在同一列,要求你在这个矩阵上放N枚棋子(障碍的位置不能放棋子),要 ...
- 一个VUE的小案例
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 1.检索数据 ---SQL
相关提示: 结束SQL语句 多条SQL语句必须以分号(:)分隔.多数DBMS不需要在单条SQL语句后加分号,但也有DBMS可能必须在单条SQL语句后加上分号.当然,如果愿意可以总是加上分号.事实上,即 ...
- Python面向对象之结构与成员
1.面向对象结构分析: ----面相对象整体大致分为两块区域: --------第一部分:静态字段(静态变量)部分 --------第二部分:方法部分 --每个大区域可以分为多个小部分: class ...
- [Android]解决 Could not read entry xxx from cache taskArtifacts.bin
Bug 出现 事情是这样的,昨天早晨我正做着项目,坐在我旁边的小伙伴呼唤了我一下,说项目运行不起来了. 我纳闷着,前天的时候还好好的,怎么过了一晚就出问题了.我问他是不是改了什么配置,或者添加了什么东 ...
- B.Icebound and Sequence
链接:https://ac.nowcoder.com/acm/contest/903/B 题意: Icebound hates math. But Imp loves math. One day, I ...
- mybatis pageHelper 分页插件使用
转载大神 https://blog.csdn.net/qq_33624284/article/details/72828977 把插件jar包导入项目(具体上篇有介绍http://blog.csdn. ...
- criteria用法
Criteria Query通过面向对象化的设计,将数据查询条件封装为一个对象.简单来讲,Criteria Query可以看作是传统SQL的对象化表示,如: Java代码 Criteria cri ...
- JavaSE---悲观锁与乐观锁
1.[悲观锁] 1.1 在数据处理的整个过程中,数据将处于锁定状态: 1.2 悲观锁的实现,依赖于数据库提供的锁机制(只有数据库提供的锁机制才能真正保证数据访问的排他性,否则,即使在系统中加锁机制,也 ...
- (转)命令passwd报错因inode节点处理记录
命令passwd报错因inode节点处理记录 原文:http://blog.sina.com.cn/s/blog_506ed9e6010106kj.html 故障现象: 1.修改密码时报错 ...