Hadoop学习笔记——1.java读取Oracle中表的数据,创建新文件写入Hdfs

在编写mapreduce应用程序时,首先要解决的就是把应用系统中的数据先进行整理以文本文件的方式存储到hdfs上,或者将数据整理后保存到其他mapreduce支持的数据源上(如HBase),本文主要是通过java应用程序把Oracle数据表中的数据进行读取,然后写入到Hdfs上,供mapreduce进行应用。

1、java通过jdbc连接Oralce;
1-1)数据库连接对象:
Connection con = null;
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
### 回答1: 可以使用Java的HBase API来连接HBase并读取表中的数据。 示例代码如下: ```java import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.TableName; import org.apache.hadoop.hbase.client.Connection; import org.apache.hadoop.hbase.client.ConnectionFactory; import org.apache.hadoop.hbase.client.Result; import org.apache.hadoop.hbase.client.ResultScanner; import org.apache.hadoop.hbase.client.Scan; import org.apache.hadoop.hbase.client.Table; public class HBaseReader { public static void main(String[] args) throws Exception { // 配置HBase连接参数 Configuration conf = HBaseConfiguration.create(); conf.set("hbase.zookeeper.quorum", "zookeeper1,zookeeper2,zookeeper3"); conf.set("hbase.zookeeper.property.clientPort", "2181"); // 建立HBase连接 Connection conn = ConnectionFactory.createConnection(conf); // 获取表对象 Table table = conn.getTable(TableName.valueOf("mytable")); // 创建Scan对象,扫描整个表 Scan scan = new Scan(); ResultScanner scanner = table.getScanner(scan); // 遍历扫描结果 for (Result result : scanner) { byte[] row = result.getRow(); byte[] col1 = result.getValue("cf1".getBytes(), "col1".getBytes()); byte[] col2 = result.getValue("cf1".getBytes(), "col2".getBytes()); // 将行键、列族、列名、列值转换为字符串 String rowStr = new String(row); String col1Str = new String(col1); String col2Str = new String(col2); System.out.println("Row: " + rowStr + ", Column Family 1 - Column 1: " + col1Str + ", Column Family 1 - Column 2: " + col2Str); } // 关闭HBase连接 conn.close(); } } ``` 上面的代码会扫描HBase中名为"mytable"的表的所有数据,并将每一行的行键、列族、列名、列值输出到控制 ### 回答2: 在Java读取HBase表的数据并存储,并通过IO流将其写入到本地文件中,可以通过以下步骤完成: 1. 导入所需的Java库和HBase客户端库。 2. 创建HBase配置对象,并设置HBase的连接参数。 3. 创建HBase连接对象。 4. 创建HBase表对象。 5. 创建用于扫描表的扫描器对象。 6. 使用扫描器对象进行表的扫描,并获取结果集。 7. 创建本地文件的输出流对象。 8. 遍历结果集,将每行数据写入本地文件。 9. 关闭结果集和输出流。 10. 关闭HBase连接。 下面是一个简单的示例代码: ```java import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.client.*; import org.apache.hadoop.hbase.util.Bytes; import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; public class HBaseClient { public static void main(String[] args) { // 创建HBase配置对象 Configuration config = HBaseConfiguration.create(); config.set("hbase.zookeeper.quorum", "localhost:2181"); // HBase的Zookeeper连接地址 try { // 创建HBase连接对象 Connection connection = ConnectionFactory.createConnection(config); // 创建HBase表对象 Table table = connection.getTable(TableName.valueOf("your_table_name")); // 替换为需要读取的表名 // 创建用于扫描表的扫描器对象 Scan scan = new Scan(); ResultScanner scanner = table.getScanner(scan); // 创建本地文件的输出流对象 BufferedWriter writer = new BufferedWriter(new FileWriter("local_file.txt")); // 替换为本地文件的路径 // 遍历结果集,将每行数据写入本地文件 for (Result result : scanner) { byte[] valueBytes = result.getValue(Bytes.toBytes("column_family"), Bytes.toBytes("column_name")); // 替换为需要读取的列族名称和列名 String value = Bytes.toString(valueBytes); writer.write(value); writer.newLine(); } // 关闭结果集和输出流 scanner.close(); writer.close(); // 关闭HBase连接 connection.close(); } catch (IOException e) { e.printStackTrace(); } } } ``` 以上代码中的"your_table_name"需要替换为要读取的HBase表的名称,"column_family"和"column_name"需要替换为要读取的列族和列的名称。 请注意,此代码只适用于小型数据集。对于大型数据集,可能需要进行分页读取和并行处理才能保证效率和可靠性。 ### 回答3: Java可以使用HBase的Java API读取HBase表中的数据,并通过IO流将数据写入到本地文件中。首先,需要引入HBase的Java API相关的依赖包。 ```java import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.*; import org.apache.hadoop.hbase.client.*; import org.apache.hadoop.hbase.util.Bytes; import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; public class HBaseDataWriter { public static void main(String[] args) { Configuration conf = HBaseConfiguration.create(); conf.set("hbase.zookeeper.quorum", "localhost"); // 设置HBase的ZooKeeper地址 try { Connection connection = ConnectionFactory.createConnection(conf); TableName tableName = TableName.valueOf("your_table_name"); // 替换为实际表的名称 Table table = connection.getTable(tableName); // 设置查询条件 Scan scan = new Scan(); scan.addFamily(Bytes.toBytes("your_column_family")); // 替换为实际列族的名称 ResultScanner scanner = table.getScanner(scan); FileWriter fileWriter = new FileWriter("output.txt"); BufferedWriter writer = new BufferedWriter(fileWriter); // 遍历结果并写入文件 for (Result result : scanner) { byte[] row = result.getRow(); byte[] value = result.getValue(Bytes.toBytes("your_column_family"), Bytes.toBytes("your_column")); // 替换为实际的列族和列名称 String rowKey = Bytes.toString(row); String columnValue = Bytes.toString(value); writer.write("RowKey: " + rowKey + ", ColumnValue: " + columnValue); writer.newLine(); } // 关闭资源 writer.close(); fileWriter.close(); scanner.close(); table.close(); connection.close(); } catch (IOException e) { e.printStackTrace(); } } } ``` 上述代码中,首先创建HBase的配置对象,并设置HBase的ZooKeeper地址。然后使用ConnectionFactory根据配置创建一个Connection对象。接着,定义待读取的表名和列族名,并获取表对象。接下来,创建一个Scan对象,并进行扫描查询。然后,声明一个BufferedWriter对象用于写入文件,并创建一个文件输出流。在遍历Scan结果时,获取每一个行键和列值,并将其写入文件中。最后,关闭相关资源,包括表、扫描器、文件写入器和连接等。 需要注意的是,上述代码仅适用于使用HBase的默认构造函数创建表,如果表中包含多个列族,则需要进行相应的修改。此外,需要根据实际情况设置HBase的ZooKeeper地址、表名、列族名、列名以及输出文件名等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值