package com.ws.bulkloader
import org.apache.hadoop.fs.Path
import org.apache.hadoop.hbase.client.ConnectionFactory
import org.apache.hadoop.hbase.{HBaseConfiguration, KeyValue, TableName}
import org.apache.hadoop.hbase.io.ImmutableBytesWritable
import org.apache.hadoop.hbase.mapreduce.HFileOutputFormat2
import org.apache.hadoop.hbase.tool.LoadIncrementalHFiles
import org.apache.hadoop.hbase.util.Bytes
import org.apache.hadoop.mapreduce.Job
import org.apache.spark.rdd.RDD
import org.apache.spark.sql.SparkSession
import scala.collection.mutable.ListBuffer
object HiveBulk2Hbase {
def main(args: Array[String]): Unit = {
// 读取hive数据
val spark = SparkSession.builder()
.enableHiveSupport()
.appName("Hive bulkloader 2 Hbase")
.master("local")
.getOrCreate()
import spark.implicits._
val hivetable = spark.read.table("dws17.app_trf_agr_session")
val hbaserows: RDD[(String, String, String, String)] = hivetable.flatMap(row => {
val guid = row.getAs[String]("guid") + ""
val session_id = row.getAs[String]("session_id") + ""
val start_ts = row.getAs[Long]("start_ts") + ""
val end_ts = row.getAs[Long]("end_ts") + ""
val first_page_id = row.getAs[String]("first_page_id") + ""
val last_page_id = row.getAs[String]("last_page_id") + ""
val pv_cnt = row.getAs[Int]("pv_cnt") + ""
val isnew = row.getAs[Int]("isnew") + ""
val hour_itv = row.getAs[Int]("hour_itv") + ""
val province = row.getAs[String]("province") + ""
val city = row.getAs[String]("city") + ""
val region = row.getAs[String]("region") + ""
val device_type = row.getAs[String]("device_type") + ""
val lst = new ListBuffer[(String, String, String, String)]
// rowkey, family , qualifier ,value
lst += ((start_ts + "|" + session_id, "f", "guid", guid))
lst += ((start_ts + "|" + session_id, "f", "session_id", session_id))
lst += ((start_ts + "|" + session_id, "f", "start_ts", start_ts))
lst += ((start_ts + "|" + session_id, "f", "end_ts", end_ts))
lst += ((start_ts + "|" + session_id, "f", "first_page_id", first_page_id))
lst += ((start_ts + "|" + session_id, "f", "last_page_id", last_page_id))
lst += ((start_ts + "|" + session_id, "f", "pv_cnt", pv_cnt))
lst += ((start_ts + "|" + session_id, "f", "isnew", isnew))
lst += ((start_ts + "|" + session_id, "f", "hour_itv", hour_itv))
lst += ((start_ts + "|" + session_id, "f", "province", province))
lst += ((start_ts + "|" + session_id, "f", "city", city))
lst += ((start_ts + "|" + session_id, "f", "region", region))
lst += ((start_ts + "|" + session_id, "f", "device_type", device_type))
lst
// hive中的一行 对应hbase中的多行,所以,把hive一行根据列名拆成多行,放到一个list中,
// 然后flaatMap 变成多行,另外需要根据 主键,列族,列名排好序才能生成hfile
}).filter(tp => !tp._1.contains("null")).rdd.sortBy(x=>(x._1,x._2,x._3))
// hbase 需要的 数据类型为(ImmutableBytesWritable,KeyValue)
val writedata = hbaserows.map(tp => {
val key = new ImmutableBytesWritable(Bytes.toBytes(tp._1))
val value = new KeyValue(Bytes.toBytes(tp._1),Bytes.toBytes(tp._2), Bytes.toBytes(tp._3), Bytes.toBytes(tp._4))
(key, value)
})
val conf = HBaseConfiguration.create()
conf.set("fs.defaultFS","hdfs://dream1:9000")
conf.set("hbase.zookeeper.quorum","dream1:2181,dream2:2181,dream3:2181")
val job = Job.getInstance(conf)
val conn = ConnectionFactory.createConnection(conf)
val app_trf_agr_session = TableName.valueOf("app_trf_agr_session")
val table = conn.getTable(app_trf_agr_session)
val locator = conn.getRegionLocator(app_trf_agr_session)
// 创建HFileOutputFormat
HFileOutputFormat2.configureIncrementalLoad(job,table,locator)
val outPath = "/bulkload/session_agr"
// 保存Hfile
writedata.saveAsNewAPIHadoopFile(outPath,classOf[ImmutableBytesWritable],classOf[KeyValue],classOf[HFileOutputFormat2],job.getConfiguration)
val load = new LoadIncrementalHFiles(conf)
// 通知master写入增量元数据信息
load.doBulkLoad(new Path(outPath),conn.getAdmin,table,locator)
spark.close()
}
}
相关推荐
VisualStudio2022启动报错
把Users\...\AppData\Local\Microsoft\VisualStudio\11.0\ComponentModelCache中的Microsoft.VisualStudio.Default.cache这个文件移除,再重启vs,各项功能都能正常使用了。第一次使用方法1有效果,不知道什么原因后面又报错再删除缓存文件无效了,最后使用方法2启动VS成功。vs2022启动时,报错弹框,在ActivityLog查看具体报错信息,报错原因未知。网上搜索到两种解决方法。方法1:删除缓存文件。
使用HFileOutputFormat2进行HBase bulk load时的常见错误
最近在用HFileOutputFormat2进行HBase bulk load数据时出现了以下错误,记录下供有相同错误的童鞋们查阅。 异常1:java.io.IOException: Mkdirs failed to create /user/adorechen/hbase-staging Exception in thread "main" java.io.IOExceptio...
狂神说docker(最全笔记)
一.Docker入门 1. Docker 为什么会出现 2. Docker的历史 3.Docker最新超详细版教程通俗易懂 Docker是基于Go语言开发的!开源项目 官网 官方文档Docker文档是超详细的 仓库地址 4. 虚拟化技术和容器化技术对比 4.1. 虚拟化技术的缺点 资源占用十分多 冗余步骤多 启动很慢 2.2. 容器化技术 比较Docker和虚拟化技术的不同 传统虚拟机, 虚拟出一条硬件,运行一个完整的操作系统,然后在这个系统上安装和运行软.
Scala Spark HFileOutputFormat2.configureIncrementalLoadMap写HFile并doBulkLoad方式导入到HBase
Spark写HFile不太建议: 1)一般写HFile是因为数据量很大,才使用这种方式,不然一般的API就可以满足; 2)用Spark写大量数据,中途需要去做排序,需要很大的内存与CPU,这种资源的使用是巨大的。 3)因为Executor内存的限制,CPU的限制,每次能写的数据量是有限的,并不能像MR一样可以写2T的数据或者更多。 4)Spark代码还是很费时的,在排序的时候。MR3个月...
AI工程化之生成式UI & A2UI(一)
本文系统介绍了生成式UI和Google A2UI技术。生成式UI通过AI直接生成前端代码(完全生成式)或DSL(混合式),实现千人千面的动态界面和研发提效。Google A2UI提出组件级和消息级协议,采用JSON规范实现渲染框架解耦,支持多端渲染。文章详细阐述了A2UI的架构设计,包括协议生成、服务端处理和渲染器实现,并对比了与传统前端框架的差异,指出A2UI本质是UI=F(AI(UI)+AI(state))的创新模式。最后通过playground项目展示了A2UI的实践应用。
数控弯管机xyz转换ybc的算法_花了一年时间开发的三维弯管机交互式转档软件(三维管子模型UG,SOLIDWORK,PRO/E文件转成YBC)...
在弯管机加工中,由管子模型生成可直接进行弯管加工的YBC数据可以大大提高弯管编程过程.传统的做法是先用dxf数据文件(用autocad绘制管子的轴心线数据)转出XYZ数据,然后由XYZ数据转成YBC数据,而且大部分厂家对文件版本以及软件做管方式都有不少限制,这大大花费了用户的时间跟精力.随着企业的信息化管理以及不断的技术升级,传统用autocad线条模式来描述管子的方式正在被用户用PRO/E,UG...
MapReduce写HFile,doBulkLoad方式批量导入到HBase(用 HFileOutputFormat2.configureIncrementalLoadMap方式推荐)
上一章博文分析了HFileOutputFormat2.configureIncrementalLoad的使用方法以及弊端。讲述了configureIncrementalLoad内部源码已经给我们设定了Reduce过程,包括map和reduce的输出格式(KeyValue或者Put)、reduce的数量等。而configureIncrementalLoadMap方法没有,所以在生成j...
Ubuntu22.04+PX4+Gazebo:从零到一构建无人机仿真开发环境
本文详细介绍了在Ubuntu22.04系统下搭建PX4+Gazebo无人机仿真开发环境的完整流程。从基础环境配置、PX4固件安装到Gazebo仿真环境搭建,提供了实用命令和常见问题解决方案,帮助开发者快速构建高效的无人机开发环境。
hbase 研究 :LoadIncrementalHFiles/HFileOutputFormat2 cannot be resolved
在研究hadoop存入hbase方式中 想要去使用BulkLoad的方式去存入 但发现jar引不进来 起初想是否是hbase版本更迭 某些方法被弃用,结果试了一边,浪费了大把时光,发现原来是hbase-server.jar没有被引入((┬_┬)) 转载于:https://www.cnblogs.com/njh2017/p/8696772.html...
从CMT2300A实战出发:Sub1G射频匹配电路设计要点与315MHz应用详解
本文从CMT2300A芯片实战出发,详细解析Sub1G射频匹配电路设计要点,特别针对315MHz应用场景。内容涵盖频段划分逻辑、调制方式选择、晶体振荡器设计等基础认知,以及315MHz匹配电路物料选型、巴伦网络处理等实战技巧,并分享PCB布局防干扰设计和实测验证方法,助力开发者优化射频通信性能。
STM32CubeIDE无法连接STLinkV2的一个可能原因
前些日子买了个新的STLINKV2 , ( 老的被我家猫猫一泡尿送上西天了)刚开始还挺正常的, 后来有一天就突然间发现无法调试了.网上尝试了各种方法, 各种操作. 百度了好久. 最后好在我自己研究出来了.我使用的是 STM32CubeIDE 这个开发工具调试选项如下图其它的不需要修改, 然后点击下面的apply 按钮, 然后调试Debug, 提示 No STLink 如下图后来尝试了下载ST-LINK Utility 用它是可以正常连接STLink的, 然后也能正常进行升级操作.
Hive2HBase代码实战--方式二
/从hive中读取数据,数据是在hdfs上,hive是个外部表,你也可以用内部表,都有一样。println("设置参数,运行环境:"+args(0))//由于标签字段是不知道名称以及不知道有哪些字段。// 如果存放 HFile文件的路径已经存在,就删除掉。//这个设置很重要,默认没有这么多。//指定序列化格式,默认是java序列化。//需要将宽表转换为窄表并获取字段名称。//告知哪些类型需要序列化。//一定需要全局排序,否则报错。//去掉rowKey字段。//bulkload导入。* 处理null字段。
数据分享:中国历年省、市、县行政区划shp(1949~2023年共计75年)
中华人民共和国县级以上行政区沿革》(三册,1949-1983年)“The Atlas of Changes of Administrative Regions of China”;《中华人民共和国行政区划沿革地图集》The yearly publications of “The Administrative Regions”, 1985-2014;每年的出版行政区划简册(1985-2014年)行政区划网:www.xzqh.org。行政区划网:www.xzqh.org。
HBase系列:利用BulkLoad快速导入海量数据及集群间数据同步
Region的大小 单个region最大大小官方推荐5~10GB,这是三备份前的数据大小,通过hbase.hregion.max.filesize配置,当超过这个值后region会split,估计好数据量并合理的划分region会减少不必要的性能损失。甚至设置足够大的值,日常监控中发现过大后手工做split。 Region 大小 Region的大小是一个棘手的问题,需要考量如下几个因素。 ...
C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片
基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正
最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版
Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。
MapReduce生成HFile入库到HBase
一、这种方式有很多的优点: 1. 如果我们一次性入库hbase巨量数据,处理速度慢不说,还特别占用Region资源, 一个比较高效便捷的方法就是使用 “Bulk Loading”方法,即HBase提供的HFileOutputFormat类。 2. 它是利用hbase的数据信息按照特定格式存储在hdfs内这一原理,直接生成这种hdfs内存储的数据格式文件,然后上传至合适位置,即完成巨量数据快速入
jdk-8u144-linux-x64.tar.gz.
该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包
hbase批量入库遇到的坑
hbase批量入库的总结 最近这一段时间一直在研究hbase的批量入库,看似简单的问题其实埋着无数的坑...... 接下来就把我遇到的一些问题和解决的办法分享给大家,希望能让那些新接触到的人不至于像我一样走这么多弯路。 hbase一般的插入过程都使用HTable对象,将数据封装在Put对象中,Put在new创建的时候需要传入rowkey,并将列族,列名,列值add进去。然后H...
efm32 入门.pdf
本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。
MapReduce写HFile,doBulkLoad方式批量导入到HBase(用 HFileOutputFormat2.configureIncrementalLoad方式不推荐)
package com.xxx.xxxx.hivetable.xxxx.usepartition.five_min_xxx_to_hbase; /** * 2019/11/20 */ import org.apache.hadoop.hbase.mapred.TableOutputFormat; import org.apache.hadoop.conf.Configuration; imp...
HBase快速导入数据--BulkLoad
Apache HBase是一个分布式的、面向列的开源数据库,它可以让我们随机的、实时的访问大数据。但是怎样有效的将数据导入到HBase呢?HBase有多种导入数据的方法,最直接的方法就是在MapReduce作业中使用TableOutputFormat作为输出,或者使用标准的客户端API,但是这些都不非常有效的方法。 Bulkload利用MapReduce作业输出HBase内部数据格式的表数据,然后
使用MapReduce解析HDFS中的文件生成HFile文件导入HBase(三)
使用MapReduce生成HFile文件是导入大量数据到HBase的最快方法 总共分为两部分,生成HFile和导入到HBase 一、生成HFile 1.主程序ConvertToHFiles.java public class ConvertToHFiles extends Configured implements Tool { private static final L...
HBase快速导入巨量数据—— Bulk Loading
优点: 如果我们一次性入库hbase巨量数据,处理速度慢不说,还特别占用Region资源, 一个比较高效便捷的方法就是使用 “Bulk Loading”方法,即HBase提供的HFileOutputFormat类。 它是利用hbase的数据信息按照特定格式存储在hdfs内这一原理,直接生成这种hdfs内存储的数据格式文件,然后上传至合适位置,即完成巨量数据快速入库的办法。配合mapreduce完成,高效便捷,而且不占用region资源,增添负载。 限制: 仅适合初次数据导入,即表内数据为空.
[博学谷学习记录]超强总结,用心分享|HBase的Bulk Load批量加载操作
HBase的Bulk Load批量加载操作
HBase HFile BulkLoad
原文:http://shitouer.cn/2013/02/hbase-hfile-bulk-load/ 一、这种方式有很多的优点: 1. 如果我们一次性入库Hbase巨量数据,处理速度慢不说,还特别占用Region资源, 一个比较高效便捷的方法就是使用 “Bulk Loading”方法,即HBase提供的HFileOutputFormat类。 2. 它是利用hbase的数据信息按照特定格式
HBase 之HFileOutputFormat
hadoop mr 输出需要导入hbase的话最好先输出成HFile格式, 再导入到HBase,因为HFile是HBase的内部存储格式, 所以导入效率很高,下面是一个示例 1. 创建HBase表t1 hbase(main):157:0*create't1','f1'0row(s)in1.3280secondshbase(main):158:0&g...
Spark 生成hfile然后使用bulk load 方式导入到HBase
需求背景: 公司的spark集群和hbase集群是两个互不相通的集群,所以我们的方式就是先用spark 生成hfile 然后再通过distcp 的方式把数据cp到HBase所在的集群,然后再通过bulk的方式把数据导入到HBase中 关键性的疑问点: Q1:我生成的hfile如何和表里的各种设置想对应呢? 比如说:我的table 设置了 bf 设置了snappy 压缩算法,等等,这些在我们生成hfile的时候是应该都要完成的操作。这些东西我们是如何指定的呢? 关键角色登场: HFileOutpu
bulkload方式将hive数据存储至hbase表
bulkload将hive数据存储至hbase表。
Hive使用HBaseBulkLoad导入Hbase
官网地址:HBaseBulkLoad - Apache Hive - Apache Software Foundation 概述: 如果数据量比较小,可以使用Hive和Hbase集成的方式(HBaseIntegration)完成数据的导入,同时通过Hive读取数据。集成方式如下: CREATE TABLE new_hbase_table(rowkey string, x int, y int) STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorage.
3948



被折叠的 条评论
为什么被折叠?



