Hbase数据导出实例_hbase shell 导出查询-程序员宅基地

技术标签: 大数据-hadoop  hbase  

 

      1. Hbase数据导出实例

需求:

根据时间范围、区域等条件查询,将hbase中终端采集数据最大时间、最小时间的日志数据导出

参考文档:

http://blog.csdn.net/qq_27078095/article/details/56482010

https://www.cnblogs.com/szw-blog/p/5512349.html

http://blog.csdn.net/javajxz008/article/details/61173213

http://www.cnblogs.com/husky/p/6422001.html

https://my.oschina.net/wangjiankui/blog/497658

https://www.2cto.com/net/201708/673854.html

http://www.cnblogs.com/husky/p/6764317.html

 

解决办法:

  1. 通过hbase自带导入导出将查询到的终端mac数据导出到指定目录

hbase org.apache.hadoop.hbase.mapreduce.Driver export 表名称    目录

这样导出是整个表数据,没法过滤,姑且暂时不能使用。

  1. 通过查询条件过滤导出

scan 'LOG20180108',{COLUMNS => 'INFO',LIMIT=>1,FILTER=>"(PrefixFilter('T')) AND (SingleColumnValueFilter('INFO','AreaCode',=,'binary:610103'))"}

导出到文件:

echo "scan 'LOG20180108',{COLUMNS => ['INFO'],LIMIT=>1,FILTER=>\"(PrefixFilter('T')) AND (SingleColumnValueFilter('INFO','AreaCode',=,'binary:610103'))\"}" | hbase shell > myText.csv

 

  1. 通过hive导出
  1. 将hbase表与hive临时表同步。
  2. 将hive临时表数据导入到真实表
  3. 将真实表数据导入数据库

脚本如下:

#!/bin/bash

 

#获取输入时间,默认为当前时间

