sqoop抽取文件到hadoop

来源:互联网 发布:双11淘宝和京东交易额 编辑:程序博客网 时间:2024/06/07 01:15
sqoop import --connect jdbc:mysql://192.168.133.32:3306/school --username hive --password 123456  --target-dir /user/hive/tables 

基本结构:
import –connect 驱动方式//ip/数据库
用户名,密码
后面的目标文件夹/user/hive/tables 无需创建

可能因为上次直接强制关了虚拟机导致hadoop进入了安全模式,
百度之后发现:
NameNode节点启动时,会进入安全模式阶段。
在安全模式,HDFS只支持访问元数据的操作才会返回成功,其他的操作诸如创建、
删除文件等操作都会导致失败。

解除(离开)安全模式

hadoop dfsadmin -safemode leave

ERROR tool.ImportTool: Encountered IOException running import job: java.io.IOException: java.net.ConnectException: Call From master/192.168.133.32 to 0.0.0.0:10020 failed on connection exception: java.net.ConnectException: Connection refused; For more details see: http://wiki.apache.org/hadoop/ConnectionRefused
at org.apache.hadoop.mapred.ClientServiceDelegate.invoke(ClientServiceDelegate.java:338)
at org.apache.hadoop.mapred.ClientServiceDelegate.getJobStatus(ClientServiceDelegate.java:423)
at org.apache.hadoop.mapred.YARNRunner.getJobStatus(YARNRunner.java:576)
at org.apache.hadoop.mapreduce.Job1.run(Job.java:326)atorg.apache.hadoop.mapreduce.Job1.run(Job.java:323)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:422)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1692)
at org.apache.hadoop.mapreduce.Job.updateStatus(Job.java:323)
at org.apache.hadoop.mapreduce.Job.isSuccessful(Job.java:623)
at org.apache.hadoop.mapreduce.Job.waitForCompletion(Job.java:1330)
at org.apache.sqoop.mapreduce.ImportJobBase.doSubmitJob(ImportJobBase.java:196)
at org.apache.sqoop.mapreduce.ImportJobBase.runJob(ImportJobBase.java:169)
at org.apache.sqoop.mapreduce.ImportJobBase.runImport(ImportJobBase.java:266)
at org.apache.sqoop.manager.SqlManager.importTable(SqlManager.java:673)
at org.apache.sqoop.manager.MySQLManager.importTable(MySQLManager.java:118)
at org.apache.sqoop.tool.ImportTool.importTable(ImportTool.java:497)
at org.apache.sqoop.tool.ImportTool.run(ImportTool.java:605)
at org.apache.sqoop.Sqoop.run(Sqoop.java:143)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
at org.apache.sqoop.Sqoop.runSqoop(Sqoop.java:179)
at org.apache.sqoop.Sqoop.runTool(Sqoop.java:218)
at org.apache.sqoop.Sqoop.runTool(Sqoop.java:227)
at org.apache.sqoop.Sqoop.main(Sqoop.java:236)

sqoop import --connect jdbc:mysql://192.168.133.32:3306/school --username hive --password 123456 --table student --m 1 --target-dir /user/hive/tables2

路径改了一下,不然就要删除原来的路径了
加了一个 –m 1 指定map任务数量,默认是1。
后来我发现不是这个问题,可能是软件哪里抽风了(安全模式的原因),我换了个mysql用户最开始的导入命令也是好使的。

百度了一下hadoop的安全模式:

在安全模式,HDFS只支持访问元数据的操作才会返回成功,其他的操作诸如创建、删除文件等操作都会导致失败。

安全模式异常:

在Hadoop的实践过程中,系统启动的时候去修改和删除文件有时候会报以下错误:

org.apache.hadoop.dfs.SafeModeException: Cannotdelete/user/hadoop/input. Name node is in safe mode.从字面上来理解:“Name nodeis in safe mode.”hadoop的namenode处于安全模式。

出现上述现象由于NameNode在启动的时候首先进入安全模式。

安全模式启动过程:

当 Hadoop的NameNode节点启动时,会进入安全模式阶段。在此阶段,DataNode会向NameNode上传它们数据块的列表,让 NameNode得到块的位置信息,并对每个文件对应的数据块副本进行统计。当最小副本条件满足时,即一定比例的数据块都达到最小副本数,系统就会退出安全模式,而这需要一定的延迟时间。当最小副本条件未达到要求时,就会对副本数不足的数据块安排DataNode进行复制,直至达到最小副本数。而在安全模式下,系统会处于只读状态,NameNode不会处理任何块的复制和删除命令。

安全模式相关属性的设置:

安全模式的相关属性都在文件conf/hdfs-site.xml中指定,有如下几个:

dfs.replication.min 指定数据块要达到的最小副本数,默认为1;

dfs.safemode.extension 指定系统退出安全模式时需要的延迟时间,默认为30(秒);

dfs.safemode.threshold.pct 指定退出条件,需要达到最小副本数的数据块比例,1.0.3中默认是0.95

安全模式常用命令:

hadoop dfsadmin-safemode 命令

格式:Usage: Java DFSAdmin [-safemode enter | leave | get |wait]

用户可以通过dfsadmin -safemode value 来操作安全模式,参数value的说明如下:

enter - 进入安全模式

leave - 强制NameNode离开安全模式

get - 返回安全模式是否开启的信息

wait - 等待,一直到安全模式结束。

hadoop dfsadmin -safemode 命令的源码解析:

dfsadmin的命令实现类org.apache.hadoop.hdfs.tools. DFSAdmin