sqoop上传数据到hdfs,并用hive管理数据。

sqoop导入mysql数据表到HDFS中
sqoop import --connect jdbc:mysql://master:3306/test --username root --password root --table person
--target-dir "/root/sqoop" 指定上传到hdfs指定的目录
--fields-terminated-by " " 指定生成文件的分隔符
HIVE创建外部表,管理数据。 CREATE EXTERNAL TABLE person( id int, name string, sex string) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS TEXTFILE LOCATION '/user/root/person';
mysql> select * from person;
+----+----------+-------+
| id | username | sex   |
+----+----------+-------+
|  1 | tom      | man   |
|  2 | jack     | wemen |
+----+----------+-------+
2 rows in set (0.00 sec)
hive> select * from person;
OK
1       tom     man
2       jack    wemen
Time taken: 1.545 seconds, Fetched: 2 row(s)

第一类:数据库中的数据导入到HDFS上

# sqoop import --connect jdbc:mysql://hdp-server-01:3306/baba --username root --password root --table bbs_detail

             

              指定输出路径、指定数据分隔符

              # sqoop import --connect jdbc:mysql://hdp-server-01:3306/baba --username root --password root --table bbs_detail --target-dir '/sqoop/td' --fields-terminated-by ' '

             

              指定MapTask数量 -m

              #sqoop import --connect jdbc:mysql://hdp-server-01:3306/baba --username root --password root  --table bbs_detail --target-dir '/sqoop/td1' --fields-terminated-by ' ' -m 1

              增加where条件, 注意:条件必须用引号引起来

              # sqoop import --connect jdbc:mysql://hdp-server-01:3306/baba --username root --password root  --table bbs_detail --where 'id>30' --target-dir '/sqoop/td2' --fields-terminated-by ' 01' -m 1

              增加query语句(使用 将语句换行)

              sqoop import --connect jdbc:mysql://hdp-server-01:3306/baba --username root --password root

--query 'SELECT id,order_id,product_id FROM bbs_detail where id > 30 AND $CONDITIONS' --split-by bbs_detail.id --target-dir '/sqoop/td3'           

              注意:如果使用--query这个命令的时候,需要注意的是where后面的参数,AND $CONDITIONS这个参数必须加上

              而且存在单引号与双引号的区别,如果--query后面使用的是双引号,那么需要在$CONDITIONS前加上即$CONDITIONS

              如果设置map数量为1个时即-m 1,不用加上--split-by ${tablename.column},否则需要加上

             

***从数据库中导入数据到hive

sqoop import --hive-import --connect jdbc:mysql://hdp-server-01:3306/baba --username root --password root --table bbs_detail

       第二类:将HDFS上的数据导出到数据库中

              sqoop export --connect jdbc:mysql://hdp-server-01:3306/test  --username root --password root --export-dir '/myorder/data' --table myorder --columns id,order_id --fields-terminated-by ','  -m 2

注意:以上测试要配置mysql远程连接

         GRANT ALL PRIVILEGES ON mytest.* TO 'root'@'192.168.0.104' IDENTIFIED BY 'itcast' WITH GRANT OPTION;

         FLUSH PRIVILEGES;

        

         GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'itcast' WITH GRANT OPTION;

         FLUSH PRIVILEGES