1.加数据集上传到hdfs中
1.1上传数据到系统
1.2将数据上传到hdfs中
hdfs dfs -put /root/temp/tb_import.csv /csvFiles
如果没有文件夹则先创建文件夹
hdfs dfs -mkdir -p /csvFiles
2.加csv数据转换为hfile
hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.separator=, -Dimporttsv.columns='HBASE_ROW_KEY,cf:brand,cf:price' -Dimporttsv.bulk.output=/csvFiles/out/ pc_info /csvFiles
hbase org.apache.hadoop.hbase.mapreduce.ImportTsv
-Dimporttsv.separator=,
-Dimporttsv.columns=‘HBASE_ROW_KEY,cf:brand,cf:price’
-Dimporttsv.bulk.output=/root/temp/out/ --输出路径 pc_info --hbase中将用创建的表名 /root/temp --csv数据集输入路径
3.加hfile添加到hbse中
hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles /csvFiles/out/ pc_info
hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles
/csvFiles/out/ - - 上面步骤的输出路径,即csv转换为hfile的hfile文件路径 pc_info
pc_info - - 表名
4.原理说明和补充
因为hbase的数据存储是利用hdfs来进行存储的,所以对可以进行批量处理的数据我们就可以直接一部到位(省去其中的rpc请求,能减少网络开销,极大的提高了性能和效率),将待数据集直接处理成hflie格式的数据,然后加载到hbse中。
其原理就是使用mapReduce程序对指定位置的csv文件进行处理成hfile文件然后输出到指定目录,再利用hbase中的加载工具加载到hdfs中
说明补充:
-Dimporttsv.skip.bad.lines=false - 若遇到无效行则失败
-Dimporttsv.separator=, - 使用特定分隔符,默认是tab也就是\t
-Dimporttsv.timestamp=currentTimeAsLong - 使用导入时的时间戳
-Dimporttsv.mapper.class=my.Mapper - 使用用户自定义Mapper类替换TsvImporterMapper
-Dmapreduce.job.name=jobName - 对导入使用特定mapreduce作业名
-Dcreate.table=no - 避免创建表,注:如设为为no,目标表必须存在于HBase中
-Dno.strict=true - 忽略HBase表列族检查。默认为false
-Dimporttsv.bulk.output=/user/yarn/output 作业的输出目录