在实际的操作中涉及到将批量的数据插入到HBase中,这样的话如果直接一条一条的通过put来进行插入,就显得尤其吃力了,在这里记录下自己所用到的方法,因为网上的资源很多都是千篇一律,然后需要配合自己的来弄,记录下对自己比较有用,以及在使用的过程中需要注意的地方。
创建了一个测试的csv文件,命名为test.csv,数据长这样子
首先将本地的csv文件上传到HDFS上去,这里采用命令的方式进行操作
hadoop fs -put /root/hadoop/hbasetest/test.csv /root/hadoop/input/test.csv
然后将上传到HDFS上的文件导入到HBase中,首先在HBase中建一个表用来存放这个文件的数据,
建表语句如下:
create 'test','baseinfo'
这里创建一个表名为test ,然后列簇名为baseinfo。
表创建好后可以采用describe tablename的命令进行查看,可以用count tablename的命令查看行数 。
下面就是使用命令来进行操作,这里借用了mapreduce的包来进行导入。
hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.separator=',' -Dimporttsv.columns=HBASE_ROW_KEY,baseinfo:color,baseinfo:perfer test /root/hadoop/input/test.csv
下面解释下上面参数的意思,这里使用了ImportTsv方法,然后 后面的参数Dimporttsv.separator为定义分隔符为',' ,Dimporttsv.columns则是定义对应的列名,这里需要注意,第一个是需要指定row的位置,因为在我之前csv文件中第一行就是用来做为row的,所以这里的位置在第一个,那么灵活变动,如果你的row不在第一行,就把HBASE_ROW_KEY放到对应的位置上,然后后面则是将csv中的列color和perfer列名都放到了baseinfo这个列簇下面,在后面跟的就是对应的表名,以及要导入的文件在HDFS的路径。
然后执行后查看表,会发现数据是这样存放的。
在实际的操作中也测试过,如果没有列名的话,直接不指定列名,但是列簇名是一定要指定的。因为HBase中是按照列簇来划分。这一点可能和之前的理解的数据库有点不太一样,同样通过某一个row来查看某一个列簇下的列的话可以采用如下命令
get 'test','"Alina"','baseinfo:color'