背景
最近业务部门需要将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-%d %H:%M: