分布式存储

(1) 5PB甚至更大的数据集怎么存储 ?

所有数据分块,每个数据块冗余存储在多台机器上(冗余可提高数据块高可用性)。另外一台机器上启动一个管理所有节点、以及存储在各节点上面数据块的服务。

(2)分布式存储集群: master/slave结构集群

  • 存在于slave上的文件:表示真实存放数据的文件即本地磁盘文件
  • 存在于master上的文件:表示逻辑文件,它表示这个逻辑文件全路径名,与这个全路径对应的有数据块的存储信息(数据块位置等)

HDFS各组件及作用讲解

1.NameNode

名字节点中维护了两层关系:

(1)HDFS文件系统的文件目录树,以及文件数据块的索引,即每一个文件对应的数据块列表
(2)数据块与数据节点的关系,即某一数据块保存在哪些数据节点中

2.

安装HDFS

(1)下载Hadoop  ,选择版本hadoop-2.7.5.tar

(2)master slave1 slave2,使用hadoop-twq用户,家目录下创建目录~/bigdata

mkdir -p ~/bigdata

(3)master,使用hadoop-twq用户,上传安装包到目录~/bigdata,并解压。

cd ~/bigdata
tar -zxvf ~/bigdata/hadoop-2.7.5.tar.gz

(4)master,使用hadoop-twq用户,创建nameNode和dataNode需要的文件目录

mkdir -p ~/bigdata/dfs/name
mkdir -p ~/bigdata/dfs/data

(5)master,使用hadoop-twq用户,修改配置文件【core-site.xml】【hdfs-site.xml】

cd ~/bigdata/hadoop-2.7.5/etc/hadoop
vi core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9999</value>
<description>默认的HDFS路径</description>
</property>
</configuration>
vi hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
<description>数据块的副本数量,需小于DataNode数量</description>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/home/hadoop-twq/bigdata/dfs/name</value>
<description>NameNode存放数据的位置</description>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/home/hadoop-twq/bigdata/dfs/data</value>
<description>DataNode存放数据的位置</description>
</property>
</configuration>

(6)master,使用hadoop-twq用户,配置JAVA_HOME,修改【hadoop-env.sh】

cd ~/bigdata/hadoop-2.7.5/etc/hadoop

vi hadoop-env.sh
export JAVA_HOME=/usr/local/lib/jdk1.8.0_161

(7)master,使用hadoop-twq用户,配置集群里所有DataNode的主机名,修改【slaves】

cd ~/bigdata/hadoop-2.7.5/etc/hadoop

vi slaves
slave1
slave2

(8)master,使用hadoop-twq用户,将配置好的hadoop分发到每一个slave上

scp -r ~/bigdata/dfs hadoop-twq@slave1:~/bigdata
scp -r ~/bigdata/dfs hadoop-twq@slave2:~/bigdata scp -r ~/bigdata/hadoop-2.7.5 hadoop-twq@slave1:~/bigdata
scp -r ~/bigdata/hadoop-2.7.5 hadoop-twq@slave2:~/bigdata

(9)master salve1 slave2,使用hadoop-twq用户,配置环境变量

vi ~/.bash_profile
export HADOOP_HOME=~/bigdata/hadoop-2.7.5
PATH=$PATH:$HOME/bin:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin source ~/.bash_profile
which hdfs

(10)master,使用hadoop-twq用户,格式化并启停HDFS

hdfs namenode -format         ==>格式化
start-dfs.sh ==>启动hdfs
jps
http://master的IP地址:50070/ ==>看下是否部署成功
stop-dfs.sh ==>停止hdfs

 安装注意事项:

1..更改salves配置前,需要先停止集群,否则有datanode无法停止。

2.多次格式化,可能会出现namenode和datanode的clusterID不一致。(clusterID在/home/hadoop-twq/bigdata/dfs/data/current/VERSION中)

