我需要从Hbase将1000万数据写入CSV文件。什么可以用来以更快的速度写入数据?

我需要从Hbase将1000万数据写入CSV文件。什么可以用来以更快的速度写入数据?,hbase,Hbase,我们有没有办法在短时间内实现数据写入 提前感谢。将其拆分为多个作业,每个作业提取数据的不同部分并写入相应的csv文件(地图),然后在完成后合并csv文件(减少) 如果可以,请在不同的机器上或在一台(多核)机器上运行作业,并将输出写入不同的磁盘。您需要查看数据,并使用行键将其分解为不同的部分。 使用行键设置扫描的STARTROW和STOPROW属性 现在您有了单独的扫描,您可以从不同的框中并行运行它们 Psuedo代码: OutputStream stream = new FileOutputSt

我们有没有办法在短时间内实现数据写入


提前感谢。

将其拆分为多个作业,每个作业提取数据的不同部分并写入相应的csv文件(地图),然后在完成后合并csv文件(减少)


如果可以,请在不同的机器上或在一台(多核)机器上运行作业,并将输出写入不同的磁盘。

您需要查看数据,并使用行键将其分解为不同的部分。 使用行键设置扫描的STARTROW和STOPROW属性

现在您有了单独的扫描,您可以从不同的框中并行运行它们

Psuedo代码:

OutputStream stream = new FileOutputStream("C:\home\you\csvfiles\mycsvfile1.csv");
BufferedWriter wtrBuffer = new BufferedWriter(new OutputStreamWriter(stream, "UTF-8"));
CSVWriter writer = new CSVWriter(wtrBuffer, ',');

HTable myTable = null;
try {
      myTable = new HTable(myConfig, "myTable");
} catch (IOException e) {      
  e.printStackTrace();
}

for (Result result : scanner) {
  if (result != null){
  // Just printing the keys because I don't know anything about your data
   writer.writeNext(Bytes.toString(result.getRow()));
}

try {
      myTable.close();
    } catch (IOException e) {        
      e.printStackTrace();
    }

try{

}catch(Exception ex){
   ex.printStackTrace();
}
finally {   
  System.out.println("Writing to disk...");
  writer.flush();
  writer.close();
  stream.flush();
  stream.close();
  System.out.println("Writing to disk...Complete");
}       
此代码使用opencsv:

确保每个扫描过程使用不同的文件名。您可以让每个进程写入共享文件夹/网络存储,或者写入本地文件,然后复制到网络存储。 完成所有过程后,如果尚未将所有csv文件(mycsvfile1…n.csv)复制到单个目录中,则可以将其复制到单个目录中

然后可以将它们合并到一个文件中

copy *.csv all.csv
然后打开all.csv,您的文件应该有1000万行


您也可以使用MR和一个仅映射作业来完成这项工作,该作业将数据写入hdfs中的文件。

您可以在HBASE表的顶部创建一个简单的外部配置单元表,然后在配置单元上使用select/export命令以CSV格式保存数据

步骤1:

hive> CREATE TABLE mapr_table_1(key int, value string)
    > STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
    > WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,cf1:val")
    > TBLPROPERTIES ("hbase.table.name" = "/user/mapr/xyz");
步骤2:从配置单元将数据获取到CSV中

INSERT OVERWRITE LOCAL DIRECTORY '/path/to/hive/csv' ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' SELECT * FROM hivetablename limit 1000000;

您可以使用
apachedrill
将输出重定向到CSV文件。apachedrill附带mapr软件

sqlline -u "jdbc:drill:" --outputformat=csv --run=fileWithSQL.sql > Output_CSV_file.csv
将从habse读取的查询放入
fileWithSQL.sql
文件中,然后运行上述命令

在sqlline中还有其他一些开关可能会有所帮助