sqoop1.4.5将mysql中的数据导入到HBase中

什么是sqoop?

关于发音,困扰了我很久,一番类比之后,决定读为“丝库坡”,英语老师看见了会不会疯掉,呵呵,我就是这样一个逗x。

书归正传:
Sqoop【SQL-To-Hadoop】是将关系型数据库的数据(MySQL or Oracle or Postgre)导入到HDFS及其子系统中(Hive, HBase)的工具

sqoop有两个版本,sqoop1和sqoop2,两者特性不同,本文仅介绍sqoop1的使用,其实是精力有限

sqoop1.4.5的搭建过程如下:

1. 软件的版本:

hadoop-1.0.3
zookeeper-3.4.4
hbase-0.94.0
sqoop-1.4.5

2. 基础的Hadoop上搭建Hbase的步骤略过

3. 解压压缩包并重命名
cd /usr/local/
tar -xzvf sqoop-1.4.5.bin__hadoop-1.0.0.tar.gz
mv sqoop-1.4.5.bin__hadoop-1.0.0 sqoop

4. 将mysql的jdbc驱动,复制到sqoop项目的lib目录下
使用的mysql驱动包版本: mysql-connector-java-5.1.34-bin.jar
注意: mysql connector 5.1.32以下版本mysql jar有bug

5. 重命名配置文件并指定其参数
cd  /usr/local/sqoop/conf
mv sqoop-env-template.sh sqoop-env.sh
本次使用到了hadoop hbase及zookeeper,因此需要指定如下参数
export HADOOP_COMMON_HOME=/usr/local/hadoop
#指定hadoop-*-core.jar文件的位置
export HADOOP_MAPRED_HOME=/usr/local/hadoop
export HBASE_HOME=/usr/local/hbase
export ZOOCFGDIR=/usr/local/zookeeper/conf

6. 尝试用sqoop连接到Mysql数据库

#列出Mysql的dbName下的所有表

/usr/local/sqoop/bin/sqoop list-tables --connect jdbc:mysql://ip:3306/dbName --username XXX --password XXX

7. 数据导入

带主键的全列操作
/usr/local/sqoop/bin/sqoop import --connect jdbc:mysql://ip:3306/dbName --username XXX --password XXX --table MysqlTableName --hbase-table HBaseTableName  --column-family HBase_CF --hbase-create-table

带主键的部分列操作
/usr/local/sqoop/bin/sqoop import --connect jdbc:mysql://ip:3306/dbName --username XXX --password XXX --table MysqlTableName --hbase-table HBaseTableName --columns column1,column2 --column-family HBase_CF --hbase-create-table

无主键的部分列导入,将其中一个设为rowkey
/usr/local/sqoop/bin/sqoop import --connect jdbc:mysql://ip:3306/dbName --username XXX --password XXX --table MysqlTableName --hbase-table HBaseTableName --columns column1,column2 --column-family HBase_CF --hbase-row-key column1 --hbase-create-table

8.源码中代码结构图如下

原理是利用mapreduce的job向hbase中写入数据



 

猜你喜欢

转载自zhao-rock.iteye.com/blog/2204071