💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
[TOC] # 导入表数据到 HDFS 下面的命令用于从MySQL数据库服务器中的emp表导入HDFS `--m` 表示跑这个任务需要多少个map ~~~ sqoop import \ --connect jdbc:mysql://localhost:3306/userdb \ --username root \ --password root \ --table emp --m 1 ~~~ 如果要指定这样`--m 2`的话,就需要指定个字段了 `--split-by id`比如指定id,按照那个字段切分 ~~~ [root@master ~]# sqoop import \ > --connect jdbc:mysql://192.168.33.3:3306/app \ > --username root \ > --password root \ > --split-by id \ > --table emp_add --m 2 ~~~ 如果成功执行,那么会得到下面的输出。 ~~~ 14/12/22 15:24:54 INFO sqoop.Sqoop: Running Sqoop version: 1.4.5 14/12/22 15:24:56 INFO manager.MySQLManager: Preparing to use a MySQL streaming resultset. INFO orm.CompilationManager: Writing jar file: /tmp/sqoop-hadoop/compile/cebe706d23ebb1fd99c1f063ad51ebd7/emp.jar ----------------------------------------------------- O mapreduce.Job: map 0% reduce 0% 14/12/22 15:28:08 INFO mapreduce.Job: map 100% reduce 0% 14/12/22 15:28:16 INFO mapreduce.Job: Job job_1419242001831_0001 completed successfully ----------------------------------------------------- ----------------------------------------------------- 14/12/22 15:28:17 INFO mapreduce.ImportJobBase: Transferred 145 bytes in 177.5849 seconds (0.8165 bytes/sec) 14/12/22 15:28:17 INFO mapreduce.ImportJobBase: Retrieved 5 records. ~~~ 为了验证在HDFS导入的数据,请使用以下命令查看导入的数据 默认在`/user/root`下面表名这个文件夹 ~~~ $ $HADOOP_HOME/bin/hadoop fs -cat /user/hadoop/emp/part-m-00000 ~~~ emp表的数据和字段之间用逗号(,)表示。 ~~~ 1201, gopal, manager, 50000, TP 1202, manisha, preader, 50000, TP 1203, kalil, php dev, 30000, AC 1204, prasanth, php dev, 30000, AC 1205, kranthi, admin, 20000, TP ~~~ # 导入到HDFS指定目录 在导入表数据到HDFS使用Sqoop导入工具,我们可以指定目标目录。 以下是指定目标目录选项的Sqoop导入命令的语法。 ~~~ --target-dir <new or exist directory in HDFS> ~~~ 下面的命令是用来导入emp_add表数据到'/queryresult'目录。 ~~~ sqoop import \ --connect jdbc:mysql://localhost:3306/test \ --username root \ --password root123 \ --target-dir /queryresult \ --table emp_add--m 1 ~~~ 下面的命令是用来验证 /queryresult 目录中 emp_add表导入的数据形式。 ~~~ $HADOOP_HOME/bin/hadoop fs -cat /queryresult/part-m-* ~~~ 它会用逗号(,)分隔emp_add表的数据和字段。 ~~~ 1201, 288A, vgiri, jublee 1202, 108I, aoc, sec-bad 1203, 144Z, pgutta, hyd 1204, 78B, oldcity, sec-bad 1205, 720C, hitech, sec-bad ~~~ 然后看运行命令的地方,下面生成了几个.java文件 他是把这些命令打包成jar包运行的 默认目录是`/user/${user.name}/${tablename}`,可以通过`--target-dir`设置hdfs上的目标目录。 如果想要将整个数据库中的表全部导入到hdfs上,可以使用`import-all-tables`命令。 ~~~ sqoop import-all-tables –connect jdbc:mysql://192.168.81.176/hivemeta2db --username root -password passwd ~~~ 如果想要指定所需的列,使用如下: ~~~ sqoop import --connect jdbc:mysql://192.168.81.176/hivemeta2db --username root -password passwd --table sds --columns "SD_ID,CD_ID,LOCATION" ~~~ 指定导出文件为SequenceFiles,并且将生成的类文件命名为com.ctrip.sds: ~~~ sqoop import --connect jdbc:mysql://192.168.81.176/hivemeta2db --username root -password passwd --table sds --class-name com.ctrip.sds --as-sequencefile ~~~