设为首页 加入收藏

TOP

HBase总结-Java API 与HBase交互实例
2018-11-30 09:44:09 】 浏览:29
Tags:HBase 总结 -Java API 交互 实例

http://blog.csdn.net/lifuxiangcaohui/article/details/39997391

HBase提供了JavaApi的访问接口,掌握这个就跟Java应用使用RDBMS时需要JDBC一样重要


  1. importjava.io.IOException;
  2. importorg.apache.hadoop.conf.Configuration;
  3. importorg.apache.hadoop.hbase.HBaseConfiguration;
  4. importorg.apache.hadoop.hbase.HColumnDescriptor;
  5. importorg.apache.hadoop.hbase.HTableDescriptor;
  6. importorg.apache.hadoop.hbase.KeyValue;
  7. importorg.apache.hadoop.hbase.client.Delete;
  8. importorg.apache.hadoop.hbase.client.Get;
  9. importorg.apache.hadoop.hbase.client.HBaseAdmin;
  10. importorg.apache.hadoop.hbase.client.HTable;
  11. importorg.apache.hadoop.hbase.client.HTablePool;
  12. importorg.apache.hadoop.hbase.client.Put;
  13. importorg.apache.hadoop.hbase.client.Result;
  14. importorg.apache.hadoop.hbase.client.ResultScanner;
  15. importorg.apache.hadoop.hbase.client.Scan;
  16. importorg.apache.hadoop.hbase.util.Bytes;
  17. publicclassHbase{
  18. //声明静态配置
  19. staticConfigurationconf=null;
  20. static{
  21. conf=HBaseConfiguration.create();
  22. conf.set("hbase.zookeeper.quorum","localhost");
  23. }
  24. /*
  25. *创建表
  26. *
  27. *@tableName表名
  28. *
  29. *@family列族列表
  30. */
  31. publicstaticvoidcreatTable(StringtableName,String[]family)
  32. throwsException{
  33. HBaseAdminadmin=newHBaseAdmin(conf);
  34. HTableDescriptordesc=newHTableDescriptor(tableName);
  35. for(inti=0;i<family.length;i++){
  36. desc.addFamily(newHColumnDescriptor(family[i]));
  37. }
  38. if(admin.tableExists(tableName)){
  39. System.out.println("tableExists!");
  40. System.exit(0);
  41. }else{
  42. admin.createTable(desc);
  43. System.out.println("createtableSuccess!");
  44. }
  45. }
  46. /*
  47. *为表添加数据(适合知道有多少列族的固定表)
  48. *
  49. *@rowKeyrowKey
  50. *
  51. *@tableName表名
  52. *
  53. *@column1第一个列族列表
  54. *
  55. *@value1第一个列的值的列表
  56. *
  57. *@column2第二个列族列表
  58. *
  59. *@value2第二个列的值的列表
  60. */
  61. publicstaticvoidaddData(StringrowKey,StringtableName,
  62. String[]column1,String[]value1,String[]column2,String[]value2)
  63. throwsIOException{
  64. Putput=newPut(Bytes.toBytes(rowKey));//设置rowkey
  65. HTabletable=newHTable(conf,Bytes.toBytes(tableName));//HTabel负责跟记录相关的操作如增删改查等//
  66. //获取表
  67. HColumnDescriptor[]columnFamilies=table.getTableDescriptor()//获取所有的列族
  68. .getColumnFamilies();
  69. for(inti=0;i<columnFamilies.length;i++){
  70. StringfamilyName=columnFamilies[i].getNameAsString();//获取列族名
  71. if(familyName.equals("article")){//article列族put数据
  72. for(intj=0;j<column1.length;j++){
  73. put.add(Bytes.toBytes(familyName),
  74. Bytes.toBytes(column1[j]),Bytes.toBytes(value1[j]));
  75. }
  76. }
  77. if(familyName.equals("author")){//author列族put数据
  78. for(intj=0;j<column2.length;j++){
  79. put.add(Bytes.toBytes(familyName),
  80. Bytes.toBytes(column2[j]),Bytes.toBytes(value2[j]));
  81. }
  82. }
  83. }
  84. table.put(put);
  85. System.out.println("adddataSuccess!");
  86. }
  87. /*
  88. *根据rwokey查询
  89. *
  90. *@rowKeyrowKey
  91. *
  92. *@tableName表名
  93. */
  94. publicstaticResultgetResult(StringtableName,StringrowKey)
  95. throwsIOException{
  96. Getget=newGet(Bytes.toBytes(rowKey));
  97. HTabletable=newHTable(conf,Bytes.toBytes(tableName));//获取表
  98. Resultresult=table.get(get);
  99. for(KeyValuekv:result.list()){
  100. System.out.println("family:"+Bytes.toString(kv.getFamily()));
  101. System.out
  102. .println("qualifier:"+Bytes.toString(kv.getQualifier()));
  103. System.out.println("value:"+Bytes.toString(kv.getValue()));
  104. System.out.println("Timestamp:"+kv.getTimestamp());
  105. System.out.println("-------------------------------------------");
  106. }
  107. returnresult;
  108. }
  109. /*
  110. *遍历查询hbase表
  111. *
  112. *@tableName表名
  113. */
  114. publicstaticvoidgetResultScann(StringtableName)throwsIOException{
  115. Scanscan=newScan();
  116. ResultScannerrs=null;
  117. HTabletable=newHTable(conf,Bytes.toBytes(tableName));
  118. try{
  119. rs=table.getScanner(scan);
  120. for(Resultr:rs){
  121. for(KeyValuekv:r.list()){
  122. System.out.println("row:"+Bytes.toString(kv.getRow()));
  123. System.out.println("family:"
  124. +Bytes.toString(kv.getFamily()));
  125. System.out.println("qualifier:"
  126. +Bytes.toString(kv.getQualifier()));
  127. System.out
  128. .println("value:"+Bytes.toString(kv.getValue()));
  129. System.out.println("timestamp:"+kv.getTimestamp());
  130. System.out
  131. .println("-------------------------------------------");
  132. }
  133. }
  134. }finally{
  135. rs.close();
  136. }
  137. }
  138. /*
  139. *遍历查询hbase表
  140. *
  141. *@tableName表名
  142. */
  143. publicstaticvoidgetResultScann(StringtableName,Stringstart_rowkey,
  144. Stringstop_rowkey)throwsIOException{
  145. Scanscan=newScan();
  146. scan.setStartRow(Bytes.toBytes(start_rowkey));
  147. scan.setStopRow(Bytes.toBytes(stop_rowkey));
  148. ResultScannerrs=null;
  149. HTabletable=newHTable(conf,Bytes.toBytes(tableName));
  150. try{
  151. rs=table.getScanner(scan);
  152. for(Resultr:rs){
  153. for(KeyValuekv:r.list()){
  154. System.out.println("row:"+Bytes.toString(kv.getRow()));
  155. System.out.println("family:"
  156. +Bytes.toString(kv.getFamily()));
  157. System.out.println("qualifier:"
  158. +Bytes.toString(kv.getQualifier()));
  159. System.out
  160. .println("value:"+Bytes.toString(kv.getValue()));
  161. System.out.println("timestamp:"+kv.getTimestamp());
  162. System.out
  163. .println("-------------------------------------------");
  164. }
  165. }
  166. }finally{
  167. rs.close();
  168. }
  169. }
  170. /*
  171. *查询表中的某一列
  172. *
  173. *@tableName表名
  174. *
  175. *@rowKeyrowKey
  176. */
  177. publicstaticvoidgetResultByColumn(StringtableName,StringrowKey,
  178. StringfamilyName,StringcolumnName)throwsIOException{
  179. HTabletable=newHTable(conf,Bytes.toBytes(tableName));
  180. Getget=newGet(Bytes.toBytes(rowKey));
  181. get.addColumn(Bytes.toBytes(familyName),Bytes.toBytes(columnName));//获取指定列族和列修饰符对应的列
  182. Resultresult=table.get(get);
  183. for(KeyValuekv:result.list()){
  184. System.out.println("family:"+Bytes.toString(kv.getFamily()));
  185. System.out
  186. .println("qualifier:"+Bytes.toString(kv.getQualifier()));
  187. System.out.println("value:"+Bytes.toString(kv.getValue()));
  188. System.out.println("Timestamp:"+kv.getTimestamp());
  189. System.out.println("-------------------------------------------");
  190. }
  191. }
  192. /*
  193. *更新表中的某一列
  194. *
  195. *@tableName表名
  196. *
  197. *@rowKeyrowKey
  198. *
  199. *@familyName列族名
  200. *
  201. *@columnName列名
  202. *
  203. *@value更新后的值
  204. */
  205. publicstaticvoidupdateTable(StringtableName,StringrowKey,
  206. StringfamilyName,StringcolumnName,Stringvalue)
  207. throwsIOException{
  208. HTabletable=newHTable(conf,Bytes.toBytes(tableName));
  209. Putput=newPut(Bytes.toBytes(rowKey));
  210. put.add(Bytes.toBytes(familyName),Bytes.toBytes(columnName),
  211. Bytes.toBytes(value));
  212. table.put(put);
  213. System.out.println("updatetableSuccess!");
  214. }
  215. /*
  216. *查询某列数据的多个版本
  217. *
  218. *@tableName表名
  219. *
  220. *@rowKeyrowKey
  221. *
  222. *@familyName列族名
  223. *
  224. *@columnName列名
  225. */
  226. publicstaticvoidgetResultByVersion(StringtableName,StringrowKey,
  227. StringfamilyName,StringcolumnName)throwsIOException{
  228. HTabletable=newHTable(conf,Bytes.toBytes(tableName));
  229. Getget=newGet(Bytes.toBytes(rowKey));
  230. get.addColumn(Bytes.toBytes(familyName),Bytes.toBytes(columnName));
  231. get.setMaxVersions(5);
  232. Resultresult=table.get(get);
  233. for(KeyValuekv:result.list()){
  234. System.out.println("family:"+Bytes.toString(kv.getFamily()));
  235. System.out
  236. .println("qualifier:"+Bytes.toString(kv.getQualifier()));
  237. System.out.println("value:"+Bytes.toString(kv.getValue()));
  238. System.out.println("Timestamp:"+kv.getTimestamp());
  239. System.out.println("-------------------------------------------");
  240. }
  241. /*
  242. *List<>results=table.get(get).list();Iterator<>it=
  243. *results.iterator();while(it.hasNext()){
  244. *System.out.println(it.next().toString());}
  245. */
  246. }
  247. /*
  248. *删除指定的列
  249. *
  250. *@tableName表名
  251. *
  252. *@rowKeyrowKey
  253. *
  254. *@familyName列族名
  255. *
  256. *@columnName列名
  257. */
  258. publicstaticvoiddeleteColumn(StringtableName,StringrowKey,
  259. StringfalilyName,StringcolumnName)throwsIOException{
  260. HTabletable=newHTable(conf,Bytes.toBytes(tableName));
  261. DeletedeleteColumn=newDelete(Bytes.toBytes(rowKey));
  262. deleteColumn.deleteColumns(Bytes.toBytes(falilyName),
  263. Bytes.toBytes(columnName));
  264. table.delete(deleteColumn);
  265. System.out.println(falilyName+":"+columnName+"isdeleted!");
  266. }
  267. /*
  268. *删除指定的列
  269. *
  270. *@tableName表名
  271. *
  272. *@rowKeyrowKey
  273. */
  274. publicstaticvoiddeleteAllColumn(StringtableName,StringrowKey)
  275. throwsIOException{
  276. HTabletable=newHTable(conf,Bytes.toBytes(tableName));
  277. DeletedeleteAll=newDelete(Bytes.toBytes(rowKey));
  278. table.delete(deleteAll);
  279. System.out.println("allcolumnsaredeleted!");
  280. }
  281. /*
  282. *删除表
  283. *
  284. *@tableName表名
  285. */
  286. publicstaticvoiddeleteTable(StringtableName)throwsIOException{
  287. HBaseAdminadmin=newHBaseAdmin(conf);
  288. admin.disableTable(tableName);
  289. admin.deleteTable(tableName);
  290. System.out.println(tableName+"isdeleted!");
  291. }
  292. publicstaticvoidmain(String[]args)throwsException{
  293. //创建表
  294. StringtableName="blog2";
  295. String[]family={"article","author"};
  296. //creatTable(tableName,family);
  297. //为表添加数据
  298. String[]column1={"title","content","tag"};
  299. String[]value1={
  300. "HeadFirstHBase",
  301. "HBaseistheHadoopdatabase.Useitwhenyouneedrandom,realtimeread/writeaccesstoyourBigData.",
  302. "Hadoop,HBase,NoSQL"};
  303. String[]column2={"name","nickname"};
  304. String[]value2={"nicholas","lee"};
  305. addData("rowkey1","blog2",column1,value1,column2,value2);
  306. addData("rowkey2","blog2",column1,value1,column2,value2);
  307. addData("rowkey3","blog2",column1,value1,column2,value2);
  308. //遍历查询
  309. getResultScann("blog2","rowkey4","rowkey5");
  310. //根据rowkey范围遍历查询
  311. getResultScann("blog2","rowkey4","rowkey5");
  312. //查询
  313. getResult("blog2","rowkey1");
  314. //查询某一列的值
  315. getResultByColumn("blog2","rowkey1","author","name");
  316. //更新列
  317. updateTable("blog2","rowkey1","author","name","bin");
  318. //查询某一列的值
  319. getResultByColumn("blog2","rowkey1","author","name");
  320. //查询某列的多版本
  321. getResultByVersion("blog2","rowkey1","author","name");
  322. //删除一列
  323. deleteColumn("blog2","rowkey1","author","nickname");
  324. //删除所有列
  325. deleteAllColumn("blog2","rowkey1");
  326. //删除表
  327. deleteTable("blog2");
  328. }
  329. }

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇mongoDB同步数据到Hbase 下一篇HBase写入优化

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目