3.core-site.xml中fs.defaultFS 描述集群中NameNode结点的URI(包括协议、主机名称、端口号)

4.hdfs-site.xml中dfs.namenode.http-address,描述HDFS web界面的监听端口,默认50070

添加节点

(1)修改所有节点的host

(2)修改namenode的配置文件slaves

(3)在新节点的机器上,启动服务

hadoop-daemon.sh start datanode
hadoop-daemon.sh start tasktracker

(4)namenode节点,均衡block

a.如果不balance,那么cluster会把新的数据都存放在新的node上,这样会降低mapred的工作效率。

start-balancer.sh

b.设置平衡阈值,默认是10%,值越低各节点越平衡,但消耗时间也更长

start-balancer.sh -threshold 5

c.配置hdfs balance时datanode之间数据迁移的带宽设置,默认只有1048576(1M/s)

vi hdfs-site.xml
<property>
 <name>dfs.balance.bandwidthPerSec</name>
 <value>1048576</value>
  <description>
   Specifies the maximum amount of bandwidth that each datanode
   can utilize for the balancing purpose in term of
   the number of bytes per second.
 </description>
</property>

 删除节点

(1)阻止待删除的机器连接Namenode

vi conf/hdfs-site.xml
<property>
  <name>dfs.hosts.exclude</name>
  <value>~/bigdata/hadoop-2.7.5/etc/hadoop/excludes</value>
  <description>
Names a file that contains a list of hosts that are
   not permitted to connect to the namenode. The full pathname of the
  file must be specified. If the value is empty, no hosts are
  excluded.
</description>
</property>
vi ~/bigdata/hadoop-2.7.5/etc/hadoop/excludes     ==>待下线机器hostname一个一行
slave3
slave4

(2)强制重新加载配置

hadoop dfsadmin  -refreshNodes  ==>强制重新加载配置,会在后台进行Block块移动
hadoop dfsadmin -report ==>查看到现在集群上连接的节点, Decommission in progress(执行中),  Decommissioned(执行完毕)

(3)关闭节点

等待刚刚的操作结束后,需要下架的机器就可以安全的关闭了

(4)再次编辑excludes文件

一旦完成了机器下架,它们就可以从excludes文件移除了 
登录要下架的机器,会发现DataNode进程没有了,但是TaskTracker依然存在,需要手工处理一下。

参考文档:

Hadoop中DataNode没有启动解决办法

Hadoop下添加节点和删除节点

HDFS balance策略详解

【模块04-大数据技术入门】02节-HDFS核心知识的更多相关文章

  1. 大数据学习(02)——HDFS入门

    Hadoop模块 提到大数据,Hadoop是一个绕不开的话题,我们来看看Hadoop本身包含哪些模块. Common是基础模块,这个是必须用的.剩下常用的就是HDFS和YARN. MapReduce现 ...

  2. 大数据技术之Hadoop(HDFS)

    第1章 HDFS概述 1.1 HDFS产出背景及定义 1.2 HDFS优缺点 1.3 HDFS组成架构 1.4 HDFS文件块大小(面试重点) 第2章 HDFS的Shell操作(开发重点) 1.基本语 ...

  3. 大数据技术之Hadoop入门

      第1章 大数据概论 1.1 大数据概念 大数据概念如图2-1 所示. 图2-1 大数据概念 1.2 大数据特点(4V) 大数据特点如图2-2,2-3,2-4,2-5所示 图2-2 大数据特点之大量 ...

  4. 【学习笔记】大数据技术原理与应用(MOOC视频、厦门大学林子雨)

    1 大数据概述 大数据特性:4v volume velocity variety value 即大量化.快速化.多样化.价值密度低 数据量大:大数据摩尔定律 快速化:从数据的生成到消耗,时间窗口小,可 ...

  5. 大数据技术生态圈形象比喻(Hadoop、Hive、Spark 关系)

    [摘要] 知乎上一篇很不错的科普文章,介绍大数据技术生态圈(Hadoop.Hive.Spark )的关系. 链接地址:https://www.zhihu.com/question/27974418 [ ...

  6. TOP100summit:【分享实录-WalmartLabs】利用开源大数据技术构建WMX广告效益分析平台

    本篇文章内容来自2016年TOP100summitWalmartLabs实验室广告平台首席工程师.架构师粟迪夫的案例分享. 编辑:Cynthia 粟迪夫:WalmartLabs实验室广告平台首席工程师 ...

  7. 利用大数据技术处理海量GPS数据

    我秀中国物联网地图服务平台目前接入的监控车辆近百万辆,每天采集GPS数据7亿多条,产生日志文件70GB,使用传统的数据处理方式非常耗时. 比如,仅仅对GPS做一些简单的统计分析,程序就需要几个小时才能 ...

  8. 大数据技术之Hadoop3.1.2版本HA模式

    大数据技术之Hadoop3.1.2版本HA模式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Hadoop的HA特点 1>.主备NameNode 2>.解决单点故障 ...

  9. 大数据技术之HBase

    第1章 HBase简介 1.1 什么是HBase HBase的原型是Google的BigTable论文,受到了该论文思想的启发,目前作为Hadoop的子项目来开发维护,用于支持结构化的数据存储. 官方 ...

