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!
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