get_time(){

    if [ 3 -eq $# ]

    then

        date=`date -d "+0 day $1" +%Y%m%d`

        enddate=`date -d "+1 day $2" +%Y%m%d`      

    elif [ 0 -eq $# ]

    then

        echo "无输入参数,则默认构建昨天."

        echo "若是批量构建,请输入时间段,格式为【$0 yyyy-mm-dd yyyy-mm-dd】."

        #read -p "若不输入参数则默认构建昨天数据,输入【y】继续构建昨日数据,输入【n】退出:" isBuild

        #case $isBuild in

        #y | Y)

            date=`date -d "+0 day yesterday" +%Y%m%d`

            enddate=`date +%Y%m%d`

        #   ;;

        #n | N)

        #   exit

        #   ;;

        #*)

        #   echo "输入错误,退出"

        #   exit

        #   ;;

        #esac

    else

        echo "输入有误."

        echo "若是批量构建,请输入时间段,格式为【$0 yyyy-mm-dd yyyy-mm-dd】."

        echo "若默认构建昨天数据,则不需要输入参数,直接执行【$0】."

    fi

}

 

 

 

#创建存储数据表结构

hive_table(){

    echo "create hive table start......."

    hive -S -e "DROP TABLE IF EXISTS LogTerminal;

    CREATE TABLE LogTerminal(rowkey string,TerminalID string,TerminalMac string,DeviceType string, Power string,Channel string,MaxPower string,TimeNear string,LonNear string,LatNear string,RouteMac string,SSID string, SSIDs string,SecurityType string,RealType string, RealCode string,TerminalType int,PcBrand string, Phone string,IMSI string,IMEI string,OS string,CustomerStartTime string,OffLineTime string, Model string,CoordinateX string,CoordinateY string, OffLineLon string,OffLineLat string,PcIP string, RouteType string,SessionID string,ProtoType string,CyberCode string,IsMove string,IsElectric string, SafeState string,GPIOState string,Serial string, GuildID string,Time string,ManufacturerCode string,AreaCode string,UnitCode string,MachineCode string, SystemType string,DATASOURCEID string,Lon string, Lat string,LatLon string,RESOURCETYPE string, AccessSystemID string,InterfaceID string,InterfaceGroupID string,WriterTime string )COMMENT 'LogTerminal Table' ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS PARQUET; "

    hive -S -e "DROP TABLE IF EXISTS LogTerminal_min;

    CREATE TABLE LogTerminal_min(rowkey string,TerminalID string,TerminalMac string,DeviceType string, Power string,Channel string,MaxPower string,TimeNear string,LonNear string,LatNear string,RouteMac string,SSID string, SSIDs string,SecurityType string,RealType string, RealCode string,TerminalType int,PcBrand string, Phone string,IMSI string,IMEI string,OS string,CustomerStartTime string,OffLineTime string, Model string,CoordinateX string,CoordinateY string, OffLineLon string,OffLineLat string,PcIP string, RouteType string,SessionID string,ProtoType string,CyberCode string,IsMove string,IsElectric string, SafeState string,GPIOState string,Serial string, GuildID string,Time string,ManufacturerCode string,AreaCode string,UnitCode string,MachineCode string, SystemType string,DATASOURCEID string,Lon string, Lat string,LatLon string,RESOURCETYPE string, AccessSystemID string,InterfaceID string,InterfaceGroupID string,WriterTime string )COMMENT 'LogTerminal Table' ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS PARQUET; "

    hive -S -e "DROP TABLE IF EXISTS LogTerminal_max;

    CREATE TABLE LogTerminal_max(rowkey string,TerminalID string,TerminalMac string,DeviceType string, Power string,Channel string,MaxPower string,TimeNear string,LonNear string,LatNear string,RouteMac string,SSID string, SSIDs string,SecurityType string,RealType string, RealCode string,TerminalType int,PcBrand string, Phone string,IMSI string,IMEI string,OS string,CustomerStartTime string,OffLineTime string, Model string,CoordinateX string,CoordinateY string, OffLineLon string,OffLineLat string,PcIP string, RouteType string,SessionID string,ProtoType string,CyberCode string,IsMove string,IsElectric string, SafeState string,GPIOState string,Serial string, GuildID string,Time string,ManufacturerCode string,AreaCode string,UnitCode string,MachineCode string, SystemType string,DATASOURCEID string,Lon string, Lat string,LatLon string,RESOURCETYPE string, AccessSystemID string,InterfaceID string,InterfaceGroupID string,WriterTime string )COMMENT 'LogTerminal Table' ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS PARQUET; "

    echo "create hive table end......."

}

 

#创建临时终端日志表结构,并将hbase表和hive临时表关联,然后根据条件查询临时表数据插入到真实表中

hive_task(){

    echo "hive task $1 $2 $3  ..."

    DATA_FORMAT=`date -d "$1" +%Y-%m-%d`

    TABLE_NAME=LOG$1

    AREA_CODE=$3

   

    echo $DATA_FORMAT

    echo $TABLE_NAME

    echo $AREA_CODE

   

    hive -S -e "DROP TABLE  IF EXISTS TempLogTerminal;

    CREATE EXTERNAL TABLE TempLogTerminal(key string,TerminalID string,TerminalMac string,DeviceType string, Power string,Channel string,MaxPower string,TimeNear string,LonNear string,LatNear string,RouteMac string,SSID string, SSIDs string,SecurityType string,RealType string, RealCode string,TerminalType int,PcBrand string, Phone string,IMSI string,IMEI string,OS string,CustomerStartTime string,OffLineTime string, Model string,CoordinateX string,CoordinateY string, OffLineLon string,OffLineLat string,PcIP string, RouteType string,SessionID string,ProtoType string,CyberCode string,IsMove string,IsElectric string, SafeState string,GPIOState string,Serial string, GuildID string,Time string,ManufacturerCode string,AreaCode string,UnitCode string,MachineCode string,SystemType string,DATASOURCEID string,Lon string, Lat string,LatLon string,RESOURCETYPE string, AccessSystemID string,InterfaceID string,InterfaceGroupID string,WriterTime string)  ROW FORMAT SERDE 'org.apache.hadoop.hive.hbase.HBaseSerDe' STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH SERDEPROPERTIES('hbase.columns.mapping'=':key,INFO:TerminalID,INFO:TerminalMac,INFO:DeviceType,INFO:Power,INFO:Channel,INFO:MaxPower,INFO:TimeNear,INFO:LonNear,INFO:LatNear,INFO:RouteMac,INFO:SSID,INFO:SSIDs,INFO:SecurityType,INFO:RealType,INFO:RealCode,INFO:TerminalType,INFO:PcBrand,INFO:Phone,INFO:IMSI,INFO:IMEI,INFO:OS,INFO:CustomerStartTime,INFO:OffLineTime,INFO:Model,INFO:CoordinateX,INFO:CoordinateY,INFO:OffLineLon,INFO:OffLineLat,INFO:PcIP,INFO:RouteType,INFO:SessionID,INFO:ProtoType,INFO:CyberCode,INFO:IsMove,INFO:IsElectric,INFO:SafeState,INFO:GPIOState,INFO:Serial,INFO:GuildID,INFO:Time,INFO:ManufacturerCode,INFO:AreaCode,INFO:UnitCode,INFO:MachineCode,INFO:SystemType,INFO:DATASOURCEID,INFO:Lon,INFO:Lat,INFO:LatLon,INFO:RESOURCETYPE,INFO:AccessSystemID,INFO:InterfaceID,INFO:InterfaceGroupID,INFO:WriterTime') TBLPROPERTIES('hbase.table.name'='$TABLE_NAME') ;

    INSERT $2 TABLE logterminal SELECT key as rowkey,TerminalID,TerminalMac,DeviceType,Power,Channel,MaxPower,TimeNear,LonNear,LatNear,RouteMac,SSID,SSIDs,SecurityType,RealType,RealCode,TerminalType,PcBrand, Phone,IMSI,IMEI,OS,CustomerStartTime,OffLineTime,Model,CoordinateX,CoordinateY,OffLineLon,OffLineLat,PcIP,RouteType,SessionID,ProtoType,CyberCode,IsMove,IsElectric, SafeState,GPIOState,Serial,GuildID,Time,ManufacturerCode,AreaCode,UnitCode,MachineCode,SystemType,DATASOURCEID,Lon,Lat,LatLon,RESOURCETYPE,AccessSystemID,InterfaceID,InterfaceGroupID,WriterTime

    FROM TempLogTerminal WHERE RESOURCETYPE=32 AND  AreaCode='$AREA_CODE';"

   

    echo "hive task end......."

}

 

#创建sql表

sqlserver_table(){

"

if exists (select * from sysobjects where name='LogTerminal_min')

drop table LogTerminal_min

 

CREATE  TABLE LogTerminal_min(

    rowkey nvarchar(200),TerminalID bigint,TerminalMac nvarchar(200),DeviceType bigint,

    Power bigint,Channel bigint,MaxPower bigint,

    TimeNear nvarchar(200),LonNear float,LatNear float,

    RouteMac nvarchar(200),SSID nvarchar(200),

    SSIDs nvarchar(200),SecurityType nvarchar(200),RealType bigint,

    RealCode nvarchar(200),TerminalType bigint,PcBrand nvarchar(200),

    Phone nvarchar(200),IMSI nvarchar(200),IMEI nvarchar(200),

    OS nvarchar(200),CustomerStartTime nvarchar(200),OffLineTime nvarchar(200),

    Model nvarchar(200),CoordinateX nvarchar(200),CoordinateY nvarchar(200),

    OffLineLon float,OffLineLat float,PcIP nvarchar(200),

    RouteType bigint,SessionID nvarchar(200),ProtoType bigint,

    CyberCode nvarchar(200),IsMove bigint,IsElectric bigint,

    SafeState bigint,GPIOState bigint,Serial nvarchar(200),

    GuildID nvarchar(200),Time nvarchar(200),ManufacturerCode nvarchar(200),

    AreaCode nvarchar(200),UnitCode nvarchar(200),MachineCode nvarchar(200),

    SystemType nvarchar(200),DATASOURCEID bigint,Lon float,

    Lat float,LatLon nvarchar(200),RESOURCETYPE bigint,

    AccessSystemID bigint,InterfaceID bigint,InterfaceGroupID bigint,

    WriterTime nvarchar(200)

);

 

if exists (select * from sysobjects where name='LogTerminal_max')

drop table LogTerminal_max

 

CREATE  TABLE LogTerminal_max(

    rowkey nvarchar(200),TerminalID bigint,TerminalMac nvarchar(200),DeviceType bigint,

    Power bigint,Channel bigint,MaxPower bigint,

    TimeNear nvarchar(200),LonNear float,LatNear float,

    RouteMac nvarchar(200),SSID nvarchar(200),

    SSIDs nvarchar(200),SecurityType nvarchar(200),RealType bigint,

    RealCode nvarchar(200),TerminalType bigint,PcBrand nvarchar(200),

    Phone nvarchar(200),IMSI nvarchar(200),IMEI nvarchar(200),

    OS nvarchar(200),CustomerStartTime nvarchar(200),OffLineTime nvarchar(200),

    Model nvarchar(200),CoordinateX nvarchar(200),CoordinateY nvarchar(200),

    OffLineLon float,OffLineLat float,PcIP nvarchar(200),

    RouteType bigint,SessionID nvarchar(200),ProtoType bigint,

    CyberCode nvarchar(200),IsMove bigint,IsElectric bigint,

    SafeState bigint,GPIOState bigint,Serial nvarchar(200),

    GuildID nvarchar(200),Time nvarchar(200),ManufacturerCode nvarchar(200),

    AreaCode nvarchar(200),UnitCode nvarchar(200),MachineCode nvarchar(200),

    SystemType nvarchar(200),DATASOURCEID bigint,Lon float,

    Lat float,LatLon nvarchar(200),RESOURCETYPE bigint,

    AccessSystemID bigint,InterfaceID bigint,InterfaceGroupID bigint,

    WriterTime nvarchar(200)

);

    "

}

 

#将数据导入到sqlserver中

import_sqlserver(){

    echo " import sqlserver start......."

    sqoop export -connect 'jdbc:sqlserver://192.168.2.219; username=nsmc53; password=123456;database=WFBDCMain'  -table LogTerminal_min --hcatalog-database default --hcatalog-table LogTerminal_min --num-mappers 5;

    sqoop export -connect 'jdbc:sqlserver://192.168.2.219; username=nsmc53; password=123456;database=WFBDCMain'  -table LogTerminal_max --hcatalog-database default --hcatalog-table LogTerminal_max --num-mappers 5;

   

    echo " import sqlserver end......."

}

 

#将hive数据导出到本地目录

export_hive_local(){

    echo " export hive to local start......."

    mkdir -p /home/hive/min

    mkdir -p /home/hive/max

    hive -S -e "\

    insert overwrite local directory '/home/hive/min'   ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' select a.* from LogTerminal a inner join(select TerminalMac,min(time) time from LogTerminal group by TerminalMac) b on a.TerminalMac = b.TerminalMac and a.time = b.time order by a.TerminalMac ;\

    insert overwrite local directory '/home/hive/max'   ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' select a.* from LogTerminal a inner join(select TerminalMac,max(time) time from LogTerminal group by TerminalMac) b on a.TerminalMac = b.TerminalMac and a.time = b.time order by a.TerminalMac ;"

   

#将hive数据导出到csv文件

    hive -e " set hive.cli.print.header=true;select a.* from LogTerminal a inner join(select TerminalMac,min(time) time from LogTerminal group by TerminalMac) b on a.TerminalMac = b.TerminalMac and a.time = b.time order by a.TerminalMac ;" >> /home/hive/logterminal-min.csv

   

    echo "export hive to local end......."

}

 

#将hive数据根据查询条件过滤导入到其他表

export_hive(){

    echo " export hive to sqlserver start......."

#查询时间最小mac

    hive -S -e "INSERT OVERWRITE TABLE LogTerminal_min select a.* from LogTerminal a inner join(select TerminalMac,min(time) time from LogTerminal group by TerminalMac) b on a.TerminalMac = b.TerminalMac and a.time = b.time order by a.TerminalMac ;";

#查询时间最大mac

    hive -S -e "INSERT OVERWRITE TABLE LogTerminal_max select a.* from LogTerminal a inner join(select TerminalMac,max(time) time from LogTerminal group by TerminalMac) b on a.TerminalMac = b.TerminalMac and a.time = b.time order by a.TerminalMac ;";

   

    echo "export hive to sqlserver end......."

}

 

main(){

#创建hive表LogTerminal

    echo " create hive table LogTerminal......."

    hive_table

   

#生成表结构时间范围

    get_time $*

    Style="OVERWRITE"

    date1=$date

    while [[ $date1 < $enddate ]]

    do

        echo "$date"

##创建临时终端日志表TempLogTerminal关联hbase表,重新运行时删除以前创建表结构,并将查询数据导入LogTerminal

        echo " exec  hive_task....... $date1 $Style $3 "

        hive_task $date1 $Style $3

        date1=`date -d "+1 day $date1" +%Y%m%d`

        Style="INTO"

    done

#从hive表LogTerminal日志表导出到本地目录/home/hive

    echo " export hive to sqlserver ......."

    export_hive

    echo " import sqlserver ......."

    import_sqlserver

    echo " query logterminal end......."

}

 

main $*

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/seashouwang/article/details/81699329

智能推荐

2022黑龙江最新建筑八大员(材料员)模拟考试试题及答案_料账的试题-程序员宅基地

文章浏览阅读529次。百分百题库提供建筑八大员(材料员)考试试题、建筑八大员(材料员)考试预测题、建筑八大员(材料员)考试真题、建筑八大员(材料员)证考试题库等,提供在线做题刷题,在线模拟考试,助你考试轻松过关。310项目经理部应编制机械设备使用计划并报()审批。A监理单位B企业C建设单位D租赁单位答案:B311对技术开发、新技术和新工艺应用等情况进行的分析和评价属于()。A人力资源管理考核B材料管理考核C机械设备管理考核D技术管理考核答案:D312建筑垃圾和渣土._料账的试题

chatgpt赋能python:Python自动打开浏览器的技巧-程序员宅基地

文章浏览阅读614次。本文由chatgpt生成,文章没有在chatgpt生成的基础上进行任何的修改。以上只是chatgpt能力的冰山一角。作为通用的Aigc大模型,只是展现它原本的实力。对于颠覆工作方式的ChatGPT,应该选择拥抱而不是抗拒,未来属于“会用”AI的人。AI职场汇报智能办公文案写作效率提升教程 专注于AI+职场+办公方向。下图是课程的整体大纲下图是AI职场汇报智能办公文案写作效率提升教程中用到的ai工具。_python自动打开浏览器

Linux中安装JDK-RPM_linux 安装jdk rpm-程序员宅基地

文章浏览阅读545次。Linux中安装JDK-RPM方式_linux 安装jdk rpm

net高校志愿者管理系统-73371,计算机毕业设计(上万套实战教程,赠送源码)-程序员宅基地

文章浏览阅读25次。免费领取项目源码,请关注赞收藏并私信博主,谢谢-高校志愿者管理系统主要功能模块包括页、个人资料(个人信息。修改密码)、公共管理(轮播图、系统公告)、用户管理(管理员、志愿用户)、信息管理(志愿资讯、资讯分类)、活动分类、志愿活动、报名信息、活动心得、留言反馈,采取面对对象的开发模式进行软件的开发和硬体的架设,能很好的满足实际使用的需求,完善了对应的软体架设以及程序编码的工作,采取SQL Server 作为后台数据的主要存储单元,采用Asp.Net技术进行业务系统的编码及其开发,实现了本系统的全部功能。

小米宣布用鸿蒙了吗,小米OV对于是否采用鸿蒙保持沉默,原因是中国制造需要它们...-程序员宅基地

文章浏览阅读122次。原标题:小米OV对于是否采用鸿蒙保持沉默,原因是中国制造需要它们目前华为已开始对鸿蒙系统大规模宣传,不过中国手机四强中的另外三家小米、OPPO、vivo对于是否采用鸿蒙系统保持沉默,甚至OPPO还因此而闹出了一些风波,对此柏铭科技认为这是因为中国制造当下需要小米OV几家继续将手机出口至海外市场。 2020年中国制造支持中国经济渡过了艰难的一年,这一年中国进出口贸易额保持稳步增长的势头,成为全球唯一..._小米宣布用鸿蒙系统

Kafka Eagle_kafka eagle git-程序员宅基地

文章浏览阅读1.3k次。1.Kafka Eagle实现kafka消息监控的代码细节是什么?2.Kafka owner的组成规则是什么?3.怎样使用SQL进行kafka数据预览?4.Kafka Eagle是否支持多集群监控?1.概述在《Kafka 消息监控 - Kafka Eagle》一文中,简单的介绍了 Kafka Eagle这款监控工具的作用,截图预览,以及使用详情。今天_kafka eagle git

随便推点

Eva.js是什么(互动小游戏开发)-程序员宅基地

文章浏览阅读1.1k次,点赞29次,收藏19次。Eva.js 是一个专注于开发互动游戏项目的前端游戏引擎。:Eva.js 提供开箱即用的游戏组件供开发人员立即使用。是的,它简单而优雅!:Eva.js 由高效的运行时和渲染管道 (Pixi.JS) 提供支持,这使得释放设备的全部潜力成为可能。:得益于 ECS(实体-组件-系统)架构,你可以通过高度可定制的 API 扩展您的需求。唯一的限制是你的想象力!_eva.js

OC学习笔记-Objective-C概述和特点_objective-c特点及应用领域-程序员宅基地

文章浏览阅读1k次。Objective-C概述Objective-C是一种面向对象的计算机语言,1980年代初布莱德.考斯特在其公司Stepstone发明Objective-C,该语言是基于SmallTalk-80。1988年NeXT公司发布了OC,他的开发环境和类库叫NEXTSTEP, 1994年NExt与Sun公司发布了标准的NEXTSTEP系统,取名openStep。1996_objective-c特点及应用领域

STM32学习笔记6:TIM基本介绍_stm32 tim寄存器详解-程序员宅基地

文章浏览阅读955次,点赞20次,收藏16次。TIM(Timer)定时器定时器可以对输入的时钟进行计数,并在计数值达到设定值时触发中断16位计数器、预分频器、自动重装寄存器的时基单元,在 72MHz 计数时钟下可以实现最大 59.65s 的定时,59.65s65536×65536×172MHz59.65s65536×65536×721​MHz不仅具备基本的定时中断功能,而且还包含内外时钟源选择、输入捕获、输出比较、编码器接口、主从触发模式等多种功能。_stm32 tim寄存器详解

前端基础语言HTML、CSS 和 JavaScript 学习指南_艾编程学习资料-程序员宅基地

文章浏览阅读1.5k次。对于任何有兴趣学习前端 Web 开发的人来说,了解 HTML、CSS 和JavaScript 之间的区别至关重要。这三种前端语言都是您访问过的每个网站的用户界面构建块。而且,虽然每种语言都有不同的功能重点,但它们都可以共同创建令人兴奋的交互式网站,让用户保持参与。因此,您会发现学习所有三种语言都很重要。如果您有兴趣从事前端开发工作,可以通过多种方式学习这些语言——在艾编程就可以参与到学习当中来。在本文中,我们将回顾每种语言的特征、它们如何协同工作以及您可以在哪里学习它们。HTML vs C._艾编程学习资料

三维重构(10):PCL点云配准_局部点云与全局点云配准-程序员宅基地

文章浏览阅读2.8k次。点云配准主要针对点云的:不完整、旋转错位、平移错位。因此要得到完整点云就需要对局部点云进行配准。为了得到被测物体的完整数据模型,需要确定一个合适的坐标系变换,将从各个视角得到的点集合并到一个统一的坐标系下形成一个完整的数据点云,然后就可以方便地进行可视化,这就是点云数据的配准。点云配准技术通过计算机技术和统计学规律,通过计算机计算两个点云之间的错位,也就是把在不同的坐标系下的得到的点云进行坐标变..._局部点云与全局点云配准

python零基础学习书-Python零基础到进阶必读的书藉:Python学习手册pdf免费下载-程序员宅基地

文章浏览阅读273次。提取码:0oorGoogle和YouTube由于Python的高可适应性、易于维护以及适合于快速开发而采用它。如果你想要编写高质量、高效的并且易于与其他语言和工具集成的代码,《Python学习手册:第4 版》将帮助你使用Python快速实现这一点,不管你是编程新手还是Python初学者。本书是易于掌握和自学的教程,根据作者Python专家Mark Lutz的著名培训课程编写而成。《Python学习..._零基础学pythonpdf电子书