hadoop入门学习笔记

  • 格式:docx
  • 大小:32.04 KB
  • 文档页数:14

一. Hadoop简介

1.1hadoop概述

课程总括:

1.掌握hadoop基本知识,进行hadoop的HDFS和MapReduce应用开发,搭建Hadoop集群

2.掌握Hbase基本知识,搭建Hbase集群,Hbase基本操作

3.

Hadoop是什么?

适合大数据的分布式存储和计算平台.

分布式存储:数据分散存储在堕胎计算机上,但对于用户感受不到(通透性)

分布式计算:负载均衡,请求分发机制,跨操作系统.

1.2hadoop体系结构

Hadoop核心项目

1. HDFS:(Hadoop Distributed File System)分布式文件系统(用户只管上传,而不用知道怎么存)

2. MapReduce:并行计算框架

HDFS的架构

主从结构:

1. 主节点,只有一个namenode,负责:

①接受用户操作请求,是用户操作的入口

②维护文件系统的目录结构,陈祚命名空间

2. 从节点:有很多datanode,负责

①存储文件

MapReduce的架构

主从结构:

1. 主节点:只有一个JobTracker,负责

①接收客户提交的计算任务

②监控TaskTracker的执行

③,把计算任务分配给TaskTracker执行,即任务调度

2. .从节点:有很多个TaskTracker

执行JobTracker分配的计算任务

HDFS中namenode,datanode于MapReduce中JobTracker和TaskTracker的区别

1. HDFS是负责数据存储的,MapReduce是负责任务分发与处理的

2. Namenode和jobTracker一般不配置在同一节点上.因为namenode是负责对外请求处理,而Jobtracker是对内任务分发的,应分开以保证系统安全性

3. Datanode与taskTracker一般配置在同一节点上,因为TaskTracker只处理本地数据

4. Datanode与TaskTracker不在同一节点时,TaskTracker处理的数据来源于其他文件系统

5. 用户进行存储是,与datanode直接打交道,namenode只是为用户提供block id,并记录

6. 数据切歌存储是,一条数据存放在同一datanode上,否则数据作废

1.3搭建Hadoop集群环境

Hadoop部署方式

1. 本地模式

2. 伪分布模式:在同一节点上运行hadoop的各个进程

3. 集群模式:Hadoop的各个进程运行在集群的很多节点上

二. 初识hadoop

2.1 HDFS的shell操作

课程总括:

1.分布式文件系统与HDFS

2.HDFS体系结构与基本概念

3.HDFS的shell操作

4.java常用接口及api

HDFS的特点

1. 对用户访问透明的文件系统,数据存放在许多节点上

2. 适用于一次写入多次查询的情况,不支持并发写,不适合小文件

3. HDFS中有一层体系结构,把外部客户端看到的文件系统逻辑结构与真正数据存储的物理结构,解耦了

HDFS的shell操作

1. hadoop fs –ls hdfs://nn1:22/

查看nn1节点下的目录和文件(仅显示此目录下的)

2. hadoop fs –lsr hdfs://nn1:22/

循环递归查看nn1节点下的所有目录和文件(包括子目录中的内容)

3. hadoop fs –mkdir hdfs://nn1:22/dir1

创建nn1节点根目录下的dir1目录

4. hadoop fs –touchz hdfs://nn1:22/dir1/file

在nn1节点的dir1目录下创建file空文件 5. hadopp fs –put hello hdfs://nn1:22/dir1

将本地的hello文件上传至nn1节点的dir1目录下(重复上传文件会报错)

6. hadoop fs –text hello hdfs://nn1:22/dir1/file

查看file文件中的内容

上传时若省略节点路径,系统会使用默认客户端的路径,默认客户端路径由core-site.xml中的的值确定

7. hadoop fs –get hdfs://nn1:22/dir/file

将file文件下载到本地

8. hadoop fs –rmr hdfs://nn1:22/dir1

删除文件或目录,删除目录时,目录下的文件也被删除

Namenode

1. 是整个文件系统的管理节点,他维护着整个文件系统的文件目录树,文件/目录的元信息和每个文件对应的数据块列表,接收用户的操作请求