随机推荐

  1. BitmapToASCii

    using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using Syste ...

  2. 程序导致IIS服务器应用程序池停止

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAA0sAAAC6CAIAAADwAEEAAAAQMElEQVR4nO3dz4scV2IH8Ma7EB9CQC

  3. 带着新人学springboot的应用11(springboot+Dubbo+Zookeeper 上)

    这次说个在大型项目比较常见的东西,就是分布式,分布式到底是个什么东西呢?概念太大,不好说,就像刚学javaee的人问你,什么是web啊,什么是spring啊等等,你可能觉得,这个东西我好像知道,但是用 ...

  4. C++中 引用&与取地址&的区别

    微信公众号[程序员江湖] 作者黄小斜,斜杠青年,某985硕士,阿里 Java 研发工程师,于 2018 年秋招拿到 BAT 头条.网易.滴滴等 8 个大厂 offer,目前致力于分享这几年的学习经验. ...

  5. 【Java基础】【04循环语句&方法】

    04.01_Java语言基础(循环结构概述和for语句的格式及其使用) A:循环结构的分类 for,while,do...while B:循环结构for语句的格式: for(初始化表达式;条件表达式; ...

  6. 附实例!图解React的生命周期及执行顺序

    本文由云+社区发表 作者:前端林子 1.七个可选的生命周期 可以结合下图来看: (1) componentWillMount() 仅在render()方法前被调用一次,如果在该方法中调用了setSta ...

  7. Perl IO:随机读写文件

    随机读写 如果一个文件句柄是指向一个实体文件的,那么就可以对它进行随机数据的访问(包括随机读.写),随机访问表示可以读取文件中的任何一部分数据或者向文件中的任何一个位置处写入数据.实现这种随机读写的功 ...

  8. 【转载】C#处理空格和换行

    使用C#处理字符串是一个常见的情况,当字符串中含有空格或者换行符号的时候,如果业务需要,我们可以通过相应的方法将之处理掉,处理成不含空格和换行符号的字符串,处理的过程使用到正则表达式. 具体函数处理的 ...

  9. win10连接无线网,开启移动热点,手机连接它手机一直显示获取ip地址中。

    *必须要有无线网卡才能设置WIFI首先打开电脑,选中“计算机”或者“我的电脑”,右击进入“管理”选项“.打开“计算机管理”窗口之后,在左栏菜单选项中找到“服务和应用程序”下的“服务”选项,如图点击进入 ...

  10. Dapper批量操作实体

    首先要安装 Dapper.Contrib,直接从nuget安装即可. dapper官方文档:http://dapper-tutorial.net/dapper T Get<T>(id); ...