You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:编写Bash脚本将Hadoop DistCp日志写入Hive表

实现DistCp日志写入Hive表的Bash脚本方案

直接给你整合好的脚本,再拆解关键步骤,你照着改参数就能用:

完整脚本示例

#!/bin/bash

# -------------------------- 配置区 --------------------------
# 替换成你的源路径、目标路径
SRC_PATH="/hdfs/source/dir"
DST_PATH="/hdfs/target/dir"
# 替换成你的Hive库表名(比如log_db.distcp_job_logs)
HIVE_LOG_TABLE="your_db.distcp_job_logs"
# 临时日志文件,用来提取Job ID和应用URL
TEMP_LOG="/tmp/distcp_temp_$(date +%s).log"
# -----------------------------------------------------------

# 记录任务开始时间(格式和Hive的timestamp匹配)
START_TIME=$(date +"%Y-%m-%d %H:%M:%S")

# 执行DistCp,把所有输出存到临时文件
hadoop distcp "$SRC_PATH" "$DST_PATH" > "$TEMP_LOG" 2>&1

# 判断任务执行状态:0=成功,非0=失败
EXIT_STATUS=$?
STATUS=$([ $EXIT_STATUS -eq 0 ] && echo "SUCCESS" || echo "FAILED")

# 从临时日志提取Job ID(根据你的DistCp输出格式调整正则)
JOB_ID=$(grep -o "Job ID: job_[0-9]*_[0-9]*" "$TEMP_LOG" | awk '{print $3}')
# 提取YARN应用URL(如果输出里没有完整URL,就自己拼前缀,比如http://yarn-host:8088/proxy/)
APP_URL=$(grep -o "http://.*:8088/proxy/application_[0-9]*_[0-9]*" "$TEMP_LOG")

# 处理变量中的单引号(避免Hive插入时语法报错)
escape_quotes() {
    echo "$1" | sed "s/'/\\\'/g"
}
SRC_ESC=$(escape_quotes "$SRC_PATH")
DST_ESC=$(escape_quotes "$DST_PATH")
APP_URL_ESC=$(escape_quotes "$APP_URL")
JOB_ID_ESC=$(escape_quotes "$JOB_ID")

# 执行Hive插入语句
hive -e "INSERT INTO TABLE $HIVE_LOG_TABLE
VALUES (
    '$SRC_ESC',
    '$DST_ESC',
    '$START_TIME',
    '$STATUS',
    '$APP_URL_ESC',
    '$JOB_ID_ESC'
)"

# 清理临时文件
rm -f "$TEMP_LOG"

关键步骤拆解

1. 变量定义与初始化

  • 提前配置好源路径、目标路径和Hive表名,方便后续修改
  • 用date +"%Y-%m-%d %H:%M:%S"生成符合Hive timestamp格式的开始时间

2. 执行DistCp并捕获状态

  • 把DistCp的输出重定向到临时文件,方便后续提取Job ID和应用URL
  • 通过$?获取命令退出码,直接映射成SUCCESS/FAILED状态

3. 提取Job ID和应用URL

  • 用grep -o匹配日志中的关键内容,再用awk提取具体值
  • 如果你的DistCp输出格式和示例不一样,调整grep的正则即可(比如有些版本会输出Submitted application application_xxxx,那提取应用ID后自己拼YARN前缀)

4. 处理特殊字符

  • 路径或URL里如果有单引号,会导致Hive语句语法错误,用sed把单引号转义成\'

5. 插入Hive表

  • 用hive -e直接执行插入SQL,把Bash变量用单引号包裹代入即可;如果用Beeline连接Hive,把hive -e换成beeline -u "jdbc:hive2://host:port/db" -n 用户 -p 密码 -e "..."

内容的提问来源于stack exchange,提问作者yurkaishere

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 13:20:08