一、简介1. Hadoop是Apache的顶级项目2. Hadoop是一个开源、可靠、可扩展的用于分布式计算的框架3. Hadoop本身适用于进行离线分析的框架,也就意味着Hadoop是对历史数据进行分析二、发展历程1. Hadoop之父:Doug Cutting(道格.卡丁)和Mike Cafarella2. 在2002年,Doug和Mike设计实现Nutch-搜索引擎 - 爬取了全网10亿个网页的数据3. 在2003年,Google发表了一篇论文"The Google File System",阐述了如何在分布式的情况下进行数据的存储。但是注意,这篇论文只讲述了存储的原理但是并没有对外公开这个框架4. 在2004年,Doug和Mike就根据GFS的原理设计实现了NDFS - Nutch Distributed File System,解决了数据的存储问题5. 在2004年,Google发表了一篇论文"The Google MapReduce",阐述了如何基于GFS进行数据的处理6. Doug和Mike又根据这篇论文设计实现了Nutch中的MapReduce7. 在Nutch0.8中,将NDFS和MapReduce从Nutch中分离出来形成了Hadoop,同时在这个过程中,将NDFS更名为HDFS8. 2008年,Doug加入了Yahoo,成立了专门的最美的胸团队去协助Doug研发Hadoop,Yahoo为了将Hadoop用于web应用的离线分析9. Doug在Yahoo工作期间肤色设计了HBase,Pig等大数据框架10. Yahoo将Hadoop、HBASE、Pig等框架贡献给了Apache三、模块1. Hadoop Common:基本模块2. Hadoop Distributed File System(HDFS):分布式文件系统,用于存储数据3. 企业战略管理Hadoop Yarn:用于任务调度和集群资源管理4. Hadoop MapReduce:(a Yarn-based system for parallel processing of large data sets。一种基于Yarn的大型数据集并行处理系统。)用于并行的分布式计算5. Hadoop Ozone:用于对象的存储6. Hadoop Submarine:用于机器学习的引擎四、Hadoop版本1. Hadoop1.0:包含了HDFS和MapReduce2. Hadoop2.0:包含了HDFS、MapReduce以及Yarn。Hadoop2.0做了重新的设计,导致和Hadoop1.0不兼容3. Hadoop3.0:兼容Hadoop2.0,新添了Ozone,Submarine
hadoop伪分布式搭建董事长办公室安装
伪分布式 用一台机器来模拟集群环境,可以启动Hadoop所有进程(要求掌握)
1.关闭防火墙
临时:service iptables stop永久:chkconfig iptables off2.主机名中不能存在-或者_,所以需要更改主机名。
[root@10-42-80-106 software]# vim /etc/sysconfig/network修改HOSTNAME=106hadoopAlone[root@10-42-80-106 software]# source /etc/sysconfig/network3.将主机名和ip进行映射
[root@10-42-80-106 software]# vim /etc/hosts添加主机的"ip 主机名"4.配置免密登录 需要复习ssh key (/root/.ssh/id_rsa):
产生公私钥
[root@106hadoopAlone ~]# ssh-keygenGenerating public/private rsa key pair.Enter file in which to save t配色网he key (/root/.ssh/id_rsa):Enter passphrase (empty for no passphrase):Enter same passphrase again:Your identification has been saved in /root/.ssh/id_rsa.Your public key has been saved in /root/.ssh/id_rsa.pub.The key fingerprint is:8e:f1:3a:f3:6f:b4:80:4a:02:d4:ef:dd:83:52:45:59 root@106hadoopAloneThe key's randomart image is:进行免密登录
[root@106hadoopAlone ~]# ssh-copy-id root@106hadoopAloneThe authenticity of host '106hadoopalone (10.42.80.106)' can't be established.RSA key fingerprint is 91:d0:7e:69:9a:2c:f8:50:0e:eb:ae:39:94:18:fa:8f.Are you sure you want to continue connecting (yes/no)? yesWarning: Permanently added '106hadoopalone,10.42.80.106' (RSA) to the list of known hosts.root@106hadoopalone's password:Now try logging into the machine, with "ssh 'root@106hadoopAlone'", and check in:.ssh/authorized_keysto make sure we haven't added extra keys that you weren't expecting.5.配置jdk环境
6.下载Hadoop 解压,此时完成单机的安装,接下来完成伪分布式安装
7.配置Hadoop
include 目录下的.h .hh是c语言头文件,有c语言支持
进入根目录的etc/hadoop子目录
[root@106hadoopAlone hadoop-2.7.1]# cd etc/hadoop/第一个修改的文件 修改环境hadoop-env.sh
[root@106hadoopAlone hadoop]# vim hadoop-env.sh25行 左右将export JAVA_HOME=${JAVA_HOME} 等号右边修改为/home/presoftware/jdk1.8通过[root@106hadoopAlone hadoop]# cat /etc/profile找到JAVA_HOME=/home/presoftwa洋钱罐re/jdk1.8为上边提供结果33行左右 修改export HADOOP_CONF_DIR的值,改为安装目录的子目录/home/software/hadoop-2.7.1/etc/hadoop[root@106hadoopAlone hadoop]# source hadoop-env.sh第二个修改的文件 修改配置core-site.xml
[root@106hadoopAlone hadoop]# vim core-site.xml添加配置
<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://106hadoopAlone:9000</value> </property> <property> <name>hadoop.tmp.dir </name> <value>/home/software/hadoop-2.7.1-alone/tmp</value> </property></configuration>第三个修改的文件 hdfs-site.xml [root@106hadoopAlone hadoop]# vim hdfs-site.xml 添加属性
<configuration> <property> <name>dfs.replication</name> <value>1</value> </property></configuration>在根目录下的etc/hadoop下复制一个文件
[root@106hadoopAlone hadoop]# cp mapred-site.xml.template mapred-site.xml第四个修改的文件 mapred-site.xml编辑复制的文件,添加属性
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property></configuration>第五个修改的文件yarn-site.xml
[root@106hadoopAlone hadoop]# vim yarn-site.xml添加属性
<configuration生理痘> <property> <name>yarn.resourcemanager.hostname</name> <value>106hadoopAlone</value> </property> <property> <name哺乳期保健>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property></configoeceuration>第六个修改的文件:
在路径/home/software/hadoop-2.7.1/etc/hadoop下[root@106hadoopAlone hadoop]# vim slaves修改原内容为主机名106hadoopAlone修改环境变量[root@106hadoopAlone hadoop]# vim /etc/profile文件末尾添加export HADOOP_HOME=/home/software/hadoop-2.7.1-aloneexport PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin同步[root@106hadoopAlone hadoop]# source /etc/profile伪分布式搭建完成
第一次启动前需要格式化Hadoop
在路径/home/software/hadoop-2.7.1/etc/hadoop下
[root@106hadoopAlone hadoop]# hadoop namenode -format如果接下来日志中显示 Storage directory /安装路径 has been successfully formatted 提示成功,如图
启动命令 start-all.sh
[root@106hadoopAlone hadoop-2.7.1]# start-all.sh输入jps命令查看是否有5个进程Hadoop进程
[root@106hadoopAlone hadoop]# jps5360 ResourceManager4899 NameNode5207 SecondaryNameNode5016 DataNode5755 Jps5452 NodeManagerHadoop启动成功后,可以通过浏览器访问HDFS的页面(NameNode的地址),访问地址为:IP地址:50070
HDFS简介一、概述 1. 是Hadoop的组件,用于完成分布式存储 2. 根据Google的论文进行设计实现的二、特点 1. 能够存储超大文件 - 通过切块 2. 能够快速的应对和检宝马750测故障 - 通过心跳 3. 不建议存储大量的小文件(每一个文件都会生成对应的一条元数据,大量的小文件会生成大量的元数据和复本,少量的文件会生成少量的元数据和复本,大量元数据导致查询慢。) 4.可靠的文件系统 - 复本(文件的备份机制)访问节点ip:50070查看NameNode状态,访问节点ip:50075查看DataNode状态
HDFS技术细节一、概述 1. 在存储数据的时候会将数据进行切分,切出来的每一个块称之为是一个Block (HDFS会将上传需要存储的数据切分,切出来的每一份都叫一个block。还需要一个记录如何切分、存储在哪的节点。) 2. 包含2类主要的节点:NameNode和DataNode 3. DataNode负责存储具体的数据,NameNode负责记录数据以及管理DataNode (每一个保存数据的主机叫做DataNode,记录切分、保存信息的节点叫做NameNode。) 4. NameNode和DataNode是Hadoop中的进程,只是实际使用过程中,会将NameNode以及DataNode部署在不同的节点(服务器)上,因此也用NameNode和DataNode表示节点的名字。 5. 在HDFS中,为了保证数据的完整性,将每一个Block进行备份,每一个备份称之为是一个复本。默认复本数量为3,block本身也是一个复本。 6. 当对文件进行切块的时候,会给Block分配一个全局递增的Id(Block ID)。二、Block 1. 表示一个数据块,是HDFS中数据存储的基本单位 2. 每一个文件上传到HDFS中,都会切成一个或者多个Block 3. 在Hadoop暗能量1.0中,每一个Block大小是64M;在Hadoop2.0中,每一个Block的大小是128M - 实际上指的是Block的最大大小(实际上指的是block最大容量) 4. 如果一个数据不足128M,那么这个数据本身是多大就占用多大的地方(容量) 5. 切块的意义: a. 能够存储超大文件 b. 为了能够进行快速的备份(切成小块,备份的效率更高,多台机器同时备份更小的数据,比单独一台机器备份一份大容量数据效率要高。)三、NameNode 1. 负责管理DataNode和存储元数据(记录如何切分、保存到哪) 2. 元数据包含: a. 文件的存放红色毛衣路径(需要存储到根目录/还是存储到其他目录) b. 文件的切块数量 c. 块的复本数量(实际开发中,不同的客户端可能会指定不同的复本数量) d. 复本与DataNode的关系(复本都存在哪些DataNode上)
例:
视频格式3. 元数据维系在内存以及磁盘中
4. 元数据维系在内存中的目的是为了快速的查询
5. 元数据维系在磁盘中的目的是为了崩溃恢复 - 如果NameNode宕机了刘珩重新启动的时候依然能够找到元数据
6. 元数据的存储目录由hadoop .tmp.dir来指定(元数据存储目录,在core-site.xml中配置,伪分布式中,在这个存储目录中有data、name 等目录,分别指代DataNode和NameNode,完全分布式name与data将存在于不同节点)
7. 元数据的存储文件是:edits和fsimage
(所在目录为:/home/software/hadoop-2.7.1/tmp/dfs/name/current)
a. fsimage用于记录元数据,但是注意其中记录的不是实时的元数据(文件存放路径,切块数量,块的复本数量,复本存储在那个DataNode)
b. edits用于记录写操作的(上传到HDFS的操作记录--复本存储在那个DataNode)
8. 当NameNode收到写请求的时候,会先将这个请求记录到edits文件中,如果记录成功再更改内存中的元数据,最后给客户端返回ack表示操作成功。这个过程中并不涉及fsimage文件的修改
客户端发起写请求(上传文件到HDFS)---HDFS将”写操作“记录到本地磁盘上的edits文件(用于崩溃恢复)
----修改内存中元数据(某路径下上传了一个文件)----返回ack告诉客户端写成功 此时并不涉及修改fsimage文件。
9. 当edits文件中的操作内容更新到fsimage文件中之后,即可使fsimage中的元数据能保持和内存一致
10. edits文件内容和fsimage文件内容进行合并的条件:
a. 时间维度:当距离上一次合并达到指定的时间(在core-site.xml中进行配置:f奇哈s.checkpoint.period,默认是3600,单位是s,也就意味着edits每隔1个小时就将数据更新到fsimage中)之后,将edits更新到fsimage中(常用)
b. 空间维度:当edits文件达到指定的大小(在core-site.xml中进行配置:fs.checkpoint.size,默认是64M,也就意味着edits达到64M的时候也会将数据更新到fsimage中)的时候也会更新到f搬运小坦克simage中(常用)
c. 在NameNode重启的时候会触发edits和fsimage文件内容的更新合并(不常用)
d. 手动合并:命令hadoop dfsadmin -rollEdits(不常用)
11. NameNode如何管理DataNode:通过心跳机制来管理DataNode
12. DataNode定时(默认是3s,可修改)给NameNode发送心跳信号表示当前的DataNode依然存在需要管理
13. 心跳信号包含:
a. 当前节点的状态
b. 当前节点存储的Block信息(存储哪些block,防止block丢失,如果有block人为删除,那么通过心跳机制,NameNode会知道有block缺失,会立即从其它节点拷贝一份回来)
14. 如果NameNode长时间(默认是10min)
没有收到DataNode的心跳,则认为这个DataNode已经lost(丢失),将这个DataNode上存储的Block再备份到其他的节点上保证复本数量 15. NameNode是HDFS中的核心节点,但是在Hadoop1.0中只能存在一个,在Had换挡转速oop2.0的完全分布式中,能且最多能存在2个(core-site.xml 中fs.default速干FS指定NameNode所在的节点,无法更换)
16. 当NameNode重新启动的时候,触发edits和fsimage之间的更新合并,然后将fsimage中的元数据加载到内存中,等待所有DataNode节点的心跳(目的是校验数据的总量是否正确,如果没有收到某个DataNode的心跳,则数据总量就不对,NameNode就会试图恢复这个DataNode保存的数据 -保证备份总量),这个过程称之为安全模式。
17. HD生活方式病FS处在安全模式中的时候,不对外提供服务
18. 当启动HDFS的时候,如果发现处在安全模式,需要等待一会儿;如果校验成功会自动退出安全模式
19. 如果HDFS一直处在安全模式中,说明数据是丢失了,就要强制退出安全模式:命令:hadoop dfsadmin -safemode leave(尽量不使用)
20. 在伪分布式下,复本数量必须配置为1。如果在伪分布式下,复本数量设置为3,根据复本放置策略这些复本要放到不同机架的不同节点上,但是伪分布式下只有1个节点,那就意味着放置会失败;如果重启NameNode,则会自动进入安全模式,并且会一直处于安全模式中退不出来
四、DataNode
1. 用于进行数据的存储
2. 数据是以Block的形式存储在DataNode中(每一个block都相当于一个复本)
3. DataNode会每隔3s给NameNode发送心跳
五、复本放置策略
1. 在HDFS中,默认是多复本策略,复本数量默认为3
2. 第一个复本:如果复本是从集群内部上传(比如从一个DataNode上传),是哪个DataNode上传,则第一个复本就放在哪个DataNode上;
如果是从集群外部上传,NameNode选择一个相对空闲(存储较少内容)的节点存储第一个复本
3. 第二个复本:放在和第一个复本不同机架(逻辑机架)的节点上
4. 第三个复本:放在和第二个复本相同机架(逻辑机架)的不同节点上
5. 更多复本:挑选相对空闲(存储较少内容)的节点存储
六、机架感知策略
1. 在Hadoop中,所谓的机架实际上是一个映射,是一个逻辑机架
2. 可以将不同的主机映射到同一个机架上
3. 可以将不同的物理机架上的节点映射到同一个逻辑机架上
4. 实际开发中,一般会将同一个物理机架上的节点放在同一个逻辑机架上
七、回收站策略
1. 在HDFS中,当删除文件或者目录的时候是立即删除,这是因为Hadoop中回收站策略默认是不开启的
2. 可以在core-site.xml中添加属性fs.trash.interval来指定回收间隔时间,默认单位是分钟
3. 开启回收站机制后,删除的文件在回收站中,回收站的目录为根目录下/user/root/.Trash/在此目录下的current/目录下保存着删除的文件,如果还需要使用使用mv命令将文件移动到原始位置即可还原。
八、SecondaryNameNode
1.不管理Dat利用电脑赚钱aNode也不负责存储元数据,并不是NameNode的热备份(热备份:实时备份),在早期版本中只是辅助NameNode进行元数据的合并 - edits和fsimage在Hadoop1.0中合并时发生在SecondaryNameNode上,但是在Hadoop的2.0的完全分布式中,舍弃了SecondaryNameNode,为了保证NameNode的高可用,通过舍弃SecondaryNameNode的方式来设置2个NameNode,所以在Hadoop2.0的完全分布式中,元数据的合并是发生在NameNode上
2. 只是在Hadoop2.0的伪分布式中依然存在SecondaryNameNode
HDFS体系结构图
HDFS命令一、常见命令
命令说明hadoop fs -mkdir /park在hdfs 的根目录下,创建 park目录例:[root@lh2hadoopAlone software]# hadoop fs -mkdir /testhadoop fs -ls /查看hdfs根目录下有哪些目录例:普通[root@lh2hadoopAlone software]# hadoop fs -ls /递归[root@lh2hadoopAlone software]# hadoop fs -lsr /hadoop fs -put /root/1.txt /park将linux操作系统root目录下的1.txt放在hdfs的park目录下例:[root@lh2hadoopAlone software]# hadoop fs -put c.txt /c.txthadoop fs -get /park/jdk /home把hdfs文件系统下park目录的文件下载到linux的home目录下hadoop fs -rm /park/文件名删除hdfs 的park目录的指定文件例:[root@lh2hadoopAlone software]# hadoop fs -rm /a.txthadoop fs -rmdir /park删除park目录,但是前提目录里没有文件例:[root@lh2hadoopAlone software]# hadoop fs -rmdir /testDirhadoop fs -rmr /park删除park目录,即使目录里有文件例:[root@lh2hadoopAlone software]# hadoop fs -rmr /testhadoop fs -cat /park/a.txt查看park目录下的a.txt文件例:[root@lh2hadoopAlone software]# hadoop fs-cat /b.txthadoop fs -tail /park/a.txt查看park目录下a.txt文件末尾的数据(查看文件最后1000个字节)例:[root@lh2hadoopAlone software]# hadoop fs -tail /b.txthaddop jar xxx.jar执行jar包hadoop fs -cat /park/result/part-r-00000查看 /park/result/part-r-00000文件的内容hadoop fs –mv /park02 /park01将HDFS上的park02目录重名为park01命令。例:[root@lh2hadoopAlone software]# hadoop fs -mv /b.txt /b01.txthadoop fs -mv /park02/1.txt /park01将park02目录下的1.txt移动到/park01目录下hadoop fs -touchz /park/2.txt创建一个空文件例:[root@lh2hadoopAlone software]# hadoop fs -touchz /test.loghadoop fs -getmerge /park /root/tmp将park目录下的所有文件合并成一个文件,并下载到linux的root目 录下的tmp目录例:[root@lh2hadoopAlone software]# hadoop fs -getmerge / merge.txthadoop dfsadmin -safemode leave离开hadoop安全模式hadoop dfsadmin -safemode enter进入安全模式hadoop dfsadmin -rollEdits手动执行fsimage文件和Edis文件合并元数据hadoop dfsadmin -report查看存活的datanode节点信息hadoop fsck /park汇报/park目录 健康状况hadoop fsck /park/1.txt -files -blocks -locations -racks查看1.txt 这个文件block信息以及机架信息hadoop fs -expunge手动清空hdfs回收站hadoop fs -cp /a.txt /a2.txt拷贝根目录下的a.txt到根目录下,名称改为a2.txt例:[root@lh2hadoopAlone software]# hadoop fs -cp /a.txt /a2.txt二、其他命令
命令说明hadoop fs -cp /park01/1.txt /park02将HDFS上 /park01下的1.txt拷贝一份到 /park02目录下。目标路径可以有多个,用空格隔开,比如:hadoop fs -cp /park01/1.txt /park02 /park03……hadoop fs -du /park/1.txt查看HDFS上某个文件的大小。也可以查看指定目录,如果是目录的话,则列出目录下所有的文件及其大小,比如:hadoop fs -du /parkhadoop fs -copyFromLocal /home/1.txt /park01将本地文件1.txt上传到/park01目录下hadoop fs -copyToLocal /park01/1.txt /home将HDFS上的1.txt 拷贝到本地文件系统hadoop fs -lsr /递归查看指定目录下的所有内容本文发布于:2023-06-04 07:20:20,感谢您对本站的认可!
本文链接:http://www.ranqi119.com/ge/85/214401.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |