您的位置:首页 > 运维架构 > Shell

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

2017-03-08 22:19 253 查看
#注意点: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 ]; thenp_date=$1elseecho "参数错误!请传入日期。"  | tee -a  ./log/erro.logexitfi;[ ! -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=localhostlink_psot=5432link_db=postgis_devlink_un=postgreslink_pw=postgreshdfs_file_path=HDFS_HOME=/home/hdfs/hdfs/bin:/home/hdfs/hdfs/sbin">./cfg_SYNC_RSRP_TO_POSTGIS.cfgsource ./cfg_SYNC_RSRP_TO_POSTGIS.cfgecho "---------------------------------------------------$(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.cfgchmod 0600 ./psql_auto.cfgexport PGPASSFILE=./psql_auto.cfg##########################取文件###########echo "---$(date -d"now" +"%F %T")---开始获取 $p_date 的数据文件..."  | tee -a   ./log/$p_date/input_data_gis.logrm -rf ./data/p_date=$p_datemkdir ./data/p_date=$p_datehadoop fs -get  $hdfs_file_path ./data/p_date=$p_date#文件合并#echo $filesfiles=`ls ./data/p_date=$p_date/`for file_name in $filesdocat ./data/p_date=$p_date/$file_name >> ./data/p_date=$p_date/my_data.txtdoneecho "---$(date -d"now" +"%F %T")---开始导入数据: "$link_un@$link_ip:$link_psot | tee -a   ./log/$p_date/input_data_gis.logpsql -h localhost -p 5432 -U postgres -d postgis_dev<<SQLdrop 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 '"';\qSQL##清理历史数据##清理logecho "---$(date -d"now" +"%F %T")---任务结束。" | tee -a   ./log/$p_date/input_data_gis.log
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息