分布式存储

(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. 华为oj之字符个数统计

    题目:字符个数统计 热度指数:4720 时间限制:1秒 空间限制:32768K 本题知识点: 字符串 题目描述 编写一个函数,计算字符串中含有的不同字符的个数.字符在ACSII码范围内(0~127). ...

  2. webpack 2 系列

    webpack 2 系列 webpack 是一个强大的工具,学会通过工具来解决开发效率问题,是每一个 工程师都必备的技能之一. 那么我们来从零开始搭建一个 基于webpack 2 到 开发架子,来提升 ...

  3. 图像识别基本算法之SURF

    图像识别.人脸识别可行的算法有很多.但是作为学习,如果能理清这个问题研究的历程及其主线,会对你深入理解当前研究最新的发展有很多帮助.本文是自己在学习过程中的笔记,大多内容来自于网络,出处请参考最后的引 ...

  4. 编写基于Property-based的单元测试

    编写基于Property-based的单元测试 作为一个开发者,你可能认为你的职责就是编写代码从而完成需求.我不敢苟同,开发者的工作是通过软件来解决现实需求,编写代码只是软件开发的其中一个方面,编写可 ...

  5. 模拟实现 DBUtils 工具 , 技术原理浅析

    申明:本文采用自己 C3P0 连接池工具进行测试 自定义的 JDBCUtils 可以获取 Connection: package com.test.utils; import java.sql.Con ...

  6. Linux基础知识第七讲,用户权限以及用户操作命令

    目录 Linux基础知识第七讲,用户权限以及用户操作命令 一丶简介linux用户,用户权限,组的概念. 1.1 基本概念 1.2 组 1.3 ls命令查看权限. 二丶用户权限修改命令 1.chmod ...

  7. Java实现将任何编码方式的txt文件以UTF-8编码方式转存

    本文利用JDK中的BufferedReader和BufferedWriter实现将任何编码方式的txt文件以UTF-8编码方式转存. UTF-8(8-bit Unicode Transformatio ...

  8. Django学习笔记(9)—— 开发用户注册与登录系统

    一,项目题目: 开发用户注册与登录系统 该项目主要练习使用Django开发一个用户注册与登录的系统,通过这个项目然后巩固自己这段时间所学习的Django知识. 二,项目需求: 开发一个简单的用户登录与 ...

  9. springboot2.0.3源码篇 - 自动配置的实现,发现也不是那么复杂

    前言 开心一刻 女儿: “妈妈,你这么漂亮,当年怎么嫁给了爸爸呢?” 妈妈: “当年你爸不是穷嘛!‘ 女儿: “穷你还嫁给他!” 妈妈: “那时候刚刚毕业参加工作,领导对我说,他是我的扶贫对象,我年轻 ...

  10. k8s重要概念及部署k8s集群(一)--技术流ken

    重要概念 1. cluster cluster是 计算.存储和网络资源的集合,k8s利用这些资源运行各种基于容器的应用. 2.master master是cluster的大脑,他的主要职责是调度,即决 ...