xslx表格文件采集到hdfs
咱们就是说,别的话不多说,直接开始实操
xslx在win系统上,打开后另存为csv文件格式,上传到linux系统中。(注意下编码格式,不然后面就是中文乱码)。
file -i csv文件
可以查看文件现在的编码格式(编码格式不匹配会导致文件内中文乱码)。
修改文件的编码格式:
iconv -f gbk -t UTF-8 目标csv文件 > 生成新csv文件
cat文件,可以发现文件内容已经不是乱码了。
采集csv文件到hdfs中
在datax/job目录创建json文件,(Datax数据源转换文档:https://github.com/alibaba/DataX/blob/master/introduction.md),按照需求配置json文件。
提交数据同步任务:
python datax/bin/datax.py json文件路径/job.json
我为了方便自己使用,写了一个脚本——datax提交同步任务的脚本:run_datax.sh
#!/bin/bash
current_time=$(date "+%Y-%m-%d-%H_%M")
config_file="/json文件路径/xlsx3hdfs.json"替换配置文件中的文件名
sed -i "s#"fileName": "xlsx2hdfs_.*.txt"#"fileName": "xlsx2hdfs_${current_time}.txt"#" $config_file
执行 DataX 命令
/datax/bin/datax.py $config_file
该脚本作用:
1、快速执行同步
2、在生成的hdfs文件名中加上了当前的时间戳执行脚本:./run_datax.sh
值得注意的是脚本内容指定了一个json文件,如果后面需要同步其他任务,记得修改相关配置;同步其他csv文件,在json里修改;有更好的方法,也可以采用自己的方法。
hdfs load到hive表中
开启hive,创建表
后端启动hive --service metastore:nohup hive --service metastore > /dev/null 2>&1 &
后端启动hiveserver2:nohup hiveserver2 > /dev/null 2>&1 &
create table hdfs2hive(
id Int,
name String,
age Int,
gender String,
num Int
)
row format delimited fields terminated by '\t';LOAD DATA INPATH '/hdfs/xlsx2hdfs/xlsx2hdfs_2023-12-22-11_02.txt__ea45309b_0ef4_4f86_ac37_4e42375dbc9c' INTO TABLE hdfs2hive;
为了增加复用性
-- 定义变量并赋值
SET hivevar:file_path='/hdfs/xlsx2hdfs/xlsx2hdfs_2023-12-22-11_02.txt__ea45309b_0ef4_4f86_ac37_4e42375dbc9c';-- 创建表
CREATE TABLE hdfs2hive (
id INT,
name STRING,
age INT,
gender STRING,
num INT
) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';-- 使用变量加载数据
LOAD DATA INPATH '${hivevar:file_path}' INTO TABLE hdfs2hive;
版权归原作者 sour_LI 所有, 如有侵权,请联系我们删除。