使用sqoop import命令时出现以下错误: 错误security.UserGroupInformation:PriviledgedActionException as:SqoopUser(auth:SIMPLE)原因:java.io.FileNotFoundException:文件不存在:hdfs:// localhost:8020 / home / SqoopUser / sqoop-1.4.3-cdh4.4.0 / sqoop -1.4.3-cdh4.4.0.jar。
我正在使用Cloudera hadoop和Sqoop。
无法理解,为什么要在hdfs中查找jar文件。
此致 大数据开发人员
答案 0 :(得分:3)
Hadoop服务通常在HDFS中查找jar,因为群集中的所有节点都可以访问HDFS中的文件。如果由Hadoop服务启动的MapReduce作业(在本例中为Sqoop)依赖于这些jar,这一点很重要。请记住,即使您(可能)从NameNode运行Sqoop命令,Mappers仍在DataNode上运行,而不是NameNode。将罐子放在HDFS上并不是解决这个问题的唯一可行方案,但这是一个明智的解决方案。
现在我们可以处理实际的错误。至少有一个,但可能是所有Mappers都无法找到他们需要的jar。这意味着jar不存在或者尝试访问它们的用户没有所需的权限。首先通过在群集上具有超级用户权限的用户运行hadoop fs -ls home/SqoopUser/sqoop-1.4.3-cdh4.4.0/sqoop-1.4.3-cdh4.4.0.jar
来检查文件是否存在。如果它不存在,请使用hadoop fs -put {jarLocationOn/NameNode/fileSystem/sqoop-1.4.3-cdh4.4.0.jar} /home/SqoopUser/sqoop-1.4.3-cdh4.4.0/sqoop-1.4.3-cdh4.4.0.jar
将其放在那里。我没有专门与Cloudera合作过,所以你必须自己追踪NameNode上的jar位置。如果Cloudera与Hortonworks类似,那么偶尔会出现这样的问题:集群部署脚本/文档错过了一些必要的步骤来启动和运行所有内容。
现在我们知道该文件存在,我们可以检查用户SqoopUser是否具有该文件的权限。再次,运行hadoop fs -ls home/SqoopUser/sqoop-1.4.3-cdh4.4.0/sqoop-1.4.3-cdh4.4.0.jar
并查看文件权限。还要检查包含jar的目录的权限。解释POSIX文件权限超出了本答案的范围,因此如果您不熟悉,可能需要阅读这些权限。一个重要的注意事项是HDFS没有自己的组概念,它基于底层操作系统的组。只需确保SqoopUser可以读取jar,并且所有父目录都可以由SqoopUser执行。 chmod 777
的不分青红皂白用户将采用此方式,即hadoop fs -chmod 777 /home/SqoopUser/sqoop-1.4.3-cdh4.4.0/sqoop-1.4.3-cdh4.4.0.jar
。但是,当然,如果您的环境需要,您可以更好地了解您授予的权限。
如果您发现文件权限比您想要的更频繁地绊倒,则核选项是在dfs.permissions
中将false
设置为hdfs-site.xml
。这将允许所有用户访问HDFS上的所有文件。这对于快速开发非常有用,但保留dfs.permisssions
更安全。
答案 1 :(得分:2)
除了Daniel Koverman之外,回答也是这样做的。 这对你有帮助。
导出HADOOP_MAPRED_HOME = / usr / lib / hadoop-0.20-mapreduce export HADOOP_HOME = / usr / lib / hadoop-0.20-mapreduce
在
中添加这两行/ etc / default / hadoop和/ etc / default / hiveserver
答案 2 :(得分:0)
我也遇到过这样的问题。 我只是使用
检查我的hadoop服务JPS 10869 JobHistoryServer 10610 NameNode 10669 DataNode 15215 Jps 10738 ResourceManager 3978 Main
NodeManager未运行。
更改了yarn-site.xml中的一些设置 现在sqoop在我的本地文件系统中找到我的jar。
答案 3 :(得分:0)
首先,答案是:
您需要刷新客户端配置文件。在CDH 5中,可以通过单击服务旁边的圆圈箭头符号从Manager的首页进行此操作。我认为导致您出现问题的配置是 YARN 服务,但您也可以将所有配置文件更新。
第二,背景:
我刚刚为自己解决了这个问题。我正在使用CDH 5.0。
这是我运行的命令和遇到的错误:
$ sqoop import --connect jdbc:mysql://xxx/g2_2 --username xxx --password xxx --table client
...
14/05/27 22:11:54 WARN security.UserGroupInformation: PriviledgedActionException as:aortiz (auth:SIMPLE) cause:java.io.FileNotFoundException: File does not exist: hdfs://xxx:8020/opt/cloudera/parcels/CDH-5.0.1-1.cdh5.0.1.p0.47/lib/sqoop/lib/commons-io-1.4.jar
14/05/27 22:11:54 ERROR tool.ImportTool: Encountered IOException running import job: java.io.FileNotFoundException: File does not exist: hdfs://xxx:8020/opt/cloudera/parcels/CDH-5.0.1-1.cdh5.0.1.p0.47/lib/sqoop/lib/commons-io-1.4.jar
答案 4 :(得分:0)
首先我们必须授予文件的所有权限,例如 '授予文件名。*的所有权限给'%' @" localhost&#39 ;; '授予文件名。*的所有权限给'' @' localhost&#39 ;; 给这个命令并执行
答案 5 :(得分:0)
请执行以下命令来解决您的问题。它将在HDFS系统中复制您的文件。
hdfs dfs -copyFromLocal /opt/hadoop/sqoop-1.4.6 hdfs://localhost:9000/opt/hadoop/sqoop-1.4.6
hdfs dfs -copyFromLocal /opt/hadoop/sqoop-1.4.6/lib hdfs://localhost:9000/opt/hadoop/sqoop-1.4.6/lib
hdfs dfs -copyFromLocal /opt/hadoop/sqoop-1.4.6/sqoop-1.4.6.jar hdfs://localhost:9000/opt/hadoop/sqoop-1.4.6/sqoop-1.4.6.jar
同样复制任何无法通过HDFS系统获取的文件。
注意:在上面的命令/opt/hadoop/sqoop-1.4.6
是我的系统sqoop安装位置