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

#注意点: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://blog.csdn.net/w417204446/article/details/60884136

You may also like...