本次需求:想将一个集群上的 csv 文件 load 到另一个集群的 Hive 表中,由于两个集群的网络不通,所以利用华为云存储对象 OBS 作为中间栈,从而实现。
1)压缩文件
服务器A上 /home/test/ 目录下找到测试文件进行压缩,实际生产中不排除单个文件很大,导致上传至存储对象速度慢,所以压缩后效率更高。
zip -r /home/test/20231127/test_20231127.zip test_20231127.csv
2)上传文件到 OBS 存储对象
上传压缩文件到 obs,这里我们已经安装了obsutil-Liunx工具,如果没有安装的话要安装。
安装地址:https://support.huaweicloud.com/utiltg-obs/obs_11_0003.html
/opt/obsutil/obsutil cp /home/test/20231127/test_20231127.zip obs://obs-tes/model_test/
3)crontab 定时压缩上传
实际生产中可以定时进行压缩上传。
4)从 obs 上拉取下来文件后解压缩
obs://obs-test/model_test/test_20231127.zip cp /data/test/
unzip -d /data/test/ /data/test/test_20231127.zip
5)判断对应文件是否存在
拉下来后最好在脚本中自动进行判断文件是否存在,如果有异常的情况可以帮助我们尽快发现异常。文章来源:https://www.toymoban.com/news/detail-784324.html
if [ -f /data/cdp/test_20231127.csv ]; then
echo "该文件存在"
else
echo "该文件不存在"
fi
6)上传至 HDFS 并 load 到 Hive
完整脚本如下:文章来源地址https://www.toymoban.com/news/detail-784324.html
/opt/obsutil/obsutil config -i=****************** -k=**************************** -e=huaweiyun.cloud.com
echo 123 | kinit hive
sh /opt/obsutil/config.sh
/opt/obsutil/obsutil cp obs://obs-test/model_test/test_20231127.zip /data/test/test_20231127.zip
if [ -e /data/test/test_20231127.zip ]; then
echo "文件下载完成"
unzip -o -d /data/test/ /data/test/test_20231127.zip
echo "解压缩完成"
hdfs dfs -put -f /data/test/test_20231127.csv /tmp/test
echo "上传hdfs完成"
hive -e "load data inpath '/tmp/test/test_20231127.csv' overwrite into table test.test_table"
echo "load完成"
else
echo "该文件不存在"
break
fi
到了这里,关于【Hadoop-OBS-Hive】利用华为云存储对象 OBS 作为两个集群的中间栈 load 文件到 Hive的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!