1. 说明
在实际应用场景中可以会有一些格式比较规整的数据文件需要导入到HBase,Phoenix提供了两种方法来加载CSV格式的文件phoenix的数据表。一种是使用单线程的psql工具进行小批量数据加载的方式,一种是使用MapReduce作业来处理大批量数据的方式。第一种方式比较简单这里就不介绍了,想了解的可以参考官方文档。
2. 创建表
在phoenix的CLI界面创建user表。
> create table user (id varchar primary key,account varchar ,passwd varchar);
- 1
3. 添加测试数据
在【PHOENIX_HOME】目录下创建data_import.txt,内容如下:
001,google,AM
002,baidu,BJ
003,alibaba,HZ
4. 执行MapReduce
在【PHOENIX_HOME】目录下执行MR作业(命令的使用跟Phoenix的版本有关)。
$ HADOOP_CLASSPATH=/usr/local/cdh-5.2.0/hbase-0.98.6/lib/hbase-protocol-0.98.6-cdh5.2.0.jar:/usr/local/cdh-5.2.0/hbase-0.98.6/conf hadoop jar phoenix-4.2.2-client.jar org.apache.phoenix.mapreduce.CsvBulkLoadTool -t user -i file:///usr/local/cdh-5.2.0/phoenix-4.2.2/data_import.txt -z 192.168.187.128,192.168.187.129,192.168.187.130:2181
- 1
参数含义如下表:
高能预警:hbase-protocol-0.98.6-cdh5.2.0.jar这个jar包是与HBase的版本有关的,如果是其他版本的HBase请自行替换。
数据文件的路径会默认读取HDFS的文件,这里强制添加前缀file:///指定为本地文件路径了,但是MR执行的过程中还是报错了说找不到文件路径:
Error: java.io.FileNotFoundException: File file:/usr/local/cdh-5.2.0/phoenix-4.2.2/data_import.txt does not exist
at org.apache.hadoop.fs.RawLocalFileSystem.deprecatedGetFileStatus(RawLocalFileSystem.java:524)
at org.apache.hadoop.fs.RawLocalFileSystem.getFileLinkStatusInternal(RawLocalFileSystem.java:737)
at org.apache.hadoop.fs.RawLocalFileSystem.getFileStatus(RawLocalFileSystem.java:514)
at org.apache.hadoop.fs.FilterFileSystem.getFileStatus(FilterFileSystem.java:398)
at org.apache.hadoop.fs.ChecksumFileSystem$ChecksumFSInputChecker.(ChecksumFileSystem.java:140)
但是最后数据却被成功加载到phoenix中。
最终将测试数据data_import.txt放到了HDFS的/phoenix/test/目录下,使用如下命令执行后全程无任何报错。
al/cdh-5.2.0/hbase-0.98.6/conf hadoop jar phoenix-4.2.2-client.jar org.apache.phoenix.mapreduce.CsvBulkLoadTool -t user -i /phoenix/test/data_import.txt -z 192.168.187.128,192.168.187.129,192.168.187.130:2181
- 1
该作业会被提交到YARN由ResourceManager进行资源分配