一、项目编码实现

  1. HDFS文件上传
  2. HDFS文件下载
  3. 定位文件读取
  4. 通过API操作HDFS
  5. 通过IO流操作HDFS
  6. HDFS写数据流程
  7. HDFS读数据流程
  8. 统计一堆文件中单词出现的个数(WordCount案例)
  9. 把单词按照ASCII码奇偶分区
  10. 统计手机号耗费的总上行流量、下行流量、总流量(序列化)

二、流程图及描述

  1. HDFS写数据流程
  2. HDFS读数据流程
  3. NameNode&Secondary NameNode工作机制
  4. 查看fsimage文件

写数据流程

读数据流程

namenode和secondary namenode机制

查看镜像文件

查看编辑日志

DataNode工作机制

查看归档文件

(4)解归档文件
hadoop fs -cp har:///user/my/myhar.har/* /user/hadoop

  1. 查看edits文件
  2. 模拟namenode故障,并采用任一方法,恢复namenode数据
  3. 集群安全模式操作1
  4. DataNode工作机制
  5. 服役新数据节点
  6. 退役旧数据节点
  7. 回收站配置
  8. MapReduce程序运行流程分析

安全模式

回收站(参看hdfs,要与hdoop-site.xml里内容的刷新一致)

7.4 回收站
1)默认回收站
默认值fs.trash.interval=0,0表示禁用回收站,可以设置删除文件的存活时间。
默认值fs.trash.checkpoint.interval=0,检查回收站的间隔时间。
要求fs.trash.checkpoint.interval<=fs.trash.interval。
2)启用回收站
修改core-site.xml,配置垃圾回收时间为1分钟。
<property>
<name>fs.trash.interval</name>
<value>1</value>
</property>
3)查看回收站
回收站在集群中的;路径:/user/hadoop/.Trash/….
4)修改访问垃圾回收站用户名称进入垃圾回收站用户名称,默认是dr.who,修改为hadoop用户
[core-site.xml]
<property>
38 / 40
<name>hadoop.http.staticuser.user</name>
<value>hadoop</value>
</property>
5)通过程序删除的文件不会经过回收站,需要调用moveToTrash()才进入回收站
Trash trash = New Trash(conf);
trash.moveToTrash(path);
6)恢复回收站数据
hadoop fs -mv /user/hadoop/.Trash/Current/user/hadoop/input /user/hadoop/input
7)清空回收站
hdfs dfs -expunge

服役新节点

6.5 服役新数据节点(参看hdfs学习)
0)需求:
随着公司业务的增长,数据量越来越大,原有的数据节点的容量已经不能满足存储数据的需求,需要在原有集群基础上动态添加新的数据节点。
1)环境准备(1)克隆一台虚拟机(2)修改ip地址和主机名称(3)修改xcall和xsync文件,增加新增节点的同步(4)删除原来HDFS文件系统留存的文件
/home/hadoop/hadoop_home/dfs/name
2)服役新节点具体步骤(1)在namenode的~/hadoop_home /etc/hadoop目录下创建dfs.hosts文件
hadoop@master:~/hadoop_home/etc/hadoop$ pwd
/home/hadoop/hadoop_home/etc/hadoop
hadoop@master:~/hadoop_home/etc/hadoop$ touch dfs.hosts

hadoop@master:~/hadoop_home/etc/hadoop$ vi dfs.hosts
添加如下主机名称(包含新服役的节点)
node3
node4
node5 (2)在namenode的hdfs-site.xml配置文件中增加dfs.hosts属性
<property>
<name>dfs.hosts</name>

<value>/home/hadoop/hadoop_home/etc/hadoop/dfs.hosts</value>
</property> (3)刷新namenode
[hadoop@nod1:~/hadoop_home]$ hdfs dfsadmin -refreshNodes
Refresh nodes successful (4)更新resourcemanager节点
[hadoop@nod1:~/hadoop_home]$ yarn rmadmin -refreshNodes
17/06/24 14:17:11 INFO client.RMProxy: Connecting to ResourceManager at node2/192.168.0.242:8033 (5)在namenode的slaves文件中增加新主机名称增加node 不需要分发
node1
node2
node3 (6)单独命令启动新的数据节点和节点管理器

