利用Sqoop将Oracle数据导入HDFS时出现权限问题。
执行列表操作 能正常列出数据库中的表:sqoop list-tables --connect jdbc:oracle:thin:@IP地址:端口号:数据库 --username 用户名 --password 密码但是执行import操作则提示权限问题:sqoop import --connect jdbc:oracle:thin: @IP地址:端口号:数据库 --username 用户名 --password 密码 --table 表名--target-dir 目标路径 -m 1 (注:此处的目标路径应为hdfs路径,如:/user/table)主要日志:
WARN retry.RetryInvocationHandler: Exception while invoking ClientNamenodeProtocolTranslatorPB.mkdirs over null. Not retrying because try once and fail.
Caused by: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.AccessControlException):Permission denied: user=root,access=WRITE,inode="/user/root/.staging":hdfs:hdfs:drwxr-xr-x。
org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.AccessControlException): Permission denied: user=root,access=WRITE,inode="/user/root/.staging":hdfs:hdfs:drwxr-xr-x
网上多数方法是:
1、修改hdfs配置文件中的dfs.permissions值为false;
2、执行操作 hadoop fs -chmod 777 /user/hadoop。
我使用的HDFS版本号是2.7.3。两张方法都试了试,其中用第一中方法修改了所有slave节点相应配置文件,但是重启HDFS后发现false又自动变回了true。失败。
搜索了一上午,最终发现宝帖:https://www.cnblogs.com/invban/p/5673517.html
受此贴的启发,更改登录账户为hdfs,重新执行import操作,成功。
由于操作一直是在root账户下,而导入操作是要导入到HDFS中,当然会提示权限不足的问题。
解决方法:
1、切换账号 ,执行命令: su hdfs;
2、重新执行import操作。
另一种解法是给要访问的路径授权给root用户:
hadoop fs -chown -R root /user/hive 其中root是被授权对象,/user/hive是root要访问的路径。