1. spark执行的输出结果如何保存
通常把hive表对应的路径当做spark执行的输出目录:/user/hive/warehouse/${hive_db_name}.db/$hive_tb_name
一般日志的映射hive表要建成带分区的格式/user/hive/warehouse/${hive_db_name}.db/$hive_tb_name/dt=${dt}/hour=${dt}
2.spark数据结果的格式如何选择
一般来说,普通的输出就是Textfile格式,但是为了压缩空间,提高效率等,还可以报错为hive识别的格式:orcfile,rcfile,parquet等
如:利用dataframe的方法.write.parquet(outputPath),可以保存为parquet格式
3. hive表的建表
首先,建表的时候肯定要指定存储格式,要和spark输出数据文件格式保持一致。
同时也要指定目录,例如:
CREATE EXTERNAL TABLE `matrix_tmp.tmp_ljt_dws_service_security_audit_log`(
`video_id` string COMMENT '视频id',
`stage` string COMMENT '阶段 1、白名单检测 2、md5检测 3、指纹检测 4、图片检测 5、关键字检测 6、人工安全审核',
`video_source` string COMMENT '视频来源 channel->shootType 视频表',
`parameters` map<string,string> COMMENT '各事件的其他参数')
COMMENT '安全管控服务端日志'
stored as Parquet
LOCATION
'hdfs://nameservice1/user/matrix/DwsParserLogTest';
4.hive加载
其实如上述格式,hive表已经可以识别了。但是如果是分区的格式,则必须
use $hive_db_name;
alter table $hive_tb_name add if not exists partition (dt='$cdate',hour='$chour');
ANALYZE TABLE $hive_tb_name PARTITION(dt='$cdate',hour='$chour') COMPUTE STATISTICS;
其中add partition的作用是加载分区
Analyze Table 是重新计算hive表的统计信息,这样就可以保证资源和空间的回收利用。