学科分类
目录
Hadoop技术栈

MySQL表数据导入HDFS

将MySQL表数据导入到HDFS文件系统中,具体指令示例如下(读者在演示时需要注意更好参数值,另外“\”符号用于单个指令换行)。

$ sqoop import \

--connect jdbc:mysql://hadoop01:3306/userdb \

--username root \

--password 123456 \

--target-dir /sqoopresult \

--table emp \

--num-mappers 1

上述指令演示了将MySQL表数据导入到HDFS中的基本使用,其中包含了多个参数,下面对其中的参数进行具体说明。

  • --connect:指定连接的关系型数据库,包括JDBC驱动名、主机名、端口号和数据库名称。需要注意的是,Sqoop数据导入导出操作需要启动Hadoop集群的MapReduce程序,所以这里连接的主机名不能是localhost,必须是MySQL数据库所在主机名或IP地址;
  • --username:用于指定连接数据库的用户名;
  • --password:用于指定连接数据库的密码。这种方式直接暴露了数据库连接密码,不太安全,所以可以使用-P指令代替,这个指令会以交互方式提示用户输入密码;
  • --target-dir:指定导入到HDFS的目录,代表MySQL数据表要导入HDFS的目标地址。这里需要注意该选项所指定的目录的最后一个子目录不能存在,否则Sqoop会执行失败;
  • --table:代表要进行数据导入操作的MySQL源数据库表名;
  • --num-mappers:指定map任务个数(默认为4个,并且会产生4个结果文件),可简写为-m。这里指定map任务个数为1,那么只会启动一个Map程序执行相关操作,并只会生成一个结果文件。

执行上述指令后,Sqoop操作会转换为MapReduce任务在整个集群中并行执行,作业执行成功后可以通过HDFS UI界面查看数据结果文件,如图1所示。

img

图1 导入HDFS目录结果

从图1可以看出,指定的MySQL数据库表emp的数据成功导入到HDFS中。用户可以将结果文件下载下来进行查看,也可以使用“hdfs dfs -cat /sqoopresult/part-m-00000”指令查看导入后的文件内容,效果如图2所示。

img

图2 导入HDFS目录内容

从图2可以看出,导入到HDFS指定目录下的文件内容与MySQL数据库表emp中的数据保持一致,并且导入后的数据内容默认是按照逗号进行分隔的。

点击此处
隐藏目录