Sqoop shell之 My SQL

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 shell之 My SQL_第1张图片

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中结构如下:

Sqoop shell之 My SQL_第2张图片
无主键表stest(rownames非主键列,scan有数据)如下:

Sqoop shell之 My SQL_第3张图片

有主键导入,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


  

 

你可能感兴趣的:(Sqoop)