实现内容:从指定主机获取指定文件,将文件数据入到Hive库。
1、文件获取
使用ftp取指定主机目录下指定文件,到本地主机指定目录下。
注意:获取文件用get,上传文件用put;mget为批量获取。
2、文件格式转化
对获取的文件进行格式转化。
这里是将取到的文件列表进行循环,文件名赋给${fn};循环内容为,使用iconv命令将文件从GBK转为UTF-8,然后${fn}转换后生成${fn}_tmp文件,然后再将${fn}_tmp重命名回${fn}。
3、入库表准备
要入库的表,如果存在先删除,重新创建。记得指定分隔符(在获取的文件中确认)和存储文件类型。
4、文件数据入hive表
用hadoop的put命令将指定文件数据入库到指定表中去。-f表示先清空再写入,避免重复执行时重复入库。最后,将原文件移入bak目录备份。
注意:常遇到的一个问题是,文件数据有中文,入库后显示为乱码。一般是编码问题导致,如上代码使用的是UTF-8,那么secureCRT界面也要设置为UTF-8,保证执行、查看各阶段编码一致,一般就可以解决这个问题。另外,当不知道要入库的文件是什么编码时,可以使用UE查看,另存为UTF-8即可。