使用不在 hdfs 中的文件
Working with file located not in hdfs
我有 root 访问服务器的权限,安装了 hadoop 和 hive。但是,尽管我有 root 权限,但我无法将数据从文件系统复制到 hdfs:
root@serv:~# hadoop fs -put flume_test/logs /user
put: Permission denied: user=root, access=WRITE, inode="/user":hdfs:supergroup:drwxr-xr-x
我尝试了不同的方法从不在 hdfs 中的文件 flume_test/logs
创建 table。例如:
CREATE TABLE natlog_orc (
src_local_ip STRING,
time_start STRING,
time_end STRING,
src_global_ip STRING,
protocol STRING,
port_start STRING,
port_end STRING
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ","
STORED AS TEXTFILE
LOCATION /root/flume_test/logs;
但没有一个不工作。
那么,如何从不在 hdfs 中的文件创建外部 table?或者我可以更改 hadoop 设置中的哪个参数以获得将数据复制到 hdfs 的必要权限?
HDFS 权限与您的本地文件系统不同。 root 没有超级权限。您收到的错误是因为 root 用户没有写入 /user 的权限。切换到 hdfs 用户(运行 su - hdfs
)并在 hdfs 上创建一个目录以将您的数据放入(例如 /user/root)。将目录chown到root,就可以将数据上传到hdfs了。
我有 root 访问服务器的权限,安装了 hadoop 和 hive。但是,尽管我有 root 权限,但我无法将数据从文件系统复制到 hdfs:
root@serv:~# hadoop fs -put flume_test/logs /user
put: Permission denied: user=root, access=WRITE, inode="/user":hdfs:supergroup:drwxr-xr-x
我尝试了不同的方法从不在 hdfs 中的文件 flume_test/logs
创建 table。例如:
CREATE TABLE natlog_orc (
src_local_ip STRING,
time_start STRING,
time_end STRING,
src_global_ip STRING,
protocol STRING,
port_start STRING,
port_end STRING
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ","
STORED AS TEXTFILE
LOCATION /root/flume_test/logs;
但没有一个不工作。
那么,如何从不在 hdfs 中的文件创建外部 table?或者我可以更改 hadoop 设置中的哪个参数以获得将数据复制到 hdfs 的必要权限?
HDFS 权限与您的本地文件系统不同。 root 没有超级权限。您收到的错误是因为 root 用户没有写入 /user 的权限。切换到 hdfs 用户(运行 su - hdfs
)并在 hdfs 上创建一个目录以将您的数据放入(例如 /user/root)。将目录chown到root,就可以将数据上传到hdfs了。