【实战】通过ImportTsv批量将数据从hive导出到hbase

本文介绍了一种实战方法,使用ImportTsv工具高效地将大约2亿行的数据从Hive导出到HBase,整个过程仅耗时5分钟。

通过ImportTsv 批量将数据从hive导出到hbase
实测 2E 行数据 耗时5分钟左右

#!/bin/bash

report_date=`date --date='1 day ago' +%Y-%m-%d`
echo $report_date
function print_duration(){
  #传入一个参数,开始时间 YYYY-mm-DD HH:MM:SS 格式
  start_time=`echo ${@:1}`  #因为参数中带有空格,所以需要这样处理
  
  end_time=`date +'%Y-%m-%d %H:%M:%S'`
  echo '脚本执行开始时间:'${start_time}',脚本执行结束时间:'${end_time}
  start_seconds=$(date --date="$start_time" +%s);
  end_seconds=$(date --date="$end_time" +%s);
  duration_s=$((end_seconds-start_seconds)); ##总耗时秒
  duration_m=$((duration_s/60)); ##总耗时分
  remainder_s=$((duration_s%60));  #余数秒
  
  duration=${duration_m}"分"${remainder_s}"秒"
  
  echo "########################本次运行耗时:"${duration}"#######################"
}
starttime=`date +'%Y-%m-%d %H:%M:%S'` 
echo "#脚本执行开始时间:"$starttime
#1、抽取hive数据,导出到hdfs
#create 'rtc:hz_test', {NAME => 'cf', VERSIONS => 3} ,SPLITS => ['10000000000','20000000000','30000000000','40000000000','50000000000','60000000000','70000000000','80000000000','90000000000']
hive   -e  \
"set mapred.max.split.size=134217728;  \
set hive.merge.mapfiles=false;   \
set hive.merge.mapredfiles= false;   \
set hive.merge.smallfiles.avgsize=1048576;    \
SET hive.exec.compress.output=false;    \
INSERT OVERWRITE DIRECTORY '/tmp/output/ads_act_vvm_biz'  ROW FORMAT DELIMITED FIELDS TERMINATED by '\t'  select reverse(user_num),null as cf from dw.ads_act_a_daily t where dt='${report_date}' and act_type=1;"


#2、删除表。不能使用清空表,清空表的话会将表的分区也清除掉
echo "disable 'rtc:ads_act_vvm_biz'" | hbase shell
echo "drop 'rtc:ads_act_vvm_biz'" | hbase shell
echo "create 'rtc:ads_act_vvm_biz', {NAME => 'cf', VERSIONS => 3},SPLITS=>['00','05','10','15','20','25','30','35','40','45','50','55','60','65','70','75','80','85','90','95']" | hbase shell


#3、将hdfs数据导入到 转换成hfile
hbase org.apache.hadoop.hbase.mapreduce.ImportTsv  -Dimporttsv.bulk.output=hdfs:///tmp/output/ads_act_vvm_biz_hfile/$report_date/  -Dimporttsv.columns=HBASE_ROW_KEY,cf:f1 "rtc:ads_act_vvm_biz" hdfs:///tmp/output/ads_act_vvm_biz
#4、导入hbase
hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles hdfs:///tmp/output/ads_act_vvm_biz_hfile/$report_date/ rtc:ads_act_vvm_biz

print_duration ${starttime}
### 使用 Kettle 实现 Hive 数据导入 HBase 的教程与配置方法 使用 Kettle 将数据Hive 导入到 HBase 是一种常见的大数据处理场景。以下是实现这一目标的详细步骤和配置方法。 #### 1. 环境准备 确保以下环境已正确搭建并配置: - **Hadoop 集群**:版本为 CDH 或其他兼容版本[^1]。 - **Kettle 工具**:建议使用 Kettle 7.x 版本,因为其对大数据组件的支持更加完善[^2]。 - **JDK**:推荐 JDK 1.8 或更高版本[^1]。 - **HiveHBase**:确保两者在集群中正常运行,并且可以相互访问[^3]。 #### 2. 下载必要的 JAR 包 将所需的 JAR 包下载并放置到 Kettle 的指定目录中: - 将 `hive-*.jar` 和 `hbase-*.jar` 文件复制到 Kettle 的插件目录下,例如: ```plaintext D:\pdi-ce-7.1.0.0-12\data-integration\plugins\pentaho-big-data-plugin\hadoop-configurations ``` - 确保这些 JAR 包与你的 Hadoop、HiveHBase 版本兼容[^2]。 #### 3. 配置 Kettle 的 Big Data 插件 - 打开 Kettle 的 `plugin.properties` 文件,编辑以下内容以激活大数据插件: ```properties active.hadoop.configuration=cdh58 ``` - 将 Hadoop 集群的配置文件(如 `core-site.xml`、`hdfs-site.xml` 和 `hive-site.xml`)复制到对应的大数据配置目录下,并覆盖默认文件[^4]。 #### 4. 创建 Kettle 转换任务 以下是实现 Hive 数据导入 HBase 的具体步骤: ##### (1) 添加 Hive 输入组件 - 在 Kettle 的转换界面中,拖动一个 **Hive Input** 组件到画布上。 - 配置 Hive 连接信息: - 数据库类型选择 **Hive**。 - 主机名填写 Hive 服务器的地址。 - 端口通常为 **10000**。 - 数据库名称填写 Hive 中的目标数据库名称。 - 在 SQL 查询框中编写查询语句,例如: ```sql SELECT id, name, value FROM hive_table; ``` ##### (2) 添加 HBase 输出组件 - 拖动一个 **HBase Output** 组件到画布上。 - 配置 HBase 连接信息: - 数据库类型选择 **HBase**。 - 主机名填写 HBase 服务器的地址。 - 端口通常为 **2181**(ZooKeeper 端口)。 - 配置输出表结构,确保字段映射与 Hive 表一致。例如: ```plaintext Row Key: id Column Family: cf Column Qualifiers: name, value ``` ##### (3) 连接组件 - 使用鼠标将 **Hive Input** 组件连接到 **HBase Output** 组件。 - 确保字段映射正确无误。 ##### (4) 测试和运行 - 点击“预览”按钮,检查数据是否能够从 Hive 正确读取。 - 点击“运行”按钮,执行整个转换任务。 #### 5. 注意事项 - 确保 HiveHBase 的字段类型兼容。如果存在不兼容的情况,可以在 Kettle 中添加 **Field Calculator** 或 **Row Normalizer** 组件进行数据类型转换。 - 如果数据量较大,可以考虑优化 Kettle 的并发设置,或者使用 **Hadoop File Output** 组件将中间结果写入 HDFS 再导入 HBase。 ```python # 示例代码:Kettle 脚本化操作(可选) import subprocess # 启动 Kettle 转换任务 subprocess.run(["kitchen.sh", "-file=/path/to/transformation.ktr", "-level=Basic"]) ``` #### 6. 常见问题排查 - **连接失败**:检查 HiveHBase 的服务状态,以及 Kettle 中的配置文件是否正确。 - **字段映射错误**:确保 Hive 表和 HBase 表的字段数量和类型一致。 - **性能瓶颈**:对于大规模数据迁移,建议使用 Hadoop 的分布式文件系统作为中间存储。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值