hadoop@master:~/hadoop_home$ sbin/hadoop-daemon.sh start datanode
starting datanode, logging to /home/hadoop/hadoop_home/logs/hadoop-hadoop-datanode-node3.out
hadoop@master:~/hadoop_home$ sbin/yarn-daemon.sh start nodemanager
starting nodemanager, logging to /home/hadoop/hadoop_home/logs/yarn-hadoop-nodemanager-hadoop105.out (7)在web浏览器上检查是否ok
3)如果数据不均衡,可以用命令实现集群的再平衡
[hadoop@node2 sbin]$ ./start-balancer.sh
starting balancer, logging to /home/hadoop/hadoop_home/logs/hadoop-hadoop-balancer-master.out
Time Stamp Iteration# Bytes Already Moved Bytes Left To Move Bytes Being Moved
6.6 退役旧数据节点(参看hdfs学习)

1)在namenode的/home/hadoop/hadoop_home/etc/hadoop目录下创建dfs.hosts.exclude文件
33 / 40
[hadoop@node2 hadoop]$ pwd
/home/hadoop/hadoop_home/etc/hadoop
[hadoop@node2 hadoop]$ touch dfs.hosts.exclude
[hadoop@node2 hadoop]$ vi dfs.hosts.exclude
添加如下主机名称(要退役的节点)
node3
2)在namenode的hdfs-site.xml配置文件中增加dfs.hosts.exclude属性

<property>
<name>dfs.hosts.exclude</name>
<value>/home/hadoop/hadoop_home/etc/hadoop/dfs.hosts.exclude</value>
</property>
3)刷新namenode、刷新resourcemanager
[hadoop@nod1:~/hadoop_home]$ hdfs dfsadmin -refreshNodes
Refresh nodes successful
[hadoop@nod1:~/hadoop_home]$ yarn rmadmin -refreshNodes
17/06/24 14:55:56 INFO client.RMProxy: Connecting to ResourceManager at node/192.168.0.242:8033
4)检查web浏览器,退役节点的状态为decommission in progress(退役中),说明数据节点正在复制块到其他节点。

5)等待退役节点状态为decommissioned(所有块已经复制完成),停止该节点及节点资源管理器。注意:如果副本数是3,服役的节点小于等于3,是不能退役成功的,需要修改副本数后才能退役。·

hadoop@master:~/hadoop_home$ sbin/hadoop-daemon.sh stop datanode
stopping datanode
hadoop@master:~/hadoop_home$ sbin/yarn-daemon.sh stop nodemanager
stopping nodemanager
6)从include文件中删除退役节点,再运行刷新节点的命令
34 / 40
(1)从namenode的dfs.hosts文件中删除退役节点hadoop105
node3
node4
node5

(2)刷新namenode,刷新resourcemanager
[hadoop@nod1:~/hadoop_home]$ hdfs dfsadmin -refreshNodes
Refresh nodes successful
[hadoop@nod1:~/hadoop_home]$ yarn rmadmin -refreshNodes
17/06/24 14:55:56 INFO client.RMProxy: Connecting to ResourceManager at hadoop103/192.168.1.103:8033
7)从namenode的slave文件中删除退役节点node5
node3
node4
node5
8)如果数据不均衡,可以用命令实现集群的再平衡
[hadoop@nod1:~/hadoop_home]$ sbin/start-balancer.sh
starting balancer, logging to /home/hadoop/hadoop_home/logs/hadoop-hadoop-balancer-master.out
Time Stamp Iteration# Bytes Already Moved Bytes Left To Move Bytes Being Moved

MapReduce核心思想

mapreduce框中的shuffle过程一定会对key进行排序

Shuffle中的缓冲区大小会影响到mapreduce程序的执行效率,原则上说,缓冲区越大,磁盘io的次数越少,执行速度就越快。

面试提到的缓存就是提高效率
缓冲区的大小可以通过参数调整,参数:io.sort.mb 默认100M

上图之所以缓存区是因为提高效率,当缓存区满了之后再写入文件,这样会提高效率,而且写入缓存,效率也高

