MySQL是一種常用的關(guān)系型數(shù)據(jù)庫,而HBase則是一個分布式的NoSQL數(shù)據(jù)庫。有時候,我們需要將MySQL的數(shù)據(jù)寫入到HBase中,以滿足各種需求。本文將介紹如何使用Java程序?qū)ySQL的數(shù)據(jù)寫入HBase。
// 導(dǎo)入所需的包 import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.client.ConnectionFactory; import org.apache.hadoop.hbase.client.Put; import org.apache.hadoop.hbase.client.Table; import org.apache.hadoop.hbase.util.Bytes; // 定義寫入HBase的方法 public static void writeToHBase(String tableName, ArrayListdataList) throws Exception { // 獲取HBase的配置 Configuration config = HBaseConfiguration.create(); // 設(shè)置ZooKeeper的IP地址和端口號 config.set("hbase.zookeeper.quorum", "ZK_IP"); config.set("hbase.zookeeper.property.clientPort", "ZK_PORT"); // 連接HBase Table table = ConnectionFactory.createConnection(config).getTable(TableName.valueOf(tableName)); // 遍歷數(shù)據(jù)列表,生成Put對象,并寫入HBase for (String[] data : dataList) { byte[] rowKey = Bytes.toBytes(data[0]); Put put = new Put(rowKey); for (int i = 1; i< data.length; i++) { String[] kv = data[i].split(":"); String cf = kv[0]; String qualifier = kv[1]; byte[] value = Bytes.toBytes(kv[2]); put.addColumn(Bytes.toBytes(cf), Bytes.toBytes(qualifier), value); } table.put(put); } // 關(guān)閉連接 table.close(); } // 定義讀取MySQL數(shù)據(jù)的方法 public static ArrayList readFromMySQL(String tableName) throws Exception { // 定義返回的數(shù)據(jù)列表 ArrayList dataList = new ArrayList (); // 獲取MySQL連接 Class.forName("com.mysql.jdbc.Driver"); Connection conn = DriverManager.getConnection("jdbc:mysql://MYSQL_IP:MYSQL_PORT/" + tableName, "USERNAME", "PASSWORD"); // 查詢數(shù)據(jù) PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM " + tableName); ResultSet rs = pstmt.executeQuery(); // 遍歷結(jié)果集,生成數(shù)據(jù)列表 while (rs.next()) { String rowKey = rs.getString("id"); String name = rs.getString("name"); String age = rs.getString("age"); String[] data = new String[] { rowKey, "info:name:" + name, "info:age:" + age }; dataList.add(data); } // 關(guān)閉連接 rs.close(); pstmt.close(); conn.close(); // 返回數(shù)據(jù)列表 return dataList; } // 使用以上方法寫入MySQL數(shù)據(jù)到HBase public static void main(String[] args) throws Exception { // 定義要寫入HBase的表名 String tableName = "student"; // 從MySQL中讀取數(shù)據(jù) ArrayList dataList = readFromMySQL(tableName); // 將數(shù)據(jù)寫入HBase writeToHBase(tableName, dataList); }
以上代碼首先定義了兩個方法,分別用于從MySQL中讀取數(shù)據(jù)和將數(shù)據(jù)寫入HBase。其中,從MySQL中讀取數(shù)據(jù)時,需要指定MySQL的IP地址、端口號、用戶名和密碼,以及要讀取的表名。而將數(shù)據(jù)寫入HBase時,則需要指定HBase的ZooKeeper的IP地址和端口號,以及要寫入的表名。
在使用以上代碼時,可以根據(jù)具體情況進行修改,以滿足個性化的需求。同時,還需要保證HBase和MySQL的連通性,以確保數(shù)據(jù)可以正常地從MySQL中讀取,并寫入到HBase中。
上一篇ado 鏈接mysql
下一篇mysql 寫入中文