本次需求:想將一個(gè)集群上的 csv 文件 load 到另一個(gè)集群的 Hive 表中,由于兩個(gè)集群的網(wǎng)絡(luò)不通,所以利用華為云存儲(chǔ)對(duì)象 OBS 作為中間棧,從而實(shí)現(xiàn)。
1)壓縮文件
服務(wù)器A上 /home/test/ 目錄下找到測(cè)試文件進(jìn)行壓縮,實(shí)際生產(chǎn)中不排除單個(gè)文件很大,導(dǎo)致上傳至存儲(chǔ)對(duì)象速度慢,所以壓縮后效率更高。
zip -r /home/test/20231127/test_20231127.zip test_20231127.csv
2)上傳文件到 OBS 存儲(chǔ)對(duì)象
上傳壓縮文件到 obs,這里我們已經(jīng)安裝了obsutil-Liunx工具,如果沒(méi)有安裝的話要安裝。
安裝地址: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 定時(shí)壓縮上傳
實(shí)際生產(chǎn)中可以定時(shí)進(jìn)行壓縮上傳。
4)從 obs 上拉取下來(lái)文件后解壓縮
obs://obs-test/model_test/test_20231127.zip cp /data/test/
unzip -d /data/test/ /data/test/test_20231127.zip
5)判斷對(duì)應(yīng)文件是否存在
拉下來(lái)后最好在腳本中自動(dòng)進(jìn)行判斷文件是否存在,如果有異常的情況可以幫助我們盡快發(fā)現(xiàn)異常。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-784324.html
if [ -f /data/cdp/test_20231127.csv ]; then
echo "該文件存在"
else
echo "該文件不存在"
fi
6)上傳至 HDFS 并 load 到 Hive
完整腳本如下:文章來(lái)源地址http://www.zghlxwxcb.cn/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
到了這里,關(guān)于【Hadoop-OBS-Hive】利用華為云存儲(chǔ)對(duì)象 OBS 作為兩個(gè)集群的中間棧 load 文件到 Hive的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!