hadoop大致问题的更多相关文章

  1. CDH搭建Hadoop分布式服务器集群(java新手小白)

    1首先对于一个java还白的小白,先理解CDH与Hadoop的关系 一.Hadoop版本选择. Hadoop大致可分为Apache Hadoop和第三方发行第三方发行版Hadoop,考虑到Hadoop ...

  2. Windows环境下搭建Hadoop(2.6.0)+Hive(2.2.0)环境并连接Kettle(6.0)

    前提:配置JDK1.8环境,并配置相应的环境变量,JAVA_HOME 一.Hadoop的安装 1.1 下载Hadoop (2.6.0) http://hadoop.apache.org/release ...

  3. CDH5.7Hadoop集群搭建(离线版)

    用了一周多的时间终于把CDH版Hadoop部署在了测试环境(部分组件未安装成功),本文将就这个部署过程做个总结. 一.Hadoop版本选择. Hadoop大致可分为Apache Hadoop和第三方发 ...

  4. 大致(主要hadoop)软件下载地址

    jdk-8u181-linux-x64.tar.gz https://www.oracle.com/technetwork/java/javase/downloads/index.html hadoo ...

  5. [Hadoop in Action] 第7章 细则手册

    向任务传递定制参数 获取任务待定的信息 生成多个输出 与关系数据库交互 让输出做全局排序   1.向任务传递作业定制的参数        在编写Mapper和Reducer时,通常会想让一些地方可以配 ...

  6. Hadoop2 自己动手编译Hadoop的eclipse插件

    前言:       毕业两年了,之前的工作一直没有接触过大数据的东西,对hadoop等比较陌生,所以最近开始学习了.对于我这样第一次学的人,过程还是充满了很多疑惑和不解的,不过我采取的策略是还是先让环 ...

  7. Hadoop的数据管理

    Hadoop的数据管理,主要包括Hadoop的分布式文件系统HDFS.分布式数据库HBase和数据仓库工具Hive的数据管理. 1.HDFS的数据管理 HDFS是分布式计算的存储基石,Hadoop分布 ...

  8. Hadoop学习之旅一:Hello Hadoop

    开篇概述 随着计算机网络基础设施的完善,社交网络和电商的发展以及物连网的推进,产生了越来越多的大数据,使得人工智能最近几年也有了长足的发展(可供机器学习的样本数据量足够大了),大数据的存储和处理也越来 ...

  9. [Hadoop]-从数据去重认识MapReduce

    这学期刚好开了一门大数据的课,就是完完全全简简单单的介绍的那种,然后就接触到这里面最被人熟知的Hadoop了.看了官网的教程[吐槽一下,果然英语还是很重要!],嗯啊,一知半解地搭建了本地和伪分布式的, ...

随机推荐

  1. 优化笔记:jsyhjkzqxx_D_20140916.gz

    有几张表没有权限,所以跑不起来. 目测黄色部分比较坑爹,死了n多脑细胞才看懂,又死了n多脑细胞才改出来.对5034进行了2次扫描,并多次分组排序求和.(分组和排序算法相对来说比较耗性能) 改为只扫描一 ...

  2. Julia - 字符串判断函数

    isascii() 判断是否是 ascii 码,返回 Bool 值 julia> isascii('a') true julia> isascii('α') false julia> ...

  3. java并发的基本概念和级别

    并发的概念: 并发(Concurrency)和并行(Parallelism) 并发偏重于多个任务交替执行,而多个任务之间有可能还是串行的.而并行是真正意义上的“同时执行”.严格意义上来说,并行的多个任 ...

  4. Netty入门二:开发第一个Netty应用程序

    Netty入门二:开发第一个Netty应用程序 时间 2014-05-07 18:25:43  CSDN博客 原文  http://blog.csdn.net/suifeng3051/article/ ...

  5. RSA_JS_PHP加密解密

    root@DESKTOP-I4OIMJC /cygdrive/e/html/RSA_JS_PHP/openssl/bin # ./openssl.exe OpenSSL> genrsa -out ...

  6. Php函数set_include_path()函数详解

    set_include_path--设置include_path配置选项. 说明 string set_include_path(string $new_include_path); 为当前脚本设置i ...

  7. C# 一维码生成

    概念 一维条码即指条码条和空的排列规则,常用的一维码的码制包括:EAN码.39码.交叉25码.UPC码.128码.93码,ISBN码,及Codabar(库德巴码)等. 条形码起源于 20 世纪 40 ...

  8. spring maven项目解决依赖jar包版本冲突方案

    引入:http://blog.csdn.net/sanzhongguren/article/details/71191290 在spring reference中提到一个解决spring jar包之间 ...

  9. hbase安装与配置-分布式

    HBASE安装与配置 备注: 1:本文在hadoop的完全分布式基础上部署hbase 2:本文使用的是小博主自己搭建的zookpeer服务,未使用hbase本身的zookpeer服务 本文内容在以下前 ...

  10. MVC项目不同域之间的UrlRouting

    一.DomainAction,方便生成不同域下的url 1.新建3个MVC项目,一个公用类库WebCore Demo.WebApplication0 绑定域名 www.demo.com demo.co ...