export default用法vue_用Export和Import工具来迁移不同版本HBase之间的数据

本文介绍了如何使用Export和Import工具在不同版本的HBase集群之间进行数据迁移。在HBase 2.1到1.2的版本迁移中,由于CopyTable和ExportSnapshot等方式不可行,作者详细讲解了Export命令的使用,包括全量和增量数据的导出,以及遇到的异常问题。接着,文章讨论了自定义Export工具以规避异常,并演示了Import和BulkLoad的命令用法,总结了将这三个工具结合使用进行数据迁移的方法。
摘要由CSDN通过智能技术生成

用Export和Import工具来迁移不同版本HBase之间的数据

1. 前言

有关HBase数据迁移的方案,零零总总不下好几种。如最简单的CopyTable,最高效的ExportSnapshot,最方便的Replication,以及接下来要为大家重点分享的Export和Import。命令的使用很简单,这里我只是单纯地记录下解决这个问题的思路,希望能给予你启迪,也希望我能把其持续修剪,直至长成参天大树的样子。我们此次数据迁移的场景是,HBase线上集群(2.1)迁移数据至HBase灾备集群(1.2),由于是跨大版本的数据迁移,在我们以往的测试中,CopyTable和ExportSnapshot两种方案直接就被pass掉了(可能是由于两个版本的HBase的底层HFile文件格式的不兼容,这两种方式都无法达到预期的效果)。又由于涉及大量历史数据的迁移,Replication显然也不合适。在确定使用Export/Import的数据迁移方案之前,我们还测试了用Spark读HBase表转换成RDD,然后再生成HBase的底层文件——HFile,最后使用BulkLoad的命令,实现数据的快速导入。但在具体测试的时候,不管是使用cdh的hbase-spark模块,还是使用shc的spark读HBase,貌似都逃不掉数据倾斜的命运。两种方案的源码实现我没有深究,但应该大致应该类似,利用spark scan hbase 的表转换成RDD,每一个region的数据放进每一个RDD的partition下(我们设置的每一个region的最大大小是20G),RDD做shuffle的过程中,会报如下异常:233887b1c0cd7cd3f5e1737dcd6ec4f2.png网上的解释是这样的:6f04a8aac5c989c95d44c6cebdbcb0eb.png暂时没有找到更好的方法来解决这个问题,所以,Spark读HBase的这种方式暂时还停留在理论层面。最终,在已知的数据迁移方案里,Export和Import工具能满足我们跨版本的数据迁移需求,虽然它的效率很慢,对集群的影响也很大,但由于是灾备集群,这种缺点还在忍受的范围之内。

2. 我们的集群环境

在正式介绍相关命令使用的同时,还是先说一下我们集群的版本等软件环境,避免因为版本的差异,出现本文我没有记录到的异常。灾备集群HBase版本HBase 1.2.0-cdh5.13.1灾备集群Hadoop版本Hadoop 2.6.0-cdh5.13.1

线上HBase集群版本HBase 2.1.0-cdh6.3.2线上Hadoop集群版本Hadoop 3.0.0-cdh6.3.2

3. Export的命令介绍

Export命令运行时会根据设置的scan条件来扫描HBase的表,然后转换成SequenceFile的形式,SequenceFile只是纯粹的K,V格式的数据文件,它与HBase的版本无关。其内容大致如下图所示:1de8de070fb421ab612e168ba73e169b.pngrowkey 列簇名 字段名 数据

3.1 Export命令的基本使用

运行如下命令查看Export工具的基本使用:

hbase org.apache.hadoop.hbase.mapreduce.Export  -help

命令用法以及参数的解读如下(不同版本命令差异不大):

