日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

RDBMS数据定时采集到HDFS

發布時間:2023/11/29 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 RDBMS数据定时采集到HDFS 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

[toc]


RDBMS數據定時采集到HDFS

前言

其實并不難,就是使用sqoop定時從MySQL中導入到HDFS中,主要是sqoop命令的使用和Linux腳本的操作這些知識。

場景

在我們的場景中,需要每天將數據庫中新增的用戶數據采集到HDFS中,數據庫中有time字段, 用以標識該用戶信息錄入數據庫的時間,所以下面的數據導入操作也是依賴于這個字段。

數據準備

在MySQL數據庫中準備如下數據:

##構建sql的操作 create DATABASE IF NOT EXISTS db_log_statics; use db_log_statics; CREATE TABLE `t_user_info` (`id` bigint(20) NOT NULL,`name` varchar(20) COLLATE utf8_bin DEFAULT NULL,`address` varchar(20) COLLATE utf8_bin DEFAULT NULL,`time` date DEFAULT NULL,PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;insert into `t_user_info` (`id`, `name`, `address`, `time`) values('1','張三','北京朝陽','2018-04-05'); insert into `t_user_info` (`id`, `name`, `address`, `time`) values('2','李四','河南洛陽','2018-04-05'); insert into `t_user_info` (`id`, `name`, `address`, `time`) values('3','王五','廣東邵陽','2018-04-05'); insert into `t_user_info` (`id`, `name`, `address`, `time`) values('4','趙六','山東德州','2018-04-07'); insert into `t_user_info` (`id`, `name`, `address`, `time`) values('5','周七','山東青島','2018-04-07'); insert into `t_user_info` (`id`, `name`, `address`, `time`) values('6','魏八','福建廈門','2018-04-07'); insert into `t_user_info` (`id`, `name`, `address`, `time`) values('7','王二麻子','山西五臺山','2018-04-06'); insert into `t_user_info` (`id`, `name`, `address`, `time`) values('8','王大錘','陜西榆林','2018-04-06'); insert into `t_user_info` (`id`, `name`, `address`, `time`) values('9','燕小六','云南大理','2018-04-06'); insert into `t_user_info` (`id`, `name`, `address`, `time`) values('10','雷布斯','湖北仙桃','2018-04-06');

腳本編寫

exportUser2HDFS.sh

#!/bin/env bash# shell中引用外部文件的變量 source /home/uplooking/shells/db-mysql.conf# source 系統的環境變量 source ~/.bash_profile # 日期變量 today=`date +%Y-%m-%d` yesterday=`date -d"1 day ago" +%Y-%m-%d`/home/uplooking/app/sqoop/bin/sqoop import \ --connect jdbc:mysql://${stat_ipaddr}:${stat_port}/${stat_dbname} \ --username ${stat_uname} \ --password ${stat_upwd} \ --target-dir hdfs://ns1/input/t_user/${yesterday} \ --query "SELECT id, name, address, time FROM t_user_info WHERE time >='${yesterday}' AND time < '${today}' AND \$CONDITIONS" \ -m 1 --fields-terminated-by "," --split-by ","

db-mysql.conf

#統計庫數據庫ip地址 stat_ipaddr=192.168.43.116 #統計庫端口 stat_port=3306 #統計庫名稱 stat_dbname=db_log_statics #統計庫用戶名 stat_uname=root #統計庫密碼 stat_upwd=root

編寫定時任務

crontab -e# 要求每天凌晨2點10分同步數據 10 2 * * * /bin/bash /home/uplooking/shells/exportUser2HDFS.sh >/dev/null 2>&1 &

需要注意的是,如果在Notepad++中遠程編輯shell腳本文件,在Linux中是無法執行的,原因為,此時在Linux中用vim查看文件格式:set ff,會發現為:fileformat=dos,而正常我們在Linux中編輯的文件應該為:fileformat=unix,所以解決方案為:set ff=unix

總結

以上是生活随笔為你收集整理的RDBMS数据定时采集到HDFS的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。