sqoop1.4.7 从MySQL导入数据到Hbase

==版本不兼容===

由于 sqoop1.4.7 不兼容 hbase2.x,导致执行报错

解决

据 此博文 说:

因为hbase版本太高了,将 hbase1.6.0/lib 下的jar包,复制到 sqoop的 lib 目录下,就好使

未亲测

准备

启动 hadoop

cd /program
bin/hadoop.sh

启动 zookeeper

hbase 依赖 zookeeper,所以需要先启动,详见下面链接:

zookeeper-3.4.x 单机启动、停止服务、查看服务状态、jps

zookeeper-3.4.x集群:启动、停止服务、查看服务状态、jps

zookeeper-3.4.x集群:启动、停止脚本

启动Hbase

hbase2.1.x集群:伪分布式启动、停止服务

hbase2.1.x集群:启动、停止服务、查看服务状态、jps

全部导入

将MySQL某表所有字段、所有数据,导入到 Hbase 中

提示:由于版本不兼容,必须手动创建表
提示:数据库必须存在,否则报错

hbase

启动hbase shell:

hbase shell

查看表:

list

创建表:

create 'sqoop_dept','info'

sqoop 命令

cd sqoop-1.4.7
bin/sqoop import \
--connect jdbc:mysql://hadoop1:3306/scott \
--table dept \
--username root \
--password root \
--fields-terminated-by '\t' \
--m 1 \
--hbase-table "sqoop_dept" \
--column-family "info" \
--hbase-row-key "id"

解释

  • hive-import:表示导入到hive
  • hive-overwrite:覆盖数据
  • hive-database default:导入到 hive 的 default 数据库中
  • hive-table dept:表示导入 hive 到 dept 表

执行过程

执行 2个 MapReduce:

  • 第一个 MapReduce:查询MySQL,导出数据,HDFS 路径:/user/root

  • 第二个 MapReduce:将数据导入到 Hive 中,HDFS 路径:/hive/warehouse/sqoop_dept

注意

参数名和参数值中间只能有一个空格,否则可能报错

如下:

--password   root  # 前面多出空格,会报密码错误
--target-dir    /test_sqoop_dept   # 前面多出空格,生成的目录只有空格

查看数据

连接 Hive 数据库,执行下面sql,查看数据:

select * from default.sqoop_dept

原文出处:/show_1IX3X8gaWMVO.html