hadoop之hdfs

什么是大数据

1、有海量的数据
2、有对海量数据进行挖掘的需求
3、有对海量数据进行挖掘的软件工具(hadoop、spark、storm、flink、tez、impala…)

处理海量数据的核心技术
海量数据存储:分布式
海量数据运算:分布式

这些核心技术的实现不需要用户从零开始造轮子,存储和运算,有大量成熟的架框来用

存储架框
HDFS – 分布式文件存储系统
HBASE – 分布式数据库系统
KAFKA – 分布式消息缓存系统(实时流式数据处理场景应用广泛)

运算框架:(要解决的核心问题就是帮用户将处理逻辑在很多机器上并行)
MAPREDUCE – 离线批处理/ hadoop中的运算框架
SPARK – 离线批处理/实时流式计算
STORM – 实时流式计算

辅助类的工具
FLUME – 数据采集
SQOOP – 数据迁移
HIVE – 数据仓库工具 可以接受sql ,翻译成mapreduce或者spark程序运行

大数据在生活中的应用:

最典型的场景: 公司的产品运营情况分析

电商推荐系统:基于海量的浏览行为,购物行为数据,进行大量的算法模型的运算,得出各自推荐结论,以供电商网站页面来为用户进行商品推荐

精准广告推送系统:基于海量的互联网用户的各类数据,统计分析,进行用户画像(得到用户的各种属性标签),然后可以为广告主进行针对性的精准的广告投放)

什么是hadoop

hadoop中有三个核心组件
分布式文件系统:HDFS – 实现将文件分布式的存储在很多服务器上
分布式运算编程框架:MAPREDUCE – 实现在很多机器上分布式并行运算
分布式资源调度平台: YARN – 帮用户调度大量的mapreduce程序,并合理分配运算资源

hdfs整体运行机制

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
hdfs的特性:
hdfs:分布式文件系统
hdfs有着文件系统共同的特征:
1、有目录结构,顶层目录是: /
2、系统中存放的就是文件
3、系统可以提供对文件的:创建、删除、修改、查看、移动等功能

hdfs跟普通的单机文件系统有区别:
1、单机文件系统中存放的文件,是在一台机器的操作系统中
2、hdfs的文件系统会横跨N多的机器
3、单机文件系统中存放的文件,是在一台机器的磁盘上
4、hdfs文件系统中存放的文件,是落在n多机器的本地单机文件系统中(hdfs是一个基于linux本地文件系统之上的文件系统)

hdfs的工作机制:
1、客户把一个文件存入hdfs,其实hdfs会把这个文件切块后,分散存储在N台linux机器系统中(负责存储文件块的角色:data node)<准确来说:切块的行为是由客户端决定的>

2、一旦文件被切块存储,那么,hdfs中就必须有一个机制,来记录用户的每一个文件的切块信息,及每一块的具体存储机器(负责记录块信息的角色是:name node)

3、为了保证数据的安全性,hdfs可以将每一个文件块在集群中存放多个副本(到底存几个副本,是由当时存入该文件的客户端指定的)

综述:一个hdfs系统,由一台运行了namenode的服务器,和N台运行了datanode的服务器组成!

搭建hdfs分布式集群

hdfs集群组成结构:
在这里插入图片描述
安装hdfs集群的具体步骤:
一、首先需要准备N台linux服务器
学习阶段,用虚拟机即可!
先准备4台虚拟机:1个namenode节点 + 3 个datanode 节点

二、修改各台机器的主机名和ip地址
主机名:hdp-01 对应的ip地址:192.168.33.61
主机名:hdp-02 对应的ip地址:192.168.33.62
主机名:hdp-03 对应的ip地址:192.168.33.63
主机名:hdp-04 对应的ip地址:192.168.33.64

三、从windows中用CRT软件进行远程连接
在windows中将各台linux机器的主机名配置到的windows的本地域名映射文件中:
c:/windows/system32/drivers/etc/hosts
192.168.33.61 hdp-01
192.168.33.62 hdp-02
192.168.33.63 hdp-03
192.168.33.64 hdp-04
用crt连接上后,修改一下crt的显示配置(字号,编码集改为UTF-8):
在这里插入图片描述
四、配置linux服务器的基础软件环境
 防火墙
