Hadoop的简介:
HDFS(Hadoop Distribute File System)分布式存储:解决海量数据存储问题
MapReduce:Hadoop分布式运算框架
Yarn:分布式资源调度平台
Commons:Hadoop底层技术支持
Apache Hadoop软件库是一个框架,该框架允许使用简单的编程模型跨计算机集群对大型数据集进行分布式处理。它旨在从单个服务器扩展到数千台机器,每台机器都提供本地计算和存储。库本身不是设计用来依靠硬件来提供高可用性,而是旨在检测和处理应用程序层的故障,因此可以在计算机集群的顶部提供高可用性的服务,而每台计算机都容易出现故障。
它解決了两大问题:大数据存储、大数据分析。也就是 Hadoop 的两大核心:HDFS 和 MapReduce。
Hadoop特点:
1.高可靠性:Hadoop底层可以将数据以多个副本的形式储存在不同的机器上,保证数据的安全可靠
2.高扩展性:当集群的储存容量或运算能力不足时,可横向扩展增加节点,来提高储存容量和运算能力
3.低成本:hadoop可以在廉价的机器上并行工作
4.高容错性:hadoop能够自动保存多个副本,当有储存数据的节点宕机后,会自动复制副本维持集群中的副本个数,并且能够自动的将失败的任务重新分配
5.高可用性:一般集群中的namenode都有两台,一台正常启动,一台备用,当一台宕机后,另外一台能立马对接他的工作
HDFS介绍
优点:
1.高容错性和高安全性:为保证数据安全,会默认储存三个副本,数据储存在集群中会默认128M每份物理切割后进行分块储存
2.储存时会记录用户储存的数据的位置信息(某个文件的某个数据块储存在哪个机器的哪个位置)
3.元数据:为用户提供一个虚拟的访问目录,访问目录映射到对应的元数据信息
缺点
1.不适合低延迟的数据访问,比如毫秒级的数据访问和储存
2.不适合储存大量小文件的数据
3.不适合并发写和文件随机修改
架构
HDFS采用的主从节点:主节点:namenode 从节点datanode
HDFS提供两种客户端操作:SHELL命令和JAVA命令,都可以和HDFS系统交互
主节点:namenode:
1.用来记录文件储存的元数据,对象(NameNode将这些数据的元数据信息记录在内存中,并且将这些元数据信息定期的序列化到本地磁盘上), 记录用户操作的行为日志 .记录用户存储的文件的大小、切分的块数、每一块的副本数和存储在DataNode上的位置
2.接收客户端的请求:给datanode分配储存任务.或者时给客户端请求数据的元信息
3.namenode也负责维护集群中的节点数量,接收datanode注册,维护一个统一的集群版本
4.维护集群中数据的负载均衡和副本个数完善
5.接收datanode心跳汇报
6.接收datanone的数据汇报,更新节点元数据
从节点datanode:
1.储存数据,将数据数据以物理切块的形式储存在本地指定的磁盘目录中
2.处理客户端的请求
3.接收namenode分配的任务
4.接收namenode的指令完成容错任务,副本的复制/移动
5.定期向namenode发送心跳响应请求,默认三秒一次
6.汇报自己储存的数据1h
secondary namenode:帮助namenode管理元数据
安装
准备工作:
保证Linux系统内已安装好java环境
提前配好每台机器的主机名 ip 域名映射
集群的免密配置
1.上传:
将hadoop安装包的压缩包上传到/opt/apps/目录下
2.解压
将hadoop压缩包解压到当前目录下
3.修改配置信息
先删除share包下的doc文件,减轻内存负担
去到hadoop的etc包下
- vi hadoop-env.sh 跳到54行配置java环境变量,因为hadoop是由java编写,需依赖于java环境运行
export JAVA_HOME=/usr/apps/jdk1.8.0_141 - hadoop/hdfs-site.xml 配置集群映射关系
<configuration>
<!-- 集群的namenode的位置 datanode能通过这个地址注册-->
<property>
<name>dfs.namenode.rpc-address</name>
<value>linux01:8020</value>
</property>
<!-- namenode存储元数据的位置 -->
<property>
<name>dfs.namenode.name.dir</name>
<value>/opt/hdpdata/name</value>
</property>
<!-- datanode存储数据的位置 -->
<property>
<name>dfs.datanode.data.dir</name>
<value>H</value>
</property>
<!-- secondary namenode机器的位置-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>linux02:50090</value>
</property>
</configuration>
- vi /opt/apps/hadoop-3.2.1/etc/hadoop/core-site.xml 配置默认的文件系统,执行hdfs dfs 时 会自动识别 / 为hdfs://linux01:8020的根目录
<property>
<name>fs.defaultFS</name>
<value>hdfs://linux01:8020</value>
</property>
4.集群分发
将配置好的hadoop文件分发到其他机器上
scp -r hadoop-3.2.1 linux02:
P
W
D
s
c
p
−
r
h
a
d
o
o
p
−
3.2.1
l
i
n
u
x
03
:
PWD scp -r hadoop-3.2.1 linux03:
PWDscp−rhadoop−3.2.1linux03:PWD
5.初始化namenode
在hadoop-3.2.1/bin目录下执行: ./hadoop namenode -format
初始化后,会在/opt/hdpdata/目录下生成一个name目录
6.启动
启动集群时需先启动namenode
在hadoop-3.2.1/bin目录下: ./hadoop-daemon.sh start namenode
然后启动其他所有的datanode
在每台机器的hadoop-3.2.1/bin目录下: ./hadoop-daemon.sh start datanode
7.配置环境变量
为保证在任意位置都能启动hadoop,修改 vi /etc/profile文件
export HADOOP_HOME=/usr/apps/hadoop-3.2.1
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
修改/etc/profile文件后记得更新一下配置文件: source /etc/profile 或者 . /etc/profile文件
一键启动
为方便集群的启动和结束,可通过设定配置文件来实现一键启动
1)在/opt/apps/hadoop-3.2.1/etc/hadoop/目录下修改workers文件
将你要启动的datanode机器的ip映射名写入workers文件中
linux01
linux02
linux03
2)在hadoop-3.2.1/sbin/目录下的start-dfs.sh和stop-dfs.sh第二行加入以下语句
HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
配置完成后,即可在任意位置输入start-dfs.sh一键启动集群,stop-dfs.sh一键关闭集群
集群启动后,可在浏览器上输入linux01:9870进入可视化网络界面
集群搭建完毕后,可拍快照,保存当前状态信息,避免出现不可逆操作
如果集群正常运行,又克隆了一台机器想扩容,需要进行以下操作
1)重新免密配置
2)hdpdata/data目录删除 (有原来的节点的唯一的身份标识)
3)域名映射配置
HDFS的客户端操作
shell客户端
就是在linux控制台和shell脚本中操作,hadoop的shell客户端命令都在bin目录下
hdfs dfs 可查看所有的操作文件的命令
其中常用的有:
-ls -cat -mkdir -mv -rm -tail -df -get(下载) -put(上传)
实例:
hdfs dfs -put 1.txt / 将本目录下的1.txt上传到集群的根目录下
hdfs dfs -get 1.txt / 将集群的根目录下的1.txt文件下载到本机的根目录下
hdfs dfs -ls / 查看集群根目录下的详细文件信息
想要在网页上删除文件,需要给予权限:
hdfs dfs -chmod -R 1 777 /文件夹
删除集群根目录下所有信息需用以下写法:
hdfs dfs -rm -r hdfs://linux01:8020/*