[TOC]
上一份工作主要负责大数据平台的建设,在这个过程中积累了一些Hadoop生态组件的搭建和使用笔记,由于时间关系,不打算去修改其中的错别字和排版问题,直接释出原始笔记。
搭建安装
三个核心组件
一个hadoop基本集群,牵涉三个组件:
- hdfs 负责分布式的文件存储
- yarn 负责分布式的资源管理
- mr 负责分布式计算
安装
配置环境变量
配置etc/hadoop/hadoop-env.sh、etc/hadoop/hadoop-env.sh、etc/hadoop/yarn-env.sh 这三个脚本来配置三个组件执行的环境变量 当然,机器特定的环境变量可以放在 /etc/profile.d 中
最重要的是在上述三个shell脚本的最后,配置JAVA_HOME。 上述三个shell中,有大量环境变量KEY可以配置,他们一般见名知意。可以使用一些带OPTS后缀的配置,去覆盖那些特定配置。带OPTS的后缀有
比如HADOOP_HEAPSIZE_MAX=1g 可以被HADOOP_NAMENODE_OPTS="-Xmx5g" 所覆盖
配置各上述三组件守护进程的相关属性
上述环境变量配置好后,就要配置hdfs, yarn, mr三者的进程,即程序执行的行为属性。其分别对应的配置文件为
- etc/hadoop/core-site.xml 、etc/hadoop/hdfs-site.xml 用于给hdfs配置
- etc/hadoop/yarn-site.xml 用于给yarn配置
- etc/hadoop/mapred-site.xml 用于给mr配置 具体看文档即可,这里对一些有意思的配置单列说明
hdfs的配置
- dfs.namenode.name.dir namenode的数据存储路径,多个文件,表示数据存多份,提高冗余
yarn的配置
- yarn.log-aggregation-enable 启动log aggregation,这会将yarn集群中执行应用的本地日志,复制到hdfs集群中进行高可用管理
启停
可以针hdfs,mr,yarn三个组件的各角色进行启动。
其中Hdfs的各角色,可以使用etc/hadoop/workers
配置,通过$HADOOP_HOME/sbin/start-dfs.sh
批量启动。
具体启停看文档
监控和性能
Hadoop Rack Awareness
Hadoop Rack Awareness,启用该特性,让Hadoop集群感知物理存储拓扑,从而更好的提高数据分片性能,具体看文档
yarn的NodeManagers监控
可以指定一些监控nodeManager状态的脚本给NodeManager, NodeManager会周期性的调用,检查自己的状态,yarn则会收集该状态,然后不会将程序分发到这些异常NodeManager上执行
命令
文档地址:https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/FileSystemShell.html
hdfs的命令
如果hadoop操作的是hdfs,那么下面两种命令格式等效
bin/hadoop fs <args>
hdfs dfs <args>
hadoop fs的相关命令支持多种文件系统
- hdfs hadoop自己的分布式文件系统
- Local FS 本地文件系统,即为当前机器的文件系统
- WebHDFS
- S3 FS 亚马逊的分布式文件系统
hadoop fs命令一般操作的文件系统路径格式URI为scheme://authority/path
,比如hdfs举例hdfs://namenodehost/parent/child
appendToFile
将本地单个文件或多个文件,或则本机的标准输入中的内容,拷贝到目标文件系统 用法:hadoop fs -appendToFile <localsrc> ... <dst>
hadoop fs -appendToFile localfile /user/hadoop/hadoopfile
hadoop fs -appendToFile localfile1 localfile2 /user/hadoop/hadoopfile
hadoop fs -appendToFile localfile hdfs://nn.example.com/hadoop/hadoopfile
hadoop fs -appendToFile - hdfs://nn.example.com/hadoop/hadoopfile Reads the input from stdin.
Returns 0 on success and 1 on error.
cat
将文件系统中指定文件内容输出到终端 用法:hadoop fs -cat [-ignoreCrc] URI [URI ...]
hadoop fs -cat hdfs://nn1.example.com/file1 hdfs://nn2.example.com/file2
hadoop fs -cat file:///file3 /user/hadoop/file4
Returns 0 on success and -1 on error
checksum
对指定文件生成checksum值 用法:hadoop fs -checksum URI
hadoop fs -checksum hdfs://nn1.example.com/file1
hadoop fs -checksum file:///etc/hosts
chgrp
改变文件的组 用法:hadoop fs -chgrp [-R] GROUP URI [URI ...]
- 其中-R是表示将该路径下的所有文件组都修改
- GROUP是要修改成的组
- URI是文件或文件夹的路径
- 该命令只有管理员或当前文件的拥着才能执行
chmod
改变文件的读写执行模式 用法:hadoop fs -chmod [-R] <MODE[,MODE]... | OCTALMODE> URI [URI ...]
- 其中-R是表示将该路径下的所有文件组都修改
- 该命令只有管理员或当前文件的拥着才能执行
todo:具体mod详情,需要再查阅
chown
改变文件的拥有者 用法:hadoop fs -chown [-R] [OWNER][:[GROUP]] URI [URI ]
- 其中-R是表示将该路径下的所有文件组都修改
- 该命令只有管理员或当前文件的拥着才能执行
copyFromLocal
将当前机器本地文件,拷贝到分布式文件系统 用法:hadoop fs -copyFromLocal [args] <localsrc> URI
其中命令参数有以下几个,都是可选
- -p复制到分布式文件系统的文件保留原文件的修改时间、权限、所有者信息
- -f 如果分布式文件系统已经存在该文件,则覆盖
- -l 允许DataNode延迟持久化该文件,replication factor 是1. 也即这种方式不会要去数据马上落地和写副本,具有丢数据的风险,但是写入速度可能会很快
- -d 文件复制过程中,将不会创建后缀为
._COPYING_
格式的文件
copyToLocal
将分布式文件系统中的文件拷贝到本地
count
同进指定路径的文件、文件夹个数、当前文件占用量大小、指定路径允许创建的文件、文件夹个数,以及允许的最大文件、文件容量 用法:hadoop fs -count [-q] [-h] [-v] [-x] [-t [<storage type>]] [-u] [-e] <paths>
如果只用quota,而不加任何以下且与参数,则输出的统计项有
DIR_COUNT(当前路径的文件夹个数), FILE_COUNT(文件个数), CONTENT_SIZE(容量占用大小), PATHNAME(当前统计的路径)
- -h 将容量以人方便读的方式展示,建议开启
- -v 对统计的内容,输出表头,方便用户知道统计中某列是什么含义,建议开启
- -q 代表quota, 能够统计出指定路径的name quota和space quota。 输出的列有
QUOTA(总的name quota的大小), REMAINING_QUOTA(还剩name quota的大小), SPACE_QUOTA(space quota的大小), REMAINING_SPACE_QUOTA(还剩的space quota的大小), DIR_COUNT, FILE_COUNT, CONTENT_SIZE, PATHNAME
- -u 跟-q一样,也是统计容量配合总计和剩余配合,只是不再输出-count默认的那些项。-u的输出列为:
QUOTA, REMAINING_QUOTA, SPACE_QUOTA, REMAINING_SPACE_QUOTA, PATHNAME
- -e hadoop3.0引入的,文件擦除策略,需要再查资料解读
demo举例
hadoop fs -count hdfs://nn1.example.com/file1 hdfs://nn2.example.com/file2
hadoop fs -count -q hdfs://nn1.example.com/file1
hadoop fs -count -q -h hdfs://nn1.example.com/file1
hadoop fs -count -q -h -v hdfs://nn1.example.com/file1
hadoop fs -count -u hdfs://nn1.example.com/file1
hadoop fs -count -u -h hdfs://nn1.example.com/file1
hadoop fs -count -u -h -v hdfs://nn1.example.com/file1
hadoop fs -count -e hdfs://nn1.example.com/file1
对于quota(配额)的说明:
- name quota 以指定路径做为根路径的整颗文件树上允许创建的文件、文件夹名称的总体个数
- space quota 以指定路径做为根路径的整颗文件树上允许创建的文件、文件夹的总体字节数
使用hadoop fs -count -q
命令查询配合时,如果配额没有设置,会显示none
或inf
可以使用hdfs dfsadmin
命令对某个指定路径设置配额
cp
将一个文件或多个文件拷贝到另一个地方。 拷贝当个文件时,目的地可以是另一个文件,也可以是文件夹 拷贝多个文件时,目的地必须是文件夹 用法:hadoop fs -cp [-f] [-p | -p[topax]] URI [URI ...] <dest>
- -f参数加上时,目的地有该文件,则会将其覆盖
df
查询某个指定路径的剩余容量 用法:hadoop fs -df [-h] URI [URI ...]
- -h是人可读的形式
df是看的整个文件系统的使用情况和可用空间 而-count是计算指定目录的空间占用情况,以及管理员给分配的配合使用情况
du
查看指定路径的文件和文件夹大小汇总
find
查找指定路径下,名字满足表达式的文件,并打印到终端 hadoop fs -find / -name test -print
-name 对文件名大小写敏感 -inam