用shell将hdfs数据导入postgreSQL数据库

    xiaoxiao2021-03-25  115

    #注意点:1.如果是在postgres用户下操作,可能没有hdfs权限,需添加环境变量,反之亦然 # 2.postgreSQL从shell脚本里面实现免密登陆需要配置文件,有两种方式,此处选用自己生成文件 #!/bin/bash ########################################### # function : 从hdfs向postgresql数据库入数据 # author : luojie # date ; 20170308 ########################################### #从hdfs向postgresql数据库入数据 ########################################### #########################环境准备########## [ ! -d ./data ]&&mkdir ./data [ ! -d ./log ]&&mkdir ./log #获取日期参数 if [ $# -eq 1 ]; then p_date=$1 else echo "参数错误!请传入日期。" | tee -a ./log/erro.log exit fi; [ ! -d ./data/p_date=$p_date ]&&mkdir ./data/p_date=$p_date [ ! -d ./log/$p_date ]&&mkdir ./log/$p_date #加载脚本变量文件,如果没有则生成默认变量 [ ! -f ./cfg_SYNC_RSRP_TO_POSTGIS.cfg ]&&echo " link_ip=localhost link_psot=5432 link_db=postgis_dev link_un=postgres link_pw=postgres hdfs_file_path= HDFS_HOME=/home/hdfs/hdfs/bin:/home/hdfs/hdfs/sbin ">./cfg_SYNC_RSRP_TO_POSTGIS.cfg source ./cfg_SYNC_RSRP_TO_POSTGIS.cfg echo "------------------------------------------------ ---$(date -d"now" +"%F %T")---任务开始..." | tee -a ./log/$p_date/input_data_gis.log #加载hdfs的环境变量 export PATH=$PATH:$HDFS_HOME #免手工登陆postgres环境准备 echo $link_ip:$link_psot:$link_db:$link_un:$link_pw>./psql_auto.cfg chmod 0600 ./psql_auto.cfg export PGPASSFILE=./psql_auto.cfg ##########################取文件########### echo "---$(date -d"now" +"%F %T")---开始获取 $p_date 的数据文件..." | tee -a ./log/$p_date/input_data_gis.log rm -rf ./data/p_date=$p_date mkdir ./data/p_date=$p_date hadoop fs -get $hdfs_file_path ./data/p_date=$p_date #文件合并 #echo $files files=`ls ./data/p_date=$p_date/` for file_name in $files do cat ./data/p_date=$p_date/$file_name >> ./data/p_date=$p_date/my_data.txt done echo "---$(date -d"now" +"%F %T")---开始导入数据: "$link_un@$link_ip:$link_psot | tee -a ./log/$p_date/input_data_gis.log psql -h localhost -p 5432 -U postgres -d postgis_dev<<SQL drop table if exists my_tab; create table my_tab ( ); --导入数据到temp \copy my_tab from ./data/p_date=$p_date/my_data.txt delimiter as ',' csv quote as '"' ; \q SQL ##清理历史数据 ##清理log echo "---$(date -d"now" +"%F %T")---任务结束。" | tee -a ./log/$p_date/input_data_gis.log
    转载请注明原文地址: https://ju.6miu.com/read-6804.html

    最新回复(0)