日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

SpringBoot連接Hive實現自助取數的示例

瀏覽:121日期:2023-04-05 11:03:29

原文鏈接: http://www.ikeguang.com/?p=815

公司運營免不了讓我們數據做一些臨時取數,這些取數有時候是重復的,或者可以做成可配置的。需要開發成界面,供他們選擇,自然想到SpringBoot連接Hive,可以把取數做成一鍵生成,或者讓他們自己寫sql,通常大多人是不會sql的。

1. 需要的依賴配置

為了節省篇幅,這里給出hiveserver2方式連接hive主要的maven依賴,父工程springboot依賴省略。

<!-- 版本信息 --><properties> <hadoop.version>2.6.5</hadoop.version> <mybatis.version>3.2.7</mybatis.version> <scopeType>compile</scopeType></properties><dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>${mybatis.version}</version></dependency><!-- hadoop依賴 --><dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-common</artifactId> <version>${hadoop.version}</version> <scope>${scopeType}</scope></dependency><!-- hive-jdbc --><!-- https://mvnrepository.com/artifact/org.apache.hive/hive-jdbc --><dependency> <groupId>org.apache.hive</groupId> <artifactId>hive-jdbc</artifactId> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> </exclusion> <exclusion> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> </exclusion> <exclusion> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> </exclusion> </exclusions> <version>1.2.1</version> <scope>${scopeType}</scope></dependency><!-- 解析html --><dependency> <groupId>org.jsoup</groupId> <artifactId>jsoup</artifactId> <version>1.8.3</version></dependency>

application-test.yml配置數據庫連接,這里用的是druid連接池管理hiveserver2連接,也是沒有問題的。

# Spring配置spring: datasource: type: com.alibaba.druid.pool.DruidDataSource driverClassName: com.mysql.cj.jdbc.Driver druid: # 多數據源**省略若干*** # hive數據源 slave3: # 從數據源開關/默認關閉 enabled: true driverClassName: org.apache.hive.jdbc.HiveDriver url: jdbc:hive2://cdh:10000/default username: bigdata password: bigdata

2. 代碼實現

代碼實現跟其它程序一樣,都是mapper、service、controller層,套路一模一樣。一共設置了實時和離線兩個yarn資源隊列,由于其它部門人使用可能存在隊列壓力過大的情況,需要對數據量按照每次查詢的數據范圍不超過60天來限制,和此時集群使用資源不能大于55%,這里重點說明一下controller層對數據量的預防。

實體類UserModel:

@NoArgsConstructor@AllArgsConstructor@Data@ToStringpublic class UserModel extends BaseEntity{ private String userId; private Integer count;}

2.1 集群資源使用率不大于55%因為很多業務查詢邏輯controller都要用到數據量防御過大的問題,這里使用了被Spring切面關聯的注解來標識controller。

定義切面YarnResourceAspect,并且關聯注解@YarnResource