关闭防火墙:service iptables stop
关闭防火墙自启: chkconfig iptables off

 安装jdk:(hadoop体系中的各软件都是java开发的)

  1. 利用alt+p 打开sftp窗口,然后将jdk压缩包拖入sftp窗口
  2. 然后在linux中将jdk压缩包解压到/root/apps 下
  3. 配置环境变量:JAVA_HOME PATH
    vi /etc/profile 在文件的最后,加入:
    export JAVA_HOME=/root/apps/jdk1.8.0_60
    export PATH= P A T H : PATH: PATH:JAVA_HOME/bin
  4. 修改完成后,记得 source /etc/profile使配置生效
  5. 检验:在任意目录下输入命令: java -version 看是否成功执行
  6. 将安装好的jdk目录用scp命令拷贝到其他机器
  7. 将/etc/profile配置文件也用scp命令拷贝到其他机器并分别执行source命令

 集群内主机的域名映射配置
在hdp-01上,vi /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.33.61 hdp-01
192.168.33.62 hdp-02
192.168.33.63 hdp-03
192.168.33.64 hdp-04
然后,将hosts文件拷贝到集群中的所有其他机器上
scp /etc/hosts hdp-02:/etc/
scp /etc/hosts hdp-03:/etc/
scp /etc/hosts hdp-04:/etc/

补充
提示: 如果在执行scp命令的时候,提示没有scp命令,则可以配置一个本地yum源来安装
1、先在虚拟机中配置cdrom为一个centos的安装镜像iso文件
2、在linux系统中将光驱挂在到文件系统中(某个目录)
3、mkdir /mnt/cdrom
4、mount -t iso9660 -o loop /dev/cdrom /mnt/cdrom
5、检验挂载是否成功: ls /mnt/cdrom
6、3、配置yum的仓库地址配置文件
7、yum的仓库地址配置文件目录: /etc/yum.repos.d
8、先将自带的仓库地址配置文件批量更名:
在这里插入图片描述
9、然后,拷贝一个出来进行修改
在这里插入图片描述
在这里插入图片描述
10、修改完配置文件后,再安装scp命令:
11、yum install openssh-clients -y

五、安装hdfs集群
1、上传hadoop安装包到hdp-01

2、修改配置文件
要点提示 核心配置参数:

  1. 指定hadoop的默认文件系统为:hdfs
  2. 指定hdfs的namenode节点为哪台机器
  3. 指定namenode软件存储元数据的本地目录
  4. 指定datanode软件存放文件块的本地目录

hadoop的配置文件在:/root/apps/hadoop安装目录/etc/hadoop/

  1. 修改hadoop-env.sh
    export JAVA_HOME=/root/apps/jdk1.8.0_60

  2. 修改core-site.xml


    fs.defaultFS
    hdfs://hdp-01:9000

  3. 修改hdfs-site.xml


    dfs.namenode.name.dir
    /root/dfs/name


    dfs.datanode.data.dir
    /root/dfs/data

  4. 拷贝整个hadoop安装目录到其他机器
    scp -r /root/apps/hadoop-2.8.0 hdp-02:/root/apps/
    scp -r /root/apps/hadoop-2.8.0 hdp-03:/root/apps/
    scp -r /root/apps/hadoop-2.8.0 hdp-04:/root/apps/

  5. 启动HDFS
    所谓的启动HDFS,就是在对的机器上启动对的软件
    要点
    提示: 要运行hadoop的命令,需要在linux环境中配置HADOOP_HOME和PATH环境变量
    vi /etc/profile
    export JAVA_HOME=/root/apps/jdk1.8.0_60
    export HADOOP_HOME=/root/apps/hadoop-2.8.0
    export PATH= P A T H : PATH: PATH:JAVA_HOME/bin: H A D O O P H O M E / b i n : HADOOP_HOME/bin: HADOOPHOME/bin:HADOOP_HOME/sbin

首先,初始化namenode的元数据目录
要在hdp-01上执行hadoop的一个命令来初始化namenode的元数据存储目录
hadoop namenode -format
 创建一个全新的元数据存储目录
 生成记录元数据的文件fsimage
 生成集群的相关标识:如:集群id——clusterID

然后,启动namenode进程(在hdp-01上)
hadoop-daemon.sh start namenode
启动完后,首先用jps查看一下namenode的进程是否存在

然后,在windows中用浏览器访问namenode提供的web端口:50070
http://hdp-01:50070

然后,启动众datanode们(在任意地方)
hadoop-daemon.sh start datanode

  1. 用自动批量启动脚本来启动HDFS
  2. 先配置hdp-01到集群中所有机器(包含自己)的免密登陆
  3. 配完免密后,可以执行一次 ssh 0.0.0.0
  4. 修改hadoop安装目录中/etc/hadoop/slaves(把需要启动datanode进程的节点列入)
    hdp-01
    hdp-02
    hdp-03
    hdp-04
  5. 在hdp-01上用脚本:start-dfs.sh 来自动启动整个集群
  6. 如果要停止,则用脚本:stop-dfs.sh

