为什么我收到 "Permission denied " 错误 HADOOP?为什么我无法导入 .csv 文件?
Why I'm getting "Permission denied " error HADOOP? And Why I'm unbale to import .csv file?
我在 hbase 中有一个名为 'emp' 的 table。
hbase(main):006:0> create 'emp', 'personel data'
0 row(s) in 1.3110 seconds
我通过 put 命令在其中插入了 2 行。
hbase(main):020:0> scan 'emp'
ROW COLUMN+CELL
1 column=personel data:name, age, gender, timestamp=1641624361341, value=Pratik, 24, Male
2 column=personel data:name, age, gender, timestamp=1641624514176, value=Emma, 21, Female
2 row(s) in 0.0320 seconds
但是,现在我想从 csv 文件中添加数据。
[cloudera@quickstart ~]$ cat sample_kpi.csv
sam,24,m
emma,21,f
richard,23,m
susane,22,f
您可以看到我当前的工作目录是:/home/cloudera
,其中我有 sample_kpi.csv
。因此,路径=/home/cloudera/sample_kpi.csv
[cloudera@quickstart ~]$ pwd
/home/cloudera
[cloudera@quickstart ~]$ ls
avro data1 Documents emp.java external_jars kerberos Music part_dir rakeshdata sample_kpi.txt Videos
cloudera-manager Desktop Downloads enterprise-deployment.json external-unified kpifolder parcels Pictures rakeshdata1 sparkjars_exec workspace
cm_api.py devices.json eclipse express-deployment.json input.txt lib parquet_write Public sample_kpi.csv Templates zeyo_tab.java
所以,我写了这个用于导入数据的命令,运行它写了几次,但它显示错误。
hbase(main):015:0> $ hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.separator=',' -Dimporttsv.columns=HBASE_ROW_KEY, personal_data:name, personal_data:age, personal_data:gender emp /home/cloudera/sample_kpi.csv
SyntaxError: (hbase):15: syntax error, unexpected null
$ hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.separator=',' -Dimporttsv.columns=HBASE_ROW_KEY, personal_data:name, personal_data:age, personal_data:gender emp /home/cloudera/sample_kpi.csv
^
hbase(main):016:0> hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.separator=',' -Dimporttsv.columns=HBASE_ROW_KEY, personal_data:name, personal_data:age, personal_data:gender emp /home/cloudera/sample_kpi.csv
SyntaxError: (hbase):16: syntax error, unexpected tSYMBEG
hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.separator=',' -Dimporttsv.columns=HBASE_ROW_KEY, personal_data:name, personal_data:age, personal_data:gender emp /home/cloudera/sample_kpi.csv
^
hbase(main):017:0> hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.separator=',' -Dimporttsv.columns=HBASE_ROW_KEY, personal_data:name, personal_data:age, personal_data:gender emp /home/cloudera/sample_kpi.csv
SyntaxError: (hbase):17: syntax error, unexpected tSYMBEG
hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.separator=',' -Dimporttsv.columns=HBASE_ROW_KEY, personal_data:name, personal_data:age, personal_data:gender emp /home/cloudera/sample_kpi.csv
而且,我认为这一定会发生,因为我还没有将 sample_kpi.csv 文件导入到 hbase。所以尝试导入它,但我得到了这个 "Permission denied"
错误:
[cloudera@quickstart ~]$ hadoop dfs -put /home/cloudera/sample_kpi.csv /hbase
DEPRECATED: Use of this script to execute hdfs command is deprecated.
Instead use the hdfs command for it.
put: Permission denied: user=cloudera, access=WRITE, inode="/hbase":hbase:supergroup:drwxr-xr-x
[cloudera@quickstart ~]$ hdfs dfs -put /home/cloudera/sample_kpi.csv /hbase
put: Permission denied: user=cloudera, access=WRITE, inode="/hbase":hbase:supergroup:drwxr-xr-x
有时它说:No such file or directory
[cloudera@quickstart ~]$ hdfs dfs -put /home/cloudera/sample_kpi.csv /etc/hbase
put: `/etc/hbase': No such file or directory
[cloudera@quickstart ~]$ hadoop dfs -put /home/cloudera/sample_kpi.csv /hbase
DEPRECATED: Use of this script to execute hdfs command is deprecated.
Instead use the hdfs command for it.
有人能告诉我错误到底是什么吗?
而“为什么”会发生?!
非常感谢!
您的错误准确说明了问题所在。您目前是 Cloudera 用户。该文件夹归 hbase 用户所有,不允许其他用户写入 - inode="/hbase":hbase:supergroup:drwxr-xr-x
权限适用于 HDFS,而不是您的本地文件系统。
运行 sudo su - hbase
先把数据放到/hbase
HDFS 路径下,不,hdfs:///etc
根本不存在,默认
除此之外,我不认为将文件直接放入 Hbase 数据路径是实际存储它们的正确方法。您的语法错误是因为您在 -Dimporttsv.columns
的值中放置了未加引号的空格项,因此该命令将它们解释为单独的参数。此外,要导入的用户文件的 HDFS 路径将是 /user/cloudera
,而不是 /home/cloudera
我在 hbase 中有一个名为 'emp' 的 table。
hbase(main):006:0> create 'emp', 'personel data'
0 row(s) in 1.3110 seconds
我通过 put 命令在其中插入了 2 行。
hbase(main):020:0> scan 'emp'
ROW COLUMN+CELL
1 column=personel data:name, age, gender, timestamp=1641624361341, value=Pratik, 24, Male
2 column=personel data:name, age, gender, timestamp=1641624514176, value=Emma, 21, Female
2 row(s) in 0.0320 seconds
但是,现在我想从 csv 文件中添加数据。
[cloudera@quickstart ~]$ cat sample_kpi.csv
sam,24,m
emma,21,f
richard,23,m
susane,22,f
您可以看到我当前的工作目录是:/home/cloudera
,其中我有 sample_kpi.csv
。因此,路径=/home/cloudera/sample_kpi.csv
[cloudera@quickstart ~]$ pwd
/home/cloudera
[cloudera@quickstart ~]$ ls
avro data1 Documents emp.java external_jars kerberos Music part_dir rakeshdata sample_kpi.txt Videos
cloudera-manager Desktop Downloads enterprise-deployment.json external-unified kpifolder parcels Pictures rakeshdata1 sparkjars_exec workspace
cm_api.py devices.json eclipse express-deployment.json input.txt lib parquet_write Public sample_kpi.csv Templates zeyo_tab.java
所以,我写了这个用于导入数据的命令,运行它写了几次,但它显示错误。
hbase(main):015:0> $ hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.separator=',' -Dimporttsv.columns=HBASE_ROW_KEY, personal_data:name, personal_data:age, personal_data:gender emp /home/cloudera/sample_kpi.csv
SyntaxError: (hbase):15: syntax error, unexpected null
$ hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.separator=',' -Dimporttsv.columns=HBASE_ROW_KEY, personal_data:name, personal_data:age, personal_data:gender emp /home/cloudera/sample_kpi.csv
^
hbase(main):016:0> hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.separator=',' -Dimporttsv.columns=HBASE_ROW_KEY, personal_data:name, personal_data:age, personal_data:gender emp /home/cloudera/sample_kpi.csv
SyntaxError: (hbase):16: syntax error, unexpected tSYMBEG
hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.separator=',' -Dimporttsv.columns=HBASE_ROW_KEY, personal_data:name, personal_data:age, personal_data:gender emp /home/cloudera/sample_kpi.csv
^
hbase(main):017:0> hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.separator=',' -Dimporttsv.columns=HBASE_ROW_KEY, personal_data:name, personal_data:age, personal_data:gender emp /home/cloudera/sample_kpi.csv
SyntaxError: (hbase):17: syntax error, unexpected tSYMBEG
hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.separator=',' -Dimporttsv.columns=HBASE_ROW_KEY, personal_data:name, personal_data:age, personal_data:gender emp /home/cloudera/sample_kpi.csv
而且,我认为这一定会发生,因为我还没有将 sample_kpi.csv 文件导入到 hbase。所以尝试导入它,但我得到了这个 "Permission denied"
错误:
[cloudera@quickstart ~]$ hadoop dfs -put /home/cloudera/sample_kpi.csv /hbase
DEPRECATED: Use of this script to execute hdfs command is deprecated.
Instead use the hdfs command for it.
put: Permission denied: user=cloudera, access=WRITE, inode="/hbase":hbase:supergroup:drwxr-xr-x
[cloudera@quickstart ~]$ hdfs dfs -put /home/cloudera/sample_kpi.csv /hbase
put: Permission denied: user=cloudera, access=WRITE, inode="/hbase":hbase:supergroup:drwxr-xr-x
有时它说:No such file or directory
[cloudera@quickstart ~]$ hdfs dfs -put /home/cloudera/sample_kpi.csv /etc/hbase
put: `/etc/hbase': No such file or directory
[cloudera@quickstart ~]$ hadoop dfs -put /home/cloudera/sample_kpi.csv /hbase
DEPRECATED: Use of this script to execute hdfs command is deprecated.
Instead use the hdfs command for it.
有人能告诉我错误到底是什么吗? 而“为什么”会发生?! 非常感谢!
您的错误准确说明了问题所在。您目前是 Cloudera 用户。该文件夹归 hbase 用户所有,不允许其他用户写入 - inode="/hbase":hbase:supergroup:drwxr-xr-x
权限适用于 HDFS,而不是您的本地文件系统。
运行 sudo su - hbase
先把数据放到/hbase
HDFS 路径下,不,hdfs:///etc
根本不存在,默认
除此之外,我不认为将文件直接放入 Hbase 数据路径是实际存储它们的正确方法。您的语法错误是因为您在 -Dimporttsv.columns
的值中放置了未加引号的空格项,因此该命令将它们解释为单独的参数。此外,要导入的用户文件的 HDFS 路径将是 /user/cloudera
,而不是 /home/cloudera