Nutch
Doug cutting 花费了自己的两年业余时间,将论文实现了出来
Hadoop
网址:
http://hadoop.apache.org/
https://archive.apache.org/dist/hadoop/common/hadoop-3.1.2/
FS File System
DFS ( Distributed File System)
DFS出现的原因
文件存的原因
解决办法
切分数据
对字节数组进行切分
字节数组
拼接数据
数据存储的原理
主机\Hadoop节点 | NameNode | SecondaryNameNode | DataNode |
---|---|---|---|
node01 | √ | √ | |
node02 | √ | √ | |
node03 | √ |
[root@node01 ~]# tar -zxvf hadoop-3.1.2.tar.gz
[root@node01 ~]# mkdir -p /opt/yjx/
[root@node01 ~]# mv hadoop-3.1.2 /opt/yjx/
[root@node01 ~]# cd /opt/yjx/hadoop-3.1.2/etc/hadoop/
[root@node01 hadoop]# vim hadoop-env.sh
#直接在文件的最后添加
export JAVA_HOME=/usr/java/jdk1.8.0_231-amd64
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
[root@node01 hadoop]# vim core-site.xml
<configuration>
<property>
<name>fs.defaultFSname>
<value>hdfs://node01:9000value>
property>
<property>
<name>hadoop.tmp.dirname>
<value>/var/yjx/hadoop/fullvalue>
property>
configuration>
[root@node01 hadoop]# vim hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.secondary.http-addressname>
<value>node02:50090value>
property>
<property>
<name>dfs.namenode.secondary.https-addressname>
<value>node02:50091value>
property>
<property>
<name>dfs.replicationname>
<value>2value>
property>
configuration>
[root@node01 hadoop]# vim workers
node01
node02
node03
将配置好的软件分发到其他主机
[root@node02 ~]# scp -r root@node01:/opt/yjx/hadoop-3.1.2 /opt/yjx/
[root@node03 ~]# scp -r root@node01:/opt/yjx/hadoop-3.1.2 /opt/yjx/
[root@node01 hadoop]# vim /etc/profile
export HADOOP_HOME=/opt/yjx/hadoop-3.1.2
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
将环境变量拷贝到其他主机
[root@node01 yjx]# scp /etc/profile root@node02:/etc/profile
[root@node01 yjx]# scp /etc/profile root@node03:/etc/profile
重新加载三台服务器的环境变量
【123】# source /etc/profile
hdfs dfs -mkdir -p /yjx
图片结果显示:
本地上传文件测试
hdfs dfs -put zookeeper-3.4.5.tar.gz /yjx/
关闭集群
[root@node01 ~]# stop-dfs.sh
关机然后拍摄快照
[123]# shutdown -h now
Hadoop fs
该命令可以用于其他文件系统,不止是hdfs文件系统内,也就是说该命令的使用范围更广
Hadoop dfs
专门针对hdfs分布式文件系统
hdfs dfs(推荐)
介绍
官方命令文档
常见命令
1 hadoop fs -ls <path> 列出指定目录下的内容,支持pattern匹配。输出格式如filename(full
path)<r n>size.n代表备份数。
2 hadoop fs -lsr <path> 递归列出该路径下所有子目录信息
3 hadoop fs -du<path>显示目录中所有文件大小,或者指定一个文件时,显示此文件大小
4 hadoop fs -dus<path>显示文件大小 相当于 linux的du -sb s代表显示只显示总计,列出最后的和 b代表显示文件大
小时以byte为单位
5 hadoop fs -mv <src> <dst> 将目标文件移动到指定路径下,当src为多个文件,dst必须为目录
6 hadoop fs -cp <src> <dst>拷贝文件到目标位置,src为多个文件时,dst必须是个目录
7 hadoop fs -rm [skipTrash] <src>删除匹配pattern的指定文件
8 hadoop fs -rmr[skipTrash] <src>递归删除文件目录及文件
9 hadoop fs -rmi [skipTrash] <src>为了避免误删数据,加了一个确认
10 hadoop fs -put <> ... <dst>从本地系统拷贝到dfs中
11 hadoop fs -copyFromLocal<localsrc>...<dst>从本地系统拷贝到dfs中,与-put一样
12 hadoop fs -moveFromLocal <localsrc>...<dst>从本地系统拷贝文件到dfs中,拷贝完删除源文件
13 hadoop fs-get [-ignoreCrc] [-crc] <src> <localdst> 从dfs中拷贝文件到本地系统,文件匹配
pattern,若是多个文件,dst必须是个目录14 hadoop fs -getmerge <src> <localdst>从dfs中
拷贝多个文件合并排序为一个文件到本地文件系统15 hadoop fs -cat <src>输出文件内容16 hadoop
fs -copyTolocal [-ignoreCre] [-crc] <src> <localdst>与 -get一致17 hadoop fs -mkdir
<path>在指定位置创建目录18 hadoop fs -setrep [-R] [-w] <rep> <path/file>设置文件的备份
级别,-R标志控制是否递归设置子目录及文件19 hadoop fs -chmod [-R]
<MODE[,MODE]...|OCTALMODE>PATH修改文件权限, -R递归修改 mode为a+r,g-w,+rwx ,octalmode
为75520 hadoop fs -chown [-R] [OWNER][:[GROUP]] PATH递归修改文件所有者和组21 hadoop
fs -count[q] <path>统计文件个数及占空间情况,输出表格列的含义分别为:
DIR_COUNT.FILE_COUNT.CONTENT_SIZE.FILE_NAME,如果加-q 的话,还会列出
QUOTA,REMAINING_QUOTA,REMAINING_SPACE_QUOTA
-mkdir 创建目录 hdfs dfs -mkdir [-p] < paths>
-ls 查看目录下内容,包括文件名,权限,所有者,大小和修改时间 hdfs dfs -ls [-R] <
args>
-put 将本地文件或目录上传到HDFS中的路径 hdfs dfs -put < localsrc> … < dst>
-get 将文件或目录从HDFS中的路径拷贝到本地文件路径 hdfs dfs -get [-ignoreCrc] [-crc]
< src> < localdst>
选项:-ignorecrc选项复制CRC校验失败的文件。-crc选项复制文件和CRC。
-du 显示给定目录中包含的文件和目录的大小或文件的长度,用字节大小表示。 hdfs dfs -du [-
s] [-h] URI [URI …] 选项:-s选项将显示文件长度的汇总摘要,而不是单个文件。-h选项将以“人可
读”的方式格式化文件大小(例如64.0m而不是67108864);第一列标示该目录下总文件大小,第二列标示该
目录下所有文件在集群上的总存储大小和你的副本数相关(第二列内容=文件大小*副本数),第三列标示你查
询的目录
-dus 显示文件长度的摘要。 hdfs dfs -dus < args> 注意:不推荐使用此命令。而是使用
hdfs dfs -du -s。
-mv 在HDFS文件系统中,将文件或目录从HDFS的源路径移动到目标路径。不允许跨文件系统移动文件。
-cp 在HDFS文件系统中,将文件或目录复制到目标路径下 hdfs dfs -cp [-f] [-p | -p
[topax] ] URI [ URI …] < dest> 选项:-f选项覆盖已经存在的目标。-p选项将保留文件属性
[topx](时间戳,所有权,权限,ACL,XAttr)。如果指定了-p且没有arg,则保留时间戳,所有权和权
限。如果指定了-pa,则还保留权限,因为ACL是一组超级权限。确定是否保留原始命名空间扩展属性与-p标
志无关。
-copyFromLocal 从本地复制文件到hdfs文件系统(与-put命令相似)hdfs dfs -copyFromLocal <
localsrc> URI 选项:如果目标已存在,则-f选项将覆盖目标。
-copyToLocal 复制hdfs文件系统中的文件到本地 (与-get命令相似) hdfs dfs -
copyToLocal [-ignorecrc] [-crc] URI < localdst>
-rm 删除一个文件或目录 hdfs dfs -rm [-f] [-r|-R] [-skipTrash] URI [URI …] 选
项:如果文件不存在,-f选项将不显示诊断消息或修改退出状态以反映错误。-R选项以递归方式删除目录及其
下的任何内容。-r选项等效于-R。-skipTrash选项将绕过垃圾桶(如果已启用),并立即删除指定的文件。
当需要从超配额目录中删除文件时,这非常有用。
-cat 显示文件内容到标准输出上。 hdfs dfs -cat URI [URI …]
-text 获取源文件并以文本格式输出文件。允许的格式为zip和TextRecordInputStream。 hdfs
dfs -text
-touchz 创建一个零长度的文件。 hdfs dfs -touchz URI [URI …]
-stat 显示文件所占块数(%b),文件名(%n),块大小(%n),复制数(%r),修改时间(%y%Y) hdfs
dfs -stat URI [URI …]
-tail 显示文件的最后1kb内容到标准输出 hdfs dfs -tail [-f] URI 选项: -f选项将
在文件增长时输出附加数据,如在Unix中一样。
-count 统计与指定文件模式匹配的路径下的目录,文件和字节数 hdfs dfs -count [-q] [-h]
< paths>
-getmerge 将源目录和目标文件作为输入,并将src中的文件连接到目标本地文件(把两个文件的内容合
并起来) hdfs dfs -getmerge < src> < localdst> [addnl] 注:合并后的文件位于当前目
录,不在hdfs中,是本地文件
-grep 从hdfs上过滤包含某个字符的行内容 hdfs dfs -cat < srcpath> | grep 过滤字段
-chown hdfs上文件权限修改 hadoop fs -chown [-R] [OWNER][:[GROUP]] URI [URI ]#修
改文件的所有者 例如:hdfs dfs -chown -R Administrator:Administrator /user/
-distcp 最常用在集群之间的拷贝:hadoop distcp hdfs://master1:8020/foo/bar
hdfs://master2:8020/bar/foo
元数据
File 文件名
Size 文件大小(字节)
Blocks 文件使用的数据块总数
IO Block 数据块的大小
regular file:文件类型(常规文件)
Device 设备编号
Inode 文件所在的Inode
Links 硬链接次数
Access 权限
Uid 属主id/用户
Gid 属组id/组名
Access Time:简写为atime,表示文件的访问时间。当文件内容被访问时,更新这个时间
Modify Time:简写为mtime,表示文件内容的修改时间,当文件的数据内容被修改时,更新这个
时间。
Change Time:简写为ctime,表示文件的状态时间,当文件的状态被修改时,更新这个时间,例
如文件的链接数,大小,权限,Blocks数。
文件数据
当客户端访问HDFS的时候,都会通过NN获取或者是生成BLK对应的DN信息,但是真实存储或者读取数据的时候,都是客户端直接去DN建立连接
NameNode存放文件与Block的映射关系
NameNode会记录Block与DataNode的映射关系,但是不会持久化存储
存放数据文件
汇报
注意:
当客户端读写数据的时候,首先去NN查询文件的Block与DN的映射
然后客户端直接与DN建立连接,然后读写数据
对于NameNode出现问题的时候可以进行恢复NameNode信息的解决方案
日志记录
拍摄快照
NameNode将元数据存储到磁盘上的图解
NameNode的存储方式存在的问题
由于这些传统的解决方案出现的问题,于是出现了SNN的解决方案
解决思路
什么是SNN节点
SecondaryNameNode节点的主要功能是周期性将元数据节点的镜像文件和修改日志进行合并,以防日志文件过大
没有格式化id之前的数据信息
强行杀死NameNode节点
清空namenode下name中的fsimage和edtis文件
[root@node01 ~]# rm -rf /var/yjx/hadoop/full/dfs/name/current/*
node02中的secondarynamenode下的name中的fsimage和edits复制到namenode对应文件夹中
[root@node01 current]# scp -r root@node02:/var/yjx/hadoop/full/dfs/namesecondary/current/* /var/yjx/hadoop/full/dfs/name/current/
启动NameNode
start-dfs.sh
访问namenode节点页面,成功
但同时有部分数据丢失
丢失的数据为一个文件等分大小后的最后一部分的不完整的Block块