Hbase导出数据成csv格式或flat文件

背景

最近业务部门需要将Hbase数据导出成csv格式文件,或是flat文件(平面格式)。
遇到的难点是,Hbase中无固定的列名。

语言

shell

环境

CentOS 7系统
Hbase 1.5.0

逻辑

在这里插入图片描述
Hbase文件导出后,通过分割文件,并行处理
主要通过“字典”的功能,确保每列都能导出

性能

目前将文件分成10个小文件,并行处理,
10分钟处理100万条数据

具体代码

export_file_from_hbase.sh

#!/bin/bash
#Hbase导出文件

#定义时间
export BATCH_DATETIME=`date +"%Y%m%d"`000000
export PROCESS_FOLDER=/home/sinobase01/data/test     #指定当前目录,防止文件误删除

#1. 查询语句
#需要在hbase中确保查询语句可执行,且结果为所需数据
export HBASE_TABLE=$1
export HBASE_QUERY=`cat hbase_query.hql`  #该部分只为hbase shell查询语句

#2.定义变量
export HBASE_OUTPUT_FILE=${
   HBASE_TABLE}_exported_file_${
   BATCH_DATETIME}.txt
export MAIN_LOG=export_hbase_file_process_${
   BATCH_DATETIME}.log
export SPLIT_FILE_NUMBER=10

check_hbase(){
   
        which hbase
        if [ $? -ne 0 ];then
                echo "[`date +"%Y-%m-%d %H:%M:%S"`] Hbase not found! Please check if Hbase software installed whithin current user."
        else
                echo "[`date +"%Y-%m-%d %H:%M:%S"`] Hbase check pass!"
        fi
}

export_hbase_file(){
   
        #清空文件
        cat /dev/null > ${
   HBASE_OUTPUT_FILE}
        echo "[`date +"%Y-%m-%d %H:%M:%S"`] ${HBASE_OUTPUT_FILE} data cleared!"
        #导出文件
        echo ${
   HBASE_QUERY}|hbase shell > ${
   HBASE_OUTPUT_FILE}
        if [ $? -ne 0 ];then
                echo "[`date +"%Y-%m-%d %H:%M:%S"`] failed to export file ${HBASE_OUTPUT_FILE}, please checked!"
        else
                echo "[`date +"%Y-%m-%
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的。 将 HDFS 上的 CSV 格式数据导入到 HBase 可以使用下面的步骤: 1. 将 CSV 文件转换 HBase 能够识别的 Hadoop InputFormat 类型,例如 Hadoop 中的 SequenceFile 格式。 2. 使用 Hadoop 的 ImportTsv 工具将数据导入到 HBase 表中。 3. 使用 HBase 的客户端 API(例如 Java API)或命令行工具(例如 hbase shell)来查询和操作表中的数据。 下面是具体的命令示例: 1. 将 CSV 文件转换 SequenceFile 格式: ``` hadoop jar /path/to/hadoop-streaming.jar \ -D mapreduce.job.output.key.comparator.class=org.apache.hadoop.mapreduce.lib.partition.KeyFieldBasedComparator \ -D mapreduce.map.output.key.field.separator=, \ -D mapreduce.partition.keycomparator.options=-k1,1 \ -input /path/to/input.csv \ -output /path/to/output \ -mapper /bin/cat \ -reducer /bin/cat \ -inputformat org.apache.hadoop.mapred.SequenceFileInputFormat \ -outputformat org.apache.hadoop.mapred.SequenceFileOutputFormat ``` 2. 使用 ImportTsv 工具将数据导入到 HBase 表中: ``` hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.columns=HBASE_ROW_KEY,col1,col2,col3 \ -Dimporttsv.bulk.output=/path/to/bulk/output \ -Dimporttsv.separator=, \ tablename /path/to/output ``` 3. 使用 HBase 客户端 API 或命令行工具来查询和操作表中的数据: 使用 Java API: ```java Configuration config = HBaseConfiguration.create(); Connection connection = ConnectionFactory.createConnection(config); Table table = connection.getTable(TableName.valueOf("tablename")); Get get = new Get(Bytes.toBytes("rowkey"));

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Albert_Fang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值