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

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

Java API如何實現向Hive批量導入數據

瀏覽:24日期:2022-08-08 18:06:32
Java API實現向Hive批量導入數據

Java程序中產生的數據,如果導入oracle或者mysql庫,可以通過jdbc連接insert批量操作完成,但是當前版本的hive并不支持批量insert操作,因為需要先將結果數據寫入hdfs文件,然后插入Hive表中。

package com.enn.idcard; import java.io.IOException;import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;import java.sql.Statement;import java.util.ArrayList;import java.util.List; import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.fs.FSDataOutputStream;import org.apache.hadoop.fs.FileSystem;import org.apache.hadoop.fs.Path;/** * <p>Description: </p> * @author kangkaia * @date 2017年12月26日 下午1:42:24 */public class HiveJdbc { public static void main(String[] args) throws IOException { List<List> argList = new ArrayList<List>();List<String> arg = new ArrayList<String>();arg.add('12345');arg.add('m');argList.add(arg);arg = new ArrayList<String>();arg.add('54321');arg.add('f');argList.add(arg);//System.out.println(argList.toString());String dst = '/test/kk.txt';createFile(dst,argList);loadData2Hive(dst); } /** * 將數據插入hdfs中,用于load到hive表中,默認分隔符是'001' * @param dst * @param contents * @throws IOException */ public static void createFile(String dst , List<List> argList) throws IOException{Configuration conf = new Configuration();FileSystem fs = FileSystem.get(conf);Path dstPath = new Path(dst); //目標路徑//打開一個輸出流FSDataOutputStream outputStream = fs.create(dstPath);StringBuffer sb = new StringBuffer();for(List<String> arg:argList){for(String value:arg){sb.append(value).append('001');}sb.deleteCharAt(sb.length() - 4);//去掉最后一個分隔符sb.append('n');}sb.deleteCharAt(sb.length() - 2);//去掉最后一個換行符byte[] contents = sb.toString().getBytes();outputStream.write(contents);outputStream.close();fs.close();System.out.println('文件創建成功!'); } /** * 將HDFS文件load到hive表中 * @param dst */ public static void loadData2Hive(String dst) { String JDBC_DRIVER = 'org.apache.hive.jdbc.HiveDriver'; String CONNECTION_URL = 'jdbc:hive2://server-13:10000/default;auth=noSasl'; String username = 'admin';String password = 'admin';Connection con = null;try {Class.forName(JDBC_DRIVER);con = (Connection) DriverManager.getConnection(CONNECTION_URL,username,password);Statement stmt = con.createStatement();String sql = ' load data inpath ’'+dst+'’ into table population.population_information ';stmt.execute(sql);System.out.println('loadData到Hive表成功!');} catch (SQLException e) {e.printStackTrace();} catch (ClassNotFoundException e) {e.printStackTrace();}finally {// 關閉rs、ps和conif(con != null){try {con.close();} catch (SQLException e) {e.printStackTrace();}}}} }注意:

本例使用mvn搭建,conf配置文件放在src/main/resources目錄下。

Hive提供的默認文件存儲格式有textfile、sequencefile、rcfile等。用戶也可以通過實現接口來自定義輸入輸的文件格式。

在實際應用中,textfile由于無壓縮,磁盤及解析的開銷都很大,一般很少使用。Sequencefile以鍵值對的形式存儲的二進制的格式,其支持針對記錄級別和塊級別的壓縮。rcfile是一種行列結合的存儲方式(text file和sequencefile都是行表[row table]),其保證同一條記錄在同一個hdfs塊中,塊以列式存儲。一般而言,對于OLTP而言,行表優勢大于列表,對于OLAP而言,列表的優勢大于行表,特別容易想到當做聚合操作時,列表的復雜度將會比行表小的多,雖然單獨rcfile的列運算不一定總是存在的,但是rcfile的高壓縮率確實減少文件大小,因此實際應用中,rcfile總是成為不二的選擇,達觀數據平臺在選擇文件存儲格式時也大量選擇了rcfile方案。

通過hdfs導入hive的表默認是textfile格式的,因此可以改變存儲格式,具體方法是先創建sequencefile、rcfile等格式的空表,然后重新插入數據即可。

insert overwrite table seqfile_table select * from textfile_table; ……insert overwrite table rcfile_table select * from textfile_table;java 批量插入hive中轉在HDFS

稍微修改了下,這文章是通過將數據存盤后,加載到HIVE.

模擬數據放到HDFS然后加載到HIVE,請大家記得添加HIVE JDBC依賴否則會報錯。

加載前的數據表最好用外部表,否則會drop表的時候元數據會一起刪除!

<dependency> <groupId>org.apache.hive</groupId> <artifactId>hive-jdbc</artifactId> <version>1.1.0</version> </dependency>

代碼

import java.io.IOException;import java.net.URI;import java.net.URISyntaxException;import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;import java.sql.Statement;import java.util.ArrayList;import java.util.List;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.fs.FSDataOutputStream;import org.apache.hadoop.fs.FileSystem;import org.apache.hadoop.fs.Path;public class Demo { public static void main(String[] args) throws Exception { List<List> argList = new ArrayList<List>();List<String> arg = new ArrayList<String>();arg.add('12345');arg.add('m');argList.add(arg);arg = new ArrayList<String>();arg.add('54321');arg.add('f');argList.add(arg);//System.out.println(argList.toString());String dst = '/test/kk.txt';createFile(dst,argList);//loadData2Hive(dst); } /** * 將數據插入hdfs中,用于load到hive表中,默認分隔符是'|' * @param dst * @param contents * @throws IOException * @throws Exception * @throws InterruptedException */ public static void createFile(String dst , List<List> argList) throws IOException, InterruptedException, Exception{Configuration conf = new Configuration();FileSystem fs = FileSystem.get(new URI('hdfs://hadoop:9000'),conf,'root');Path dstPath = new Path(dst); //目標路徑//打開一個輸出流FSDataOutputStream outputStream = fs.create(dstPath);StringBuffer sb = new StringBuffer();for(List<String> arg:argList){for(String value:arg){sb.append(value).append('|');}sb.deleteCharAt(sb.length() - 1);//去掉最后一個分隔符sb.append('n');}byte[] contents = sb.toString().getBytes();outputStream.write(contents);outputStream.flush();;outputStream.close();fs.close();System.out.println('文件創建成功!'); } /** * 將HDFS文件load到hive表中 * @param dst */ public static void loadData2Hive(String dst) { String JDBC_DRIVER = 'org.apache.hive.jdbc.HiveDriver'; String CONNECTION_URL = 'jdbc:hive2://hadoop:10000/default'; String username = 'root';String password = 'root';Connection con = null;try {Class.forName(JDBC_DRIVER);con = (Connection) DriverManager.getConnection(CONNECTION_URL,username,password);Statement stmt = con.createStatement();String sql = ' load data inpath ’'+dst+'’ into table test ';//test 為插入的表stmt.execute(sql);System.out.println('loadData到Hive表成功!');} catch (SQLException e) {e.printStackTrace();} catch (ClassNotFoundException e) {e.printStackTrace();}finally {// 關閉rs、ps和conif(con != null){try {con.close();} catch (SQLException e) {e.printStackTrace();}}}} }

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
99久久久久国产精品| 欧美日一区二区三区在线观看国产免| 午夜精品婷婷| 午夜影院一区| 91看片一区| 伊人久久在线| 久久激情婷婷| 日韩影院二区| 麻豆精品在线视频| 久久精品亚洲一区二区| 黄色网一区二区| 四虎国产精品免费观看| 中文字幕成在线观看| 伊人久久视频| 99久久激情| 免费成人性网站| 国产日韩一区二区三区在线 | 亚洲黄色中文字幕| 999久久久精品国产| 欧美日韩中文字幕一区二区三区| 99在线精品视频在线观看| 五月天久久久| 91成人精品观看| 国产图片一区| 日韩不卡在线| 99久久www免费| 久久中文字幕av一区二区不卡| 日本久久成人网| 最新亚洲国产| 日本欧美国产| 99亚洲视频| 免费一区二区三区在线视频| 日韩精品首页| 91tv亚洲精品香蕉国产一区| 你懂的国产精品| 日韩精品专区| 日本亚洲欧洲无免费码在线| 日韩欧美二区| 欧美亚洲国产日韩| 免费在线播放第一区高清av| 国产精品一二| av不卡免费看| 日韩中文字幕高清在线观看| 日韩精品视频一区二区三区| 丝袜av一区| 国产精品magnet| 日韩中文字幕av电影| 国内精品伊人| 欧美日韩国产高清| 亚洲我射av| 不卡中文字幕| 久久久久国产| 精品捆绑调教一区二区三区| 麻豆精品在线观看| 欧美日韩一区自拍| 日韩高清在线观看一区二区| 一区二区精彩视频| 亚洲影院天堂中文av色| 视频一区中文字幕| 麻豆亚洲精品| 视频一区中文字幕| 蜜臀精品一区二区三区在线观看| 久久国产三级| 久久亚洲道色| 红杏一区二区三区| 日韩精品欧美大片| 97在线精品| 欧美日韩视频免费观看| 亚洲a级精品| 在线视频亚洲欧美中文| 精品一区二区三区的国产在线观看| 日本综合字幕| 里番精品3d一二三区| 精品视频高潮| 1024精品久久久久久久久| 国产精品日本一区二区不卡视频| 久久午夜精品| 石原莉奈在线亚洲二区| 国产精品亚洲欧美一级在线| 国产精品成人一区二区不卡| 亚州av乱码久久精品蜜桃| 国产三级一区| 免费在线观看日韩欧美| 久久精品中文| 国产在线不卡一区二区三区| 欧美黄色一区| 精品视频一区二区三区四区五区| 久久高清免费观看| 黄色精品网站| 国产欧美激情| 国产日韩欧美一区二区三区在线观看| 欧美精选一区二区三区| 亚洲三级欧美| 欧美亚洲人成在线| 亚洲国产一区二区在线观看 | 国产精品乱战久久久| 欧美偷窥清纯综合图区| 国产精品日本一区二区不卡视频| 91成人精品观看| 久久99视频| 欧美国产91| 不卡专区在线| 一本大道色婷婷在线| 国产一区丝袜| 日韩一区免费| 日本成人在线网站| 久久久91麻豆精品国产一区| 久久av免费看| 激情欧美一区| 亚洲男人在线| 久久午夜影院| 亚洲综合精品| 色爱av综合网| 自拍日韩欧美| 亚洲精品在线国产| 亚洲精品乱码日韩| 日韩精品一区二区三区中文在线| 西西人体一区二区| 亚洲精品免费观看| 国产精品嫩草99av在线| 欧美午夜不卡| 在线日韩成人| 国产精品久久久免费| 欧美亚洲在线日韩| 日韩不卡免费视频| 欧美手机在线| 精品日产乱码久久久久久仙踪林| 亚洲欧美日韩国产一区| 久久久精品国产**网站| 亚洲91久久| 日韩精彩视频在线观看| 国际精品欧美精品| 亚洲免费精品| 国产精品久久久久av蜜臀| 精品一区二区三区四区五区| 欧美肉体xxxx裸体137大胆| 国产精品xvideos88| 日韩av中文在线观看| 欧美 日韩 国产精品免费观看| 精品三级在线| 久久国产人妖系列| 免费人成在线不卡| 91亚洲国产高清| 在线看片日韩| 婷婷国产精品| 国产精品久久久久久久免费观看 | 91成人精品在线| 亚洲女同中文字幕| 日韩激情啪啪| 婷婷中文字幕一区| 国产区精品区| 中国女人久久久| 97精品国产一区二区三区| 婷婷精品在线| 日韩精品免费视频人成| 亚洲免费观看高清完整版在线观| 精品国产精品国产偷麻豆| 欧美精品导航| 激情偷拍久久| 欧洲一级精品| 97精品国产一区二区三区| 91精品麻豆| 欧美精品一二| 99成人在线视频| 国产亚洲一区二区手机在线观看| 亚洲欧洲专区| 亚洲一级大片| 丝袜美腿高跟呻吟高潮一区| 黄色欧美在线| 久久91视频| 欧美日本不卡| 日韩亚洲精品在线观看| 在线看片一区| 国产视频一区欧美| 日韩动漫一区| 青青伊人久久| 久久亚洲黄色| 日韩一区二区久久| 亚洲一区成人| 四季av一区二区凹凸精品| 一区在线免费观看| 国产一区二区精品久| 国产二区精品| 亚洲永久av| 免费视频最近日韩| 久久精品xxxxx| 国产日韩精品视频一区二区三区| 日韩国产欧美在线播放| 91精品国产自产在线丝袜啪| 亚洲最新av| 免播放器亚洲一区| 欧美在线黄色| 久久中文字幕导航| 中文字幕高清在线播放| 亚洲午夜久久| 国产不卡人人| 欧美精品日日操| 91精品国产自产在线丝袜啪| 国产在线|日韩| 国产欧美一区二区色老头|