@Target({ElementType.TYPE, ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME)public @interface YarnResource {}@Aspect@Componentpublic class YarnResourceAspect { private static final Logger log = LoggerFactory.getLogger(YarnResourceAspect.class); /** * 配置切入點 */ @Pointcut('@annotation(com.ruoyi.common.annotation.YarnResource)') public void yarnResourcdPointCut(){ } /** * 檢查yarn的資源是否可用 */ @Before('yarnResourcdPointCut()') public void before(){ log.info('************************************檢查yarn的資源是否可用*******************************'); // yarn資源緊張 if(!YarnClient.yarnResourceOk()){ throw new InvalidStatusException(); } }}

獲取yarn的資源使用數據:

@Slf4jpublic class YarnClient { /** * yarn資源不能超過多少 */ private static final int YARN_RESOURCE = 55; /** * * @return true : 表示資源正常, false: 資源緊張 */ public static boolean yarnResourceOk() { try { URL url = new URL('http://master:8088/cluster/scheduler'); HttpURLConnection conn = null; conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod('GET'); conn.setUseCaches(false); // 請求超時5秒 conn.setConnectTimeout(5000); // 設置HTTP頭: conn.setRequestProperty('Accept', '*/*'); conn.setRequestProperty('User-Agent', 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36'); // 連接并發送HTTP請求: conn.connect(); // 判斷HTTP響應是否200: if (conn.getResponseCode() != 200) { throw new RuntimeException('bad response'); } // 獲取所有響應Header: Map<String, List<String>> map = conn.getHeaderFields(); for (String key : map.keySet()) { System.out.println(key + ': ' + map.get(key)); } // 獲取響應內容: InputStream input = conn.getInputStream(); byte[] datas = null; try { // 從輸入流中讀取數據 datas = readInputStream(input); } catch (Exception e) { e.printStackTrace(); } String result = new String(datas, 'UTF-8');// 將二進制流轉為String Document document = Jsoup.parse(result); Elements elements = document.getElementsByClass('qstats'); String[] ratios = elements.text().split('used'); return Double.valueOf(ratios[3].replace('%', '')) < YARN_RESOURCE; } catch (IOException e) { log.error('yarn資源獲取失敗'); } return false; } private static byte[] readInputStream(InputStream inStream) throws Exception { ByteArrayOutputStream outStream = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int len = 0; while ((len = inStream.read(buffer)) != -1) { outStream.write(buffer, 0, len); } byte[] data = outStream.toByteArray(); outStream.close(); inStream.close(); return data; }}

在controller上通過注解@YarnResource標識:

@Controller@RequestMapping('/hero/hive')public class HiveController { /** * html 文件地址前綴 */ private String prefix = 'hero'; @Autowired IUserService iUserService; @RequestMapping('') @RequiresPermissions('hero:hive:view') public String heroHive(){ return prefix + '/hive'; } @YarnResource @RequestMapping('/user') @RequiresPermissions('hero:hive:user') @ResponseBody public TableDataInfo user(UserModel userModel){ DateCheckUtils.checkInputDate(userModel); PageInfo pageInfo = iUserService.queryUser(userModel); TableDataInfo tableDataInfo = new TableDataInfo(); tableDataInfo.setTotal(pageInfo.getTotal()); tableDataInfo.setRows(pageInfo.getList()); return tableDataInfo; }}

2.2 查詢數據跨度不超過60天檢查這樣每次請求進入controller的時候就會自動檢查查詢的日期是否超過60天了,防止載入數據過多,引發其它任務資源不夠。

public class DateCheckUtils { /** * 對前臺傳入過來的日期進行判斷,防止查詢大量數據,造成集群負載過大 * @param o */ public static void checkInputDate(BaseEntity o){ if(''.equals(o.getParams().get('beginTime')) && ''.equals(o.getParams().get('endTime'))){ throw new InvalidTaskException(); } String beginTime = '2019-01-01'; String endTime = DateUtils.getDate(); if(!''.equals(o.getParams().get('beginTime'))){ beginTime = String.valueOf(o.getParams().get('beginTime')); } if(!''.equals(o.getParams().get('endTime'))){ endTime = String.valueOf(o.getParams().get('endTime')); } // 查詢數據時間跨度大于兩個月 if(DateUtils.getDayBetween(beginTime, endTime) > 60){ throw new InvalidTaskException(); } }}

這里訪問hive肯定需要切換數據源的,因為其它頁面還有對mysql的數據訪問,需要注意一下。

目前功能看起來很簡單,沒有用到什么高大上的東西,后面慢慢完善。

以上就是SpringBoot連接Hive實現自助取數的示例的詳細內容,更多關于SpringBoot連接Hive的資料請關注好吧啦網其它相關文章!

標簽: Spring
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
狠狠久久婷婷| 久久久久国产精品一区三寸| 午夜av成人| 亚洲一区二区三区久久久| 国产精品久久久久9999高清| 国产精品久久久久蜜臀| 亚洲欧美视频| 黄色欧美在线| 亚洲乱码视频| 国产精品天堂蜜av在线播放| 自由日本语亚洲人高潮| 国产精品日韩久久久| 狠狠色狠狠色综合日日tαg| 国产精品一级在线观看| 91嫩草精品| 日韩不卡视频在线观看| 午夜精品久久久久久久久久蜜桃| 成人看片网站| 国产美女精品| 日韩三级久久| av在线资源| 国产资源在线观看入口av| 国产视频一区在线观看一区免费| 亚洲一级淫片| 精品视频在线观看网站| 日韩精品三区四区| 久久97视频| 中文国产一区| 精品一区二区三区亚洲| 国产综合欧美| 丝袜美腿诱惑一区二区三区| 亚洲少妇诱惑| 精品国产18久久久久久二百| 9色国产精品| 狠狠久久伊人| 亚洲美女久久| 美国欧美日韩国产在线播放| 久久视频国产| 中文另类视频| 亚洲另类av| 最新中文字幕在线播放| 日韩一二三区在线观看| 福利精品一区| 亚洲精品动态| 日韩精品欧美| 久久国产婷婷国产香蕉| 日韩va亚洲va欧美va久久| 成人在线免费观看网站| 亚洲另类黄色| 今天的高清视频免费播放成人| 国产九一精品| 老鸭窝毛片一区二区三区| 亚洲精品**中文毛片| 日本少妇一区二区| 99热免费精品| 精品欧美一区二区三区在线观看| 欧美一区在线观看视频| 亚洲欧美日本国产专区一区| 精品捆绑调教一区二区三区| 国产亚洲一区二区三区不卡| 国产视频亚洲| 99久久久国产精品美女| 久久尤物视频| 久久久久伊人| 亚洲精品国产日韩| 91久久国产| 成人日韩在线| 国产一区二区三区四区五区| 国产农村妇女精品一二区| 国产精品chinese| 亚洲欧美日韩一区在线观看| 四虎国产精品免费观看| 精品三级在线观看视频| 99香蕉国产精品偷在线观看 | 国产欧美亚洲一区| 国产真实久久| 精品久久免费| 亚洲综合色婷婷在线观看| av资源亚洲| 国产精品视频一区视频二区| 99在线精品免费视频九九视 | 久久中文字幕一区二区| 天堂av在线一区| 日韩国产一区二区三区| 国产极品一区| 亚洲精选成人| 香蕉成人久久| 欧美日韩国产高清电影| 色婷婷综合网| 麻豆一区二区三区| 亚洲日韩视频| 中文一区二区| 99久久久久| 91一区二区三区四区| 国产日韩欧美三区| 亚洲欧洲av| 红桃视频国产一区| 久久久久午夜电影| 91看片一区| 亚洲天堂资源| 中文字幕人成乱码在线观看| 开心激情综合| 国产乱码精品一区二区三区亚洲人 | 欧洲一区二区三区精品| 欧美精品91| 人人爱人人干婷婷丁香亚洲| 激情自拍一区| 久久免费大视频| 蜜桃视频在线网站| 国产一区2区在线观看| 久久永久免费| 久久伊人久久| 国产精品久久久久久久久久白浆| 久久狠狠久久| 国产亚洲欧美日韩精品一区二区三区 | 久久久男人天堂| 五月激情久久| 亚洲免费播放| 日韩精品国产欧美| 欧美黑人巨大videos精品| 精品久久影院| 久久青青视频| 久久久久国产精品一区三寸| 日韩av有码| 日韩电影免费网站| 成人看片网站| 亚洲爱爱视频| 亚洲女同中文字幕| 久久午夜精品| 日本不卡中文字幕| 国产精品自在| 久久精品网址| 国产91在线播放精品| 欧美三级网址| 一区免费在线| 综合一区二区三区| 国产午夜一区| 国产+成+人+亚洲欧洲在线| 日韩欧美午夜| 在线视频日韩| 日韩精品免费一区二区夜夜嗨| 视频国产精品| 国产探花一区二区| 成人一区不卡| 免费精品国产| 日韩中文字幕在线一区| 欧美精品aa| 日韩精品免费一区二区三区| 亚洲一区国产| 国产日产精品_国产精品毛片| 精品久久电影| 欧美va天堂| 亚洲综合小说| 欧美激情麻豆| 婷婷精品视频| 最近国产精品视频| 欧美视频一区| 国产91欧美| 亚洲精品小说| 国产日韩欧美一区| 亲子伦视频一区二区三区| 久久国产高清| 国产日韩欧美一区| 亚洲va中文在线播放免费| 亚洲一区网站| 国产精品麻豆成人av电影艾秋| 91精品韩国| 日本一区二区中文字幕| аⅴ资源天堂资源库在线| 香蕉久久夜色精品国产| 国产精品a久久久久| 成人羞羞在线观看网站| 久色成人在线| 精品视频在线观看网站| 午夜欧美精品| 国产精品国码视频| 亚洲午夜免费| 91亚洲自偷观看高清| 日韩精品第一| 自由日本语亚洲人高潮| 精品国产一区二区三区2021| 亚洲精品伊人| 国产精品99免费看| 国产成人在线中文字幕| 欧美一区91| 三级亚洲高清视频| 色在线视频观看| 久久国产日韩欧美精品| 国产视频亚洲| 日韩精品欧美| 国产一区二区三区网| 欧美精品观看| 亚洲免费观看高清完整版在线观| 国内精品福利| 欧美羞羞视频| 精品视频免费| 国产精品网址| 日本午夜精品一区二区三区电影| 男人天堂欧美日韩| 婷婷综合激情|