hdfs的客户端操作

hdfs的客户端有多种形式:
1、网页形式
2、命令行形式
3、客户端在哪里运行,没有约束,只要运行客户端的机器能够跟hdfs集群联网

文件的切块大小和存储的副本数量,都是由客户端决定!
所谓的由客户端决定,是通过配置参数来定的
hdfs的客户端会读以下两个参数,来决定切块大小、副本数量:
切块大小的参数: dfs.blocksize
副本数量的参数: dfs.replication

dfs.blocksize, dfs.replication参数在客户端机器上的hadoop目录中hdfs-site.xml中配置

dfs.blocksize
64m

dfs.replication 2

hdfs命令行客户端的常用操作命令

0、查看hdfs中的目录信息
hadoop fs -ls /hdfs路径

1、上传文件到hdfs中
hadoop fs -put /本地文件 /aaa

2、下载文件到客户端本地磁盘
hadoop fs -get /hdfs中的路径 /本地磁盘目录
hadoop fs -copyToLocal /hdfs中的路径 /本地磁盘路径 ## 跟get等价
hadoop fs -moveToLocal /hdfs路径 /本地路径 ## 从hdfs中移动到本地

3、在hdfs中创建文件夹
hadoop fs -mkdir -p /aaa/xxx

4、移动hdfs中的文件(更名)
hadoop fs -mv /hdfs的路径 /hdfs的另一个路径

5、删除hdfs中的文件或文件夹
hadoop fs -rm -r /aaa

6、修改文件的权限
hadoop fs -chown user:group /aaa
hadoop fs -chmod 700 /aaa

7、追加内容到已存在的文件
hadoop fs -appendToFile /本地文件 /hdfs中的文件

8、显示文本文件的内容
hadoop fs -cat /hdfs中的文件
hadoop fs -tail /hdfs中的文件

hdfs的java客户端编程

HDFS客户端编程应用场景:数据采集
在这里插入图片描述

在windows开发环境中做一些准备工作:
1、在windows的某个路径中解压一份windows版本的hadoop安装包
2、将解压出的hadoop目录配置到windows的环境变量中:HADOOP_HOME

开发代码
1、将hdfs客户端开发所需的jar导入工程(jar包可在hadoop安装包中找到common/hdfs)

2、写代码
要点:要对hdfs中的文件进行操作,代码中首先需要获得一个hdfs的客户端对象
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(new URI(“hdfs://hdp-01:9000”),conf,“root”);

3、利用fs对象的方法进行文件操作
比如:
上传文件—— fs.copyFromLocalFile(new Path(“本地路径”),new Path(“hdfs的路径”));
下载文件——fs.copyToLocalFile(new Path(“hdfs的路径”),new Path(“本地路径”))

hdfs的核心工作原理

namenode元数据管理要点
1、什么是元数据?
hdfs的目录结构及每一个文件的块信息(块的id,块的副本数量,块的存放位置)

2、元数据由谁负责管理?
namenode

3、namenode把元数据记录在哪里?
namenode的实时的完整的元数据存储在内存中;
namenode还会在磁盘中(dfs.namenode.name.dir)存储内存元数据在某个时间点上的镜像文件;
namenode会把引起元数据变化的客户端操作记录在edits日志文件中;
secondarynamenode会定期从namenode上下载fsimage镜像和新生成的edits日志,然后加载fsimage镜像到内存中,然后顺序解析edits文件,对内存中的元数据对象进行修改(整合)
整合完成后,将内存元数据序列化成一个新的fsimage,并将这个fsimage镜像文件上传给namenode
上述过程叫做:checkpoint操作
提示:secondary namenode每次做checkpoint操作时,都需要从namenode上下载上次的fsimage镜像文件吗?
第一次checkpoint需要下载,以后就不用下载了,因为自己的机器上就已经有了。
在这里插入图片描述
补充:secondary namenode启动位置的配置
默认值
dfs.namenode.secondary.http-address
0.0.0.0:50090

把默认值改成你想要的机器主机名即可

secondarynamenode保存元数据文件的目录配置:
默认值
dfs.namenode.checkpoint.dir
file://${hadoop.tmp.dir}/dfs/namesecondary

改成自己想要的路径即可:/root/dfs/namesecondary

写数据流程

在这里插入图片描述

读数据流程在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值