往HBase中导入csv文件的方法

        在实际的操作中涉及到将批量的数据插入到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'

猜你喜欢

转载自blog.csdn.net/qq_27575895/article/details/90313208
今日推荐