集群运行脚本遇到的坑


一、数据导入脚本

第一个坑:日志数据导入到了 ODS 层,而 ODS 层清洗完没数据?

这个问题可以通过创建一个新的表来解决 👇

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
CREATE TABLE ods.app_event_log2 (
account STRING,
appid STRING,
appversion STRING,
carrier STRING,
deviceid STRING,
devicetype STRING,
eventid STRING,
ip STRING,
latitude DOUBLE,
longitude DOUBLE,
nettype STRING,
osname STRING,
osversion STRING,
properties MAP<STRING, STRING>,
releasechannel STRING,
resolution STRING,
sessionid STRING,
`timestamp` BIGINT
)
PARTITIONED BY (dt STRING)
ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe'
STORED AS TEXTFILE;

然后上传数据到hdfs

1
2
3
4
5
6
假如直接输入以下命令,直接入坑
hdfs dfs -put app.access.log.2025-06-21 /logdata/app/2025-08-30
不会帮你创建文件夹的,而是将文件直接命名为2025-08-30
需要先创建文件夹:
hdfs dfs -mkdir /logdata/app/2025-08-30
hdfs dfs -put app.access.log.2025-06-21 /logdata/app/2025-08-30

接着直接在服务器上运行脚本

文件名: 日志数据导入ODS层.sh

1
2
3
4
5
6
7
  #!/bin/bash
dt1=$1
if [ 'x'$dt1 == 'x' ];then
dt1=`date -d "yesterday" "+%Y-%m-%d"`
fi
hive -e "load data inpath '/logdata/app/$dt1/app.access.log.2023-06-21' into table ods.app_event_log2 partition (dt='$dt1')"

这个地方有个坑

1
2
select * from  app_event_log2;
直接报错:

这个错误,不影响我们的脚本运行,可以先搁置,在hive 中是没有问题的。