Usage: Export [-D ]*  [ [ []] [^[regex pattern] or [Prefix] to filter]]
扫描行存在两种过滤器,正则表达式和前缀
输出SequenceFile的压缩形式
-D mapreduce.output.fileoutputformat
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一个完整的外卖系统,包括手机端,后台管理,api 基于spring boot和vue的前后端分离的外卖系统 包含完整的手机端,后台管理功能 技术选型 核心框架:Spring Boot 数据库层:Spring data jpa/Spring data mongodb 数据库连接池:Druid 缓存:Ehcache 前端:Vue.js 数据库:mysql5.5以上,Mongodb4.0(不要使用最新版4.2) 模块 flash-waimai-mobile 手机端站点 flash-waimai-manage后台管理系统 flash-waimai-api java接口服务 flash-waimai-core 底层核心模块 flash-waimai-generate 代码生成模块 快速开始 数据存储采用了mysql和mongodb,其中基础管理配置功能数据使用mysql,业务数据使用mongodb存储。 创建mysql数据库 CREATE DATABASE IF NOT EXISTS waimai DEFAULT CHARSET utf8 COLLATE utf8_general_ci; CREATE USER 'waimai'@'%' IDENTIFIED BY 'waimai123'; GRANT ALL privileges ON waimai.* TO 'waimai'@'%'; flush privileges; mysql数据库创建好了之后,启动flash-waimai-api服务,会自动初始化数据,无需开发人员自己手动初始化数据 安装mongodb并创建数据库:flash-waimai 使用mongorestore命令 导入mongodb数据,由于测试数据量较大,打包放在了百度云盘:链接:https://pan.baidu.com/s/1mfO7yckFL7lMb_O0BPsviw 提取码:apgd 下载后将文件解压到d:\elm,如下命令导入数据: mongorestore.exe -d flash-waimai d:\\elm 下载项目测试数据的图片(商家和食品图片):链接:https://pan.baidu.com/s/1rvZDspoapWa6rEq2D_5kzw 提取码:urzw ,将图片存放到t_sys_cfg表中system.file.upload.path配置的目录下 启动管理平台:进入flash-waimai-manage目录:运行 npm install --registry=https://registry.npm.taobao.org运行npm run dev启动成功后访问 http://localhost:9528 ,登录,用户名密码:admin/admin 启动手机端:进入flash-waimai-mobile目录:运行 npm install --registry=https://registry.npm.taobao.org运行npm run local启动成功后访问 http://localhost:8000
`export default` 是 ES6 中的一个语法,用于导出一个默认的模块。在 Vue/Vue全家桶开发中,我们可以使用它来导出组件、函数、对象等。 下面是一些小技巧和注意事项: 1. 组件中使用 `export default` 导出组件对象 ```js // MyComponent.vue <template> <div>Hello World</div> </template> <script> export default { name: 'MyComponent', // ... } </script> ``` 2. 在单文件组件中使用 `export default` 导出一个函数 ```js // myFunction.js export default function() { console.log('Hello World') } // MyComponent.vue <script> import myFunction from './myFunction.js' export default { name: 'MyComponent', mounted() { myFunction() } } </script> ``` 3. 在 Vuex 中使用 `export default` 导出 store ```js // store.js import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex) export default new Vuex.Store({ // ... }) ``` 4. 在 Vue Router 中使用 `export default` 导出路由配置 ```js // router.js import Vue from 'vue' import VueRouter from 'vue-router' Vue.use(VueRouter) const routes = [ // ... ] export default new VueRouter({ routes }) ``` 5. 在 main.js 中使用 `import` 引入组件、store、router ```js // main.js import Vue from 'vue' import App from './App.vue' import router from './router' import store from './store' new Vue({ el: '#app', router, store, render: h => h(App) }) ``` 注意事项: 1. 在一个模块中只能有一个 `export default`,但可以有多个 `export`。 2. 在导入默认模块时,可以使用任意名称,例如 `import MyComponent from './MyComponent.vue'`。 3. 在导入非默认模块时,必须使用原来的名称,例如 `import { myFunction } from './myFunction.js'`。 4. 在使用 Vue Router 和 Vuex 时,需要先使用 Vue.use() 安装插件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值