1、查看mysql中所有的数据库
sqoop list-databases --connect jdbc:mysql://192.168.80.1/ --username root --password XXX
2、查看mysql中数据库中的表
sqoop list-tables --connect jdbc:mysql://192.168.80.1/test --username root --password XXX
3、导入MySQL数据到HDFS中
1)、 sqoop import --connect jdbc:mysql://192.168.80.1:3306/test --username root --password 123456 --table t1 --target-dir /user/sqoop --fields-terminated-by ',' -m 1
注意:
--target-dir 必须是不存在的路径,网上有方案说,支持--delete-target-dir,但是本人使用sqoop 1.4.7,加上这个参数,报错。
-m 1 如果源表没有主键,必须带上-m 1
如果有主键,这么导入报错。
有主键的表的shell命令为:
sqoop import -Dorg.apache.sqoop.splitter.allow_text_splitter=true --connect jdbc:mysql://192.168.80.1:3306/test --username root --password 123456 --table mtcars --target-dir /user/sqoop/sqooptest3 --fields-terminated-by ','
2)、sqoop import --connect jdbc:mysql://192.168.80.1:3306/test --username root --password 123456 --table t1 --target-dir /user/sqoop --fields-terminated-by ',' -m 1 --direct
备注:官网有说加上--direct会快速些,但是加上回报错,Cannot run program "mysqldump"。
网上找的方案:
1. 在安装了mysql的节点A中使用ROOT用户查找mysqldump在哪个目录下
find / -name mysqldump
2. 将查找到的路径下复杂mysqldump至数据节点B、C、D中
说明这两种导入hdfs底层实现不同。
4、导入My SQL表数据到Hive中
没有主键表的导入
1)、sqoop import --connect jdbc:mysql://192.168.80.1:3306/test --username root --password XXX --table stest --fields-terminated-by "\t" --lines-terminated-by "\n" --hive-import --hive-overwrite --create-hive-table --hive-table myhive.stest2 --delete-target-dir -m 1
备注:开始莫名各种错误,什么HiveConf.class 找不到,什么ERROR bonecp.BoneCP: Unable to start/stop JMX,最后看方案,将hive-site.xml 复制到sqoop/conf目录下,还是不行,最后莫名有成功了,hive中,能查看到表,但是成功执行的过程,已然报错:ERROR bonecp.BoneCP: Unable to start/stop JMX
java.security.AccessControlException: access denied ("javax.management.MBeanTrustPermission" "register")
找不到原因。
有主键表的导入
sqoop import -Dorg.apache.sqoop.splitter.allow_text_splitter=true --connect jdbc:mysql://192.168.80.1:3306/test --username root --password XXX --table mtcars --fields-terminated-by "\t" --lines-terminated-by "\n" --hive-import --hive-overwrite --create-hive-table --hive-table myhive.mtcars --delete-target-dir
5、sqoop 导入My SQL数据表到HBASE中
无主键表导入,t1表在My SQL中结构如下:
sqoop import --connect jdbc:mysql://192.168.80.1:3306/test --username root --password 123456 --table t1 --hbase-create-table --hbase-table ns1:myt1 --column-family f1 --hbase-row-key number -m 1
表新建成功,但是scan无数据。
后面分析原因,应该是成功的,因为My SQL中t1表只有number非主键列。
sqoop import --connect jdbc:mysql://192.168.80.1:3306/test --username root --password 123456 --table mtcars --hbase-create-table --hbase-table ns1:mtcars --column-family f1 --hbase-row-key rownames -m 1
mtcars表My SQL中结构如下:
无主键表stest(rownames非主键列,scan有数据)如下:
有主键导入,mtcars(rownames为主键)
sqoop import --connect jdbc:mysql://192.168.80.1:3306/test --username root --password 123456 --table mtcars --hbase-create-table --hbase-table ns1:mtcars --column-family f1 --hbase-row-key rownames -m 1
结果成功,并且HBase中有数据
6、sqoop将My SQL指定数据库下的所有表导入Hive中
sqoop import-all-tables -Dorg.apache.sqoop.splitter.allow_text_splitter=true --connect jdbc:mysql://192.168.80.1:3306/test --username root --password 123456 --hive-import --hive-database test --create-hive-table --hive-overwrite -m 1
备注:
my SQL/test中既有具有主键的表和没有主键的表,并且是全库导入,不能个性化指定split-by 字段,所有,-m 只能使用1