Search code examples
hadoophbasepermission-denied

Why I'm getting "Permission denied " error HADOOP? And Why I'm unbale to import .csv file?


I have this table called 'emp' in hbase.

hbase(main):006:0> create 'emp', 'personel data'
0 row(s) in 1.3110 seconds

I've inserted 2 rows in it via put command.

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

But, now I want to add data from the csv file.

[cloudera@quickstart ~]$ cat sample_kpi.csv
sam,24,m
emma,21,f
richard,23,m
susane,22,f

You can see my current working directory is: /home/cloudera and in that I've sample_kpi.csv. Hence, path=/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

So, I've written this command for importing data and ran it a few times but it shows error.

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
                                              

And also, I thought this must be occuring coz I haven't imported the sample_kpi.csv file to hbase. So tried importing it but I got this "Permission denied" error:

[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

And sometimes it says: 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.

Can somebody tell me what exactly the error is? And "WHY" is it happening?! Thank you so much!


Solution

  • Your error tells exactly the problem. You're currently the Cloudera user. The folder is owned by hbase user and doesn't allow other users to write - inode="/hbase":hbase:supergroup:drwxr-xr-x

    The permissions are for HDFS, not your local filesystem.

    Run sudo su - hbase first before you can put data into the /hbase HDFS path, and no, hdfs:///etc doesn't exist at all, by default

    Beyond that, I don't think putting files directly into the Hbase data path is the proper way to actually store them. Your syntax errors are because you're putting unquoted, spaced items in the value for -Dimporttsv.columns, so the command is interpreting them as separate arguments. Also, the HDFS path for your user files to import would be /user/cloudera, not /home/cloudera