sqoop hbase导入并与hive结合

本文详细介绍了如何使用sqoop将mysql数据导入到hbase中,并通过hbase创建了相应的表结构,解决了多字段联合主键的导入问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

sqoop语句
以tid为主键,info为列族
Html代码 复制代码 收藏代码
  1. sqoop import --connect jdbc:mysql://ip/taobao_db --username hive --password 123456 --table mysql_table_name --hbase-table hbase_table_name --column-family info --split-by tid 
sqoop import --connect jdbc:mysql://ip/taobao_db --username hive --password 123456 --table mysql_table_name --hbase-table hbase_table_name --column-family info --split-by tid


hbae创建表语句
Sql代码 复制代码 收藏代码
  1. create 'trade','info' 
create 'trade','info'


hive创建表语句
Sql代码 复制代码 收藏代码
  1. CREATE EXTERNAL TABLE hbase_trade( 
  2. tid string, 
  3. dp_id string, 
  4. created string, 
  5. modified string, 
  6. buyer_cod_fee double,)  
  7. STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' 
  8. WITH SERDEPROPERTIES ("hbase.columns.mapping" = "info:dp_id,info:created,info:modified,info:buyer_cod_fee") TBLPROPERTIES("hbase.table.name" = "hbase_table_name"); 
CREATE EXTERNAL TABLE hbase_trade(
tid string,
dp_id string,
created string,
modified string,
buyer_cod_fee double,) 
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = "info:dp_id,info:created,info:modified,info:buyer_cod_fee") TBLPROPERTIES("hbase.table.name" = "hbase_table_name");

遗留问题
sqoop导入数据至hbase时,split-by字段只能是一个,处理不了多字段联合主键的情况。
### 使用 SqoopHBase 数据导入 Hive 为了实现从 HBaseHive数据迁移,通常会先将 HBase 中的数据导出至文件系统(如 HDFS),再通过 Sqoop 或其他工具加载这些数据进入 Hive 表格。然而,直接利用 Sqoop 进行此操作非最直观的方式,因为 Sqoop 更常用于关系型数据 Hadoop 生态系统的交互。 对于特定需求——即从 HBase 导入数据Hive——可以采用如下方法: #### 方法一:借助 MapReduce Job 实现转换写入 Hive 由于 Sqoop 不支持直接由 HBaseHive导入功能,一种替代方案是编写自定义的 MapReduce 作业来读取 HBase 表中的数据将其格式化后存储于兼容 Hive 的文件中(例如 TextFile, SequenceFile)。之后创建外部表指向该位置即可完成映射[^1]。 ```bash hadoop jar hbase-mapreduce-examples.jar export -Dmapred.output.compress=false \ -Dmapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec \ tablename /user/hive/warehouse/tablename_exported_data ``` 接着,在 Hive 中执行 DDL 创建对应结构体: ```sql CREATE EXTERNAL TABLE IF NOT EXISTS hive_table_name ( column1 STRING, ... ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LOCATION '/user/hive/warehouse/tablename_exported_data'; ``` 这种方法虽然绕过了 Sqoop 工具本身,但在某些场景下可能是更灵活的选择。 #### 方法二:使用 Apache Phoenix 和 Spark SQL 转换 另一种更为现代的方法涉及使用 Apache Phoenix 结合 Spark SQL 来桥接两者之间的差距。Phoenix 提供了一个 JDBC 驱动程序接口给 HBase,使得查询变得简单;而 Spark 可以轻松地连接这两种技术栈将结果集保存为 Hive 表格[^2]。 ```scala import org.apache.phoenix.spark._ val df = spark.read.format("phoenix").option("table", "SOURCE_TABLE_NAME").load() df.write.mode("overwrite").saveAsTable("default.destination_hive_table") ``` 上述 Scala 代码片段展示了如何利用 Spark DataFrame API 加载来自 Phoenix/HBase数据最终持久化到 Hive 中作为新表格的一部分。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值