为什么我收到 "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