文章目录
- 1. 脚本打包
- 2. Sqoop一些常用命令及参数
- 2.1 job命令
1. 脚本打包
使用opt格式的文件打包Sqoop命令,然后执行。
(1) 创建一个.opt文件
# 创建一个.opt文件
touch job_HDFS2RDBMS.opt
job_HDFS2RDBMS.opt文件内容如下:
# 以下命令是从stu中追加导入到MySQL的stu_hive表中
export
--connect
jdbc:mysql://topnpl200:3306/topdb_dev
--username
root
--password
TOPtop******
--table
stu_hive
--num-mappers
1
--export-dir
/user/hive/warehouse/during.db/stu
--input-fields-terminated-by
"\t"
(2) 执行该脚本
# 执行该脚本
sqoop --options-file job_HDFS2RDBMS.opt
注:
- 每次运行一个Sqoop任务都会在/tmp/sqoop-root/compile/xxx下生成jar,class,java等文件。
- 可能会停住,原因:资源占用;MySQL主键冲突。
解决:
1、jps看到有YardChild,MRAPPMaster,kill掉这些再跑。
2、重启Hadoop集群。
3、就先停掉Yarn,修改各个Yarn节点的配置,再启动。
在yarn-site.xml中加入以下配置
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>20480</value>
</property>
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>2048</value>
</property>
<property>
<name>yarn.nodemanager.vmem-pmem-ratio</name>
<value>2.1</value>
</property>
4、清空/tmp下文件。
5、数据是追加。重复往MySQL的同一个表中导出数据,MySQL的表不能设置主键和自增。否则就会出现一直卡住的现象。
2. Sqoop一些常用命令及参数
序号 | 命令 | 类 | 说明 |
1 | import | ImportTool | 将数据导入到集群 |
2 | export | ExportTool | 将集群数据导出 |
3 | codegen | CodeGenTool | 获取数据库中某张表数据生成Java并打包Jar |
4 | create-hive-table | CreateHiveTableTool | 创建Hive表 |
5 | eval | EvalSqlTool | 查看SQL执行结果 |
6 | import-all-tables | ImportAllTablesTool | 导入某个数据库下所有表到HDFS中 |
7 | job | JobTool | 用来生成一个sqoop的任务,生成后,该任务并不执行,除非使用命令执行该任务。 |
8 | list-databases | ListDatabasesTool | 列出所有数据库名 |
9 | list-tables | ListTablesTool | 列出某个数据库下所有表 |
10 | merge | MergeTool | 将HDFS中不同目录下面的数据合在一起,并存放在指定的目录中 |
11 | metastore | MetastoreTool | 记录sqoop job的元数据信息,如果不启动metastore实例,则默认的元数据存储目录为:~/.sqoop,如果要更改存储目录,可以在配置文件sqoop-site.xml中进行更改。 |
12 | help | HelpTool | 打印sqoop帮助信息 |
13 | version | VersionTool | 打印sqoop版本信息 |
2.1 job命令
用来生成一个Sqoop任务,生成后不会立即执行,需要手动执行。
sqoop job \
--create myjob1 -- import \
--connect jdbc:mysql://topnpl200:3306/topdb_dev \
--username root \
--password TOPtop123456 \
--table test_table \
--target-dir /during/sqoop_test \
--delete-target-dir \
--num-mappers 1 \
--fields-terminated-by "\t"
报错:
ERROR sqoop.Sqoop: Got exception running Sqoop: java.lang.NullPointerException
java.lang.NullPointerException at org.json.JSONObject.(JSONObject.java:144)
解决:
这是因为sqoop缺少java-json.jar包.
下载java-json.jar包:http://www.java2s.com/Code/Jar/j/Downloadjavajsonjar.htm
把java-json.jar添加到sqoop/lib目录就可以了。
# 执行job
sqoop job --exec myjob1
# 查看所有job
sqoop job --list
# 删除job
sqoop job --delete myjob1