HDFS
常用命令
hdfs dfs == hadoop fs
# 查看已用空间hdfs dfs-du1. hdfs dfs-du-s-h/testyan_project# 查看总大小2. hdfs dfs-du-h/testyan_project# 列出每个文件和目录的大小# 查看配额(允许使用的最大空间)hdfs dfs-count-q3. hdfs dfs-count-q-v-h/testyan_project# | QUOTA | REM_QUOT | SPACE_QUOTA | REM_SPACE_QUOTA | DIR_COUNT | FILE_COUNT | CONTENT_SIZE | PATHNAME |# | none | inf | 6T | 940.9G | 9 | 16.9K | 2.5T | /testyan_project |# QUOTA 和 REM_QUOTA 代表命名配额、剩余命名配置,none和inf代表无限制;# SPACE_QUOTA 和 REM_SPACE_QUOTA 代表空间配额、剩余空间配额,总共6T,剩余940G空间可用;# CONTENT_SIZE 代表当前已使用的空间大小;# 将文件推送到hdfs中4. hdfs dfs-put{file}/testyan_project# 删除到hdfs中的文件5. hdfs dfs-rm/testyan_project/{file}HDFS Web UI
http://{NN_ip}:9870查看hdfs文件系统情况。
配置文件
${HADOOP_HOME}/etc/hadoop/ ├── core-site.xml# 全局配置├── hdfs-site.xml# HDFS 专属配置├── workers# DataNode 节点列表└── hadoop-env.sh# 环境变量启停服务
# 主节点执行以下命令是对所有节点的操作${HADOOP_HOME}/sbin/start-dfs.sh# 启动hdfs(NameNode、DataNode)# 单节点启停# 启动namenode${HADOOP_HOME}/sbin/hadoop-daemon.sh start/stop namenode# 启动datanode${HADOOP_HOME}/sbin/hadoop-daemon.sh start/stop datanodeYARN
YARN Web UI
http://{RM_ip}:8088/cluster# 查看作业调度情况、可跳转到作业运行日志页面Spark on YARN 部署模式下,Spark 没有需要启动/停止的常驻进程,只有作业运行时的临时 Container 进程,完全依赖 YARN 的资源管理。
- yarn8088管理资源(给多少cpu、内存等),spark计算框架;
- yarn8088有ApplicationMaster(Driver)日志,spark有Executor和任务级别日志;
- YARN 8088是"资源调度中心",Spark是"任务执行监控"。Spark作业运行在 YARN上时,YARN提供资源,Spark执行计算,二者通过 ApplicationMaster 链接互通。
日志查看: 作业若是driver正常,executor失败,正常点击history查看作业日志; 若是driver失败,则点击history后,需将网址yarn:8088->spark_history_ip:18080再查看;(spark_history_ip和yarn的RM可能是同一个ip)扩展内容(以下均为AI,侵删)
spark的部署方式:Spark Standalone 模式、Spark on Mesos 模式、Spark on Kubernetes 模式(k8s主流)、Spark on YARN模式;以Spark on YARN模式举例,driver的运行模式如下表格:
| 模式 | Driver 在哪里 | ApplicationMaster 是什么 | YARN 8088 看到的 AM 日志 |
|---|---|---|---|
| yarn-cluster | 在 AM 容器内 | AM 内运行 Driver,AM 和 Driver 基本是同一个 JVM/容器 | AM 日志通常就是 Driver 日志 |
| yarn-client | 在提交作业的客户端机器上 | AM 只是ExecutorLauncher,负责申请 Executor | AM 日志不是 Driver 日志,Driver 日志在客户端 |
YARN 的 ResourceManager(Web UI 8088)是集群资源调度中心;ApplicationMaster 是每个 YARN 应用的“代理人”;Spark Driver 是 Spark 应用的大脑;Executor 是干活的工人。cluster 模式下 Driver 住在 ApplicationMaster 容器里,所以 AM 日志约等于 Driver 日志;client 模式下 Driver 在客户端,AM 不是 Driver。
Spark on YARN 大致流程:
1、提交 Spark 应用;
2、RM 分配一个容器,启动 ApplicationMaster;
3、cluster 模式下,AM 内启动 Spark Driver;
4、Driver / AM 向 RM 申请 Executor 容器;
5、RM 把容器分配给 NodeManager;
6、NodeManager 启动 Executor;
7、Executor 向 Driver 注册;
8、Driver 把 Task 调度到 Executor;
9、Executor 执行 Task,向 Driver 汇报;
10、应用完成后,AM 注销,资源释放;
配置文件
${HADOOP_HOME}/etc/hadoop/ ├── yarn-site.xml# YARN 配置├── workers# NodeManager 节点列表(同HDFS)└── mapred-site.xml# MapReduce 配置(如果用到)启停服务
# 主节点执行以下命令是对所有节点的操作${HADOOP_HOME}/sbin/start-yarn.sh# 启动yarn(ResourceManager、NodeManager)# 单节点启停# 启动resourcemanager${HADOOP_HOME}/sbin/yarn-daemon.sh start resourcemanager# 启动nodemanager${HADOOP_HOME}/sbin/yarn-daemon.sh start nodemanageryarn日志存储和自动清理
Yarn的应用程序日志主要存储在:
本地磁盘:NodeManager节点的本地目录(yarn.nodemanager.log-dirs)
文件系统(HDFS/NFS):如果启用了日志聚合(默认启用)
resourcemanager节点,vi $HADOOP_HOME/etc/hadoop/yarn-site.xml, 有2个关键配置项:
yarn.log-aggregation-enable --默认true,代表启动聚合日志 yarn.nodemanager.remote-app-log-dir ---配置聚合日志的路径当启动聚合日志后,会收集每个nodemanager节点的日志到一个指定的文件系统上,如HDFS或NFS。
# 可以通过ResourceManager Web UI查看全量配置项,1.resourcemanager配置项查看: ResourceManager Web UI → Tools → 查看Configuration http//:{resourcemanagerIp}:8088/conf2.nodemanager配置项查看: ResourceManager Web UI → Nodes → 点击NodeManager → 查看Configuration http//:{nodemanagerIp}:8042/conf注意事项
yarn.log.dir来自于yarn-default.xml文件, 这个xml不是一个独立的文件,而是被“藏”在了 Hadoop 的 Jar 包里,我们可以去计算节点查询ps -ef|grep NodeManager,这个启动脚本中显示了yarn.log.dir的值。
当SPARK计算框架存在时,spark的默认存储spark.yarn.app.container.log.dir配置项是$HADOOP_HOME/logs/userlogs,这个会覆盖网页中你看到的yarn.nodemanager.log-dirs路径!(它俩大多时候是同一个值)
日志清理逻辑配置
vi $HADOOP_HOME/etc/hadoop/yarn-site.xml
<!-- 本地日志保留时间(秒) --><property><name>yarn.nodemanager.log.retain-seconds</name><value>604800</value><!-- 默认7天 --></property><!-- 是否启用日志聚合 --><property><name>yarn.log-aggregation-enable</name><value>true</value></property><!-- 聚合日志在HDFS或NFS的保留时间(秒) --><property><name>yarn.log-aggregation.retain-seconds</name><value>2592000</value><!-- 默认30天 --></property><!-- 聚合日志检查间隔(秒) --><property><name>yarn.log-aggregation.retain-check-interval-seconds</name><value>-1</value><!-- 默认-1(0.1 * retain-seconds) --></property><!-- 本地日志删除延迟(秒) --><property><name>yarn.nodemanager.delete.debug-delay-sec</name><value>0</value><!-- 默认为0,立即删除 --></property>| 配置项 | 存储位置 | 存储内容 | 生命周期 |
|---|---|---|---|
| yarn.nodemanager.local-dirs | NodeManager | /data1/yarn | 任务运行的中间临时数据(shuffle数据等) 临时,任务结束后即清理 计算任务的本地工作空间 |
| hadoop.tmp.dir | NodeManager | /data1/yarn/hadoop-tmp | Hadoop各组件的通用临时文件 临时 其他组件(如HDFS、MapReduce)的临时文件基础目录 |
| yarn.nodemanager.log-dirs | NodeManager | ${yarn.log.dir}/userlogs | 任务的本地运行日志(stdout/stderr等) 临时,可配置保留时长 供调试或实时查看任务日志 |
| yarn.nodemanager.remote-app-log-dir | HDFS(或其他分布式存储NFS等) | file://xxx/yarnlogs | 任务日志聚合后的最终存储路径 永久(除非手动清理) 集中存储所有任务的日志,供历史查询 |
SPARK
部署spark服务的节点就是集群的计算节点,每个计算节点都需要配置yarn服务,但是配置了yarn可以不作为计算节点;
上述提到的spark_history_ip:18080就是spark日志网页;
计算节点上的配置文件路径:$SPARK_HOME/conf/spark-defaults.conf
提交作业脚本文件路径: $SPARK_HOME/bin/spark-submit
spark日志目录
spark.eventLog.dir file:///autofs/xxx/sparklog
Spark History Server服务是用于显示这个日志,它的配置项spark.history.fs.logDirectory必须和spark.eventLog.dir的路径指向一致!(该服务只需要在spark-submit提交作业(Driver端)的节点部署,不要在多个计算节点重复部署)
# Spark History Server服务启停,只需要在driver端节点重启:$SPARK_HOME/sbin/stop-history-server.sh$SPARK_HOME/sbin/start-history-server.sh配置spark作业的重试逻辑
| 配置项 | 含义 | 作用层级 | 生效范围 |
|---|---|---|---|
| spark.yarn.maxAppAttempts | YARN Application的最大尝试次数 | Application级别 | YARN ResourceManager决定是否重试 |
| spark.yarn.max.executor.failures | 允许的Executor失败的最大数量 | Application内部 | Spark Driver决定何时杀死整个应用 |
| spark.task.maxFailures | 单个Task失败的最大重试次数 | Task/Stage级别 | Spark Scheduler决定何时标记Task/Stage失败 |
如不想要作业失败重试,将spark.yarn.maxAppAttempts配置为1。该配置只需要在driver端节点配置;
配置sparklog的自动清理逻辑($SPARK_HOME/conf/spark-env.sh文件)
| 配置项 | 含义 | 建议值 |
|---|---|---|
| spark.history.fs.cleaner.enabled | 是否启用历史文件自动清理 | true |
| spark.history.fs.cleaner.interval | 清理任务执行间隔 | 1d |
| spark.history.fs.cleaner.maxAge | 事件日志最大保留时间 | 7d |
| spark.history.fs.cleaner.maxNum | 最多保留的作业日志数 | 1500-2000 |
| spark.history.retainedApplications | Web控制Spark历史作业显示数(http://{spark_history_ip}:18080/) | 1000 |
这些配置是控制 spark.eventLog.dir 目录日志。
注意这里的web显示不是yarn上的web显示,yarn上的显示数量由yarn-site.xml中yarn.resourcemanager.max-completed-applications字段控制,yarn读取的是yarn.nodemanager.remote-app-log-dir配置的日志,是上述提到的聚合日志,而spark读取的是事件日志(结构化数据)。
两个独立的存储系统,但Spark History依赖YARN来获取容器日志,所以YARN保留时间应该≥Spark保留时间。
HBASE
分布式NoSQL数据库,基于Hadoop的HDFS存储数据。
硬盘——>HDFS(底层物理存储层)——>HBASE(数据管理/访问层),数据以HFile二进制格式存储在HDFS上,HBASE负责数据组织、缓存、索引、读写接口等。研发人员必须通过 HBase API操作数据,不能直接读写HDFS。
常用命令
ssh{hbase ip}# 访问hbase节点hbase shell# 进入shelllist# 查看所有表,只有表名信息describe'表名'# 查看表结构,如describe '_testyanproject_testyan_ORDER_25_num_spark'scan'表名'# 查看表内容,不推荐(内容很多)退出hbase shell,由于HBase表在HDFS上有对应的目录,可通过查看HDFS目录的创建时间来近似了解表的创建时间。
hdfs dfs-ls/hbase/data/default/表名HMaster Web UI
http://{hbase_ip}:16010/可查看集群状态是否正常、启动时间、HRegionServer数量、Memory大小、所有表信息等;
配置文件
${HBASE_HOME}/conf/hbase-site.xml# HBase 核心配置(包含节点信息)${HBASE_HOME}/conf/regionservers# RegionServer 节点列表启停服务
# 主节点执行以下命令是对所有节点的操作(zk除外)# 启动顺序:HDFS → ZooKeeper → HBase${HADOOP_HOME}/sbin/start-dfs.sh# 启动hdfs(NameNode、DataNode)${ZOOKEEPER_HOME}/bin/zkServer.sh start# 启动zookeeper(QuorumPeerMain)${HBASE_HOME}/bin/start-hbase.sh# 启动hbase(HMaste、HRegionServer)# 停止顺序:HBase → ZooKeeper → HDFS${HBASE_HOME}/bin/stop-hbase.sh# 停止hbase${ZOOKEEPER_HOME}/bin/zkServer.sh stop# 停止zookeeper${HBASE_HOME}/sbin/stop-dfs.sh# 停止hdfs# 单节点启停# 启停master(进程名:HMaster)hbase-daemon.sh start/stop master# 启停regionserver(进程名:HRegionServer)hbase-daemon.sh start/stop regionserver异常问题处理
有一次出现启动hbase后,过1min HMASTER又自动停掉,排查发现是hdfs的active节点不正确
# 谨慎使用!!!hdfs haadmin-transitionToActive{hdfs_ip}# 强制将一个节点设置为hdfs的namenode active# 查询active状态已设置正确http://{hdfs_ip}:9870# 再重新启动start-hbase.sh,启动后检查hbase状态http://{hbase_ip}:16010/master-statushadoop集群环境运维时节点免密配置
更新环境时若需输入密码,通过以下命令这个给节点做免密
foripinhost{201..300};doecho$ip;sshpass-p'password'ssh-copy-id hadoop@$ip;done或者直接拷贝.ssh目录 (以下root可换为任意用户)
rsync-ral/root/.ssh$ip:/root/