2. 文件包括:

①Fsimage:元数据镜像文件,存储某一时段namenode内存元数据信息

②Edit:操作日志文件

③Fstime:保存最近一次checkpoint的时间

3. 以上这些文件是保存在linux文件系统中的

4. 文件上传时,namenode只负责管理,登记上传文件存储块,至于传输过程中,客户与datanode直接传输,不经过namenode

5. 文件上传时,namenode会将大文件切割成许多小文件来存储(一般64mb),提升了存储空间利用率,增强文件传输过程的安全性(传输时进程down掉时,只需重传64mb的文件,而不需重传全部).至于各小块存储位置和如何进行组装由HDFS封装了

注:fsimage是数据与数据块存放的映射表,是集群的关键,在hdfs-site.xml中配置.dir的值,将其改为由逗号隔开的多个目录列表(逗号为英文,前后无空格,切目录必须为已存在的目录),则fsimage将在每个路径下存放一遍.

Datanode

1. 提供真实数据的存储服务

2. 文件快:最基本的存储单位.对于文件内容而言,一个文件的长度大小是size,那么从文件的0偏移开始,按照固定的大小,顺序对文件进行划分并编号,划分好的每一个块成为一个block,HDFS默认Block大小为64MB,以一个256MB文件,共有256/64=4个block

3. 不同于普通文件系统的是,HDFS中,如果一个文件小于一个数据块的大小,并不占用整个数据存储空间

4. Replication,多副本,默认只有一个

注:1.默认快大小修改,在hdfs-defalut.xml中找到dfs.block.size,将其包含的property复制到hdfs-site.xml中,在修改其值,注意不要在源文件中修改

2.修改默认副本数,过程同上,找到dfs.replication

3.当文件大于64MB时,按64MB划分Block存储,剩余不足部分按实际大小占用block块存储

secondaryNameNode

1. HA的一个解决方案,但不支持热备,配置即可 2. 执行过程:从NameNode上下载数据信息(fsimage,edits),然后把两者合并,生成新的fsimage,在本地保存,并将其推送至NameNode,同时重置NameNode上的edits

3. 默认安装在NameNode节点上,但这样不安全

注,2.的详解:NameNode每隔1小时或edits满64Mb就触发合并,合并时,将数据传到secondaryNameNode时,因数据读写不能同步进行,此时NameNode产生一个新的日志文件edits.new用来存放这段时间的操作日志.SecondaryNameNode合并成fsimage后回传给NameNode替换掉原有fsimage,并将edits.new命名为edits.

补充说明:当NameNode当机时,通过secondaryNameNode恢复时,会丢失edits.new的映射表

本章经验总结:

1.搭建集群环境时,对于NameNode和JobTracker不在同一节点时,配置NameNode在chaoren1上,JobTracker在chaoren2上

(1)Node所在节点是通过配置文件core-site.xml的实现的.其值设为hdfs://chaoren1:9000;JobTracker所在节点是通过mapred-site.xml的mapred.job.tracker的值实现,其值设为hdfs://chaoren2:9001

2.把修改复制到集群的其他节点中

3.其同时,不要使用start-all.sh,而应该使用hadoop-daemon.sh start xxxx

1.2在chaoren1上执行命令hadoop-daemon.sh start jobtracker

在chaoren2上执行hadoop-daemon.sh start secondarynamenode

在chaoren2上执行hadoop-daemon.sh start datanode

在chaoren1上执行hadoop-daemon.sh start tasktracker

Node单点问题的解决

1.使用.dir的多目录保存数据

2.使用secondaryNameNode

3.使用第三方的avatanode

3.执行HDFS格式化时,NameNode创建自己的目录结构,datanode因为没有实际数据,对其不产生任何影响

4.HDFS shell

使用put命令上传文件时

1. 如果目的地是一个已经存在的文件夹时,新文件上传到文件夹内,文件名是原来的文件名

2. 如果目的地是一个已经存在的文件夹时,且源文件已经存在,再次上传报错

3. 如果目的地是一个不存在的路径时,新文件上传成功,文件名是目标路径名称

2.2HDFS的java操作

package hdfs;

import java.io.IOException;

import .URI;