本篇我们将介绍phoenix的一些基本操作。

1. 如何使用Phoenix输出Hello World?

1.1 使用sqlline终端命令

sqlline.py SZB-L0023780:2181:/hbase114

0:jdbc:phoenix:SZB-L0023780:2181:/hbase114> create table test (mykey integernot null primary key, mycolumn varchar);

0:jdbc:phoenix:SZB-L0023780:2181:/hbase114> upsert into test values(1,'Hello');

0:jdbc:phoenix:SZB-L0023780:2181:/hbase114> upsert into test values(2,'World!');

0:jdbc:phoenix:SZB-L0023780:2181:/hbase114> select * from test;

+--------------+---------------------+

| MYKEY | MYCOLUMN  |

+--------------+---------------------+

| 1      |Hello        |

| 2      | World!       |

+---------------+---------------------+

1.2 使用Java方式访问

创建test.java文件,内容如下:

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.PreparedStatement;

import java.sql.Statement;

public class test2 {

public static void main(String[] args) throws SQLException {

Statement stmt = null;

ResultSet rset = null;

Connection con = DriverManager.getConnection("jdbc:phoenix:SZB-L0023780:2181:/hbase114");

stmt= con.createStatement();

stmt.executeUpdate("create table test2 (mykey integer not null primary key, mycolumn varchar)");

stmt.executeUpdate("upsert into test2 values (1,'Hello')");

stmt.executeUpdate("upsert into test2 values (2,'World!')");

con.commit();

PreparedStatement statement = con.prepareStatement("select * from test2");

rset= statement.executeQuery();

while(rset.next()) {

System.out.println(rset.getString("mycolumn"));

}

statement.close();

con.close();

}

}

编译:

javac test2.java

执行编译好的程序:

java -cp"../phoenix-4.8.0-Hbase-1.1-client.jar:."  test2

输出结果:

Hello

World!

2. 如何通过Phoenix批量加载数据

Phoenix提供了两种方法用来加载CSV数据到Phoenix 表中,一种是通过psql命令,单线程方式加载;另一种是基于MapReduce批量加载方式。

psql方式适合几十MB的数据量,而基于MapReduce的方式适合更大的数据量加载。

下面我们来演示一下通过这两种方式加载CSV格式的数据到Phoenix表中。

(1)样例数据data.csv

12345,John,Doe

67890,Mary,Poppins

(2)创建表SQL

CREATE TABLE example (

my_pk bigint not null,

m.first_name varchar(50),

m.last_name varchar(50)

CONSTRAINT pk PRIMARY KEY(my_pk)

);

(3)通过psql方式加载

bin/psql.py -t EXAMPLE SZB-L0023780:2181:/hbase114 data.csv

psql.py使用的示例如下:

Examples:

psql my_ddl.sql

psql localhost  my_ddl.sql

psql localhost my_ddl.sql my_table.csv

psql -t MY_TABLE my_cluster:1825 my_table2012-Q3.csv

psql -t MY_TABLE -h COL1,COL2,COL3 my_cluster:1825 my_table2012-Q3.csv

psql -t MY_TABLE -h COL1,COL2,COL3 -d : my_cluster:1825 my_table2012-Q3.csv

下面将一些参数说明一下:

Parameter

Description

-t

加载数据的表名,默认为CSV文件名称,大小写敏感

-h

Overrides the column names to which the CSV data maps and is case sensitive. A special value of in-line indicating that the first line of the CSV file determines the column to which the data maps.

-s

Run in strict mode, throwing an error on CSV parsing errors

-d

Supply a custom delimiter or delimiters for CSV parsing

-q

Supply a custom phrase delimiter, defaults to double quote character

-e

Supply a custom escape character, default is a backslash

-a

Supply an array delimiter (explained in more detail below)

(4)通过MapReduce来加载数据

对于分布式集群更高吞吐量数据加载,建议使用MapReduce加载方式。这种方式首先将数据写入HFile中,等HFile创建好之后就写入到hbase表中。

MapReduce加载器是使用Hadoop命令,然后借助Phoenix的Client的Jar实现的,如下:

hadoop jar phoenix-<version>-client.jar org.apache.phoenix.mapreduce.CsvBulkLoadTool--table EXAMPLE --input /data/example.csv

这里需要注意的是,输入的文件必须是HDFS上的文件,不是本地文件系统上的。

比如我在环境里面执行如下;

hadoop jar phoenix-4.8.0-HBase-1.1-client.jarorg.apache.phoenix.mapreduce.CsvBulkLoadTool --table EXAMPLE --input /okok/data.csv-z SZB-L0023780:2181:/hbase114

执行部分日志如下:

mapreduce.AbstractBulkLoadTool: LoadingHFiles from /tmp/94b60a06-86d8-49d7-a8d1-df5428971a33

mapreduce.AbstractBulkLoadTool: LoadingHFiles for EXAMPLE from /tmp/94b60a06-86d8-49d7-a8d1-df5428971a33/EXAMPLE

mapreduce.LoadIncrementalHFiles: Trying toloadhfile=hdfs://SZB-L0023776:8020/tmp/94b60a06-86d8-49d7-a8d1-df5428971a33/EXAMPLE/M/b456b2a2a5834b32aa8fb3463d3bfd76first=\x80\x00\x00\x00\x00\x0009 last=\x80\x00\x00\x00\x00\x01\x092

下面我们将MapReduce加载器常用的参数罗列一下:

Parameter

Description

-i,–input

Input CSV path (mandatory)

-t,–table

Phoenix table name (mandatory)

-a,–array-delimiter

Array element delimiter (optional)

-c,–import-columns

Comma-separated list of columns to be imported

-d,–delimiter

Input delimiter, defaults to comma

-g,–ignore-errors

Ignore input errors

-o,–output

Output path for temporary HFiles (optional)

-s,–schema

Phoenix schema name (optional)

-z,–zookeeper

Zookeeper quorum to connect to (optional)

-it,–index-table

Index table name to load (optional)

注:

psql.py这种方式典型的upsert效率为每秒20k-50k行(依赖每行的大小)。

使用方法如下:

使用psql创建表:

psql.py [zookeeper] ../examples/web_stat.sql

使用psql批量upsert CSV格式的数据:

psql.py [zookeeper] ../examples/web_stat.csv

Apache Phoenix基本操作-1的更多相关文章

  1. Apache Phoenix基本操作-2

    1. 如何映射一个Phoenix的表到一个Hbase的表? 你可以通过Create table/create view DDL语句在一个已经存在的hbase表上创建一个Phoenix表或者视图.对于C ...

  2. [saiku] 使用 Apache Phoenix and HBase 结合 saiku 做大数据查询分析

    saiku不仅可以对传统的RDBMS里面的数据做OLAP分析,还可以对Nosql数据库如Hbase做统计分析. 本文简单介绍下一个使用saiku去查询分析hbase数据的例子. 1.phoenix和h ...

  3. Apache Phoenix JDBC 驱动和Spring JDBCTemplate的集成

    介绍:Phoenix查询引擎会将SQL查询转换为一个或多个HBase scan,并编排运行以生成标准的JDBC结果集. 直接使用HBase API.协同处理器与自己定义过滤器.对于简单查询来说,其性能 ...

  4. phoenix 报错:type org.apache.phoenix.schema.types.PhoenixArray is not supported

    今天用phoenix报如下错误: 主要原因: hbase的表中某字段类型是array,phoenix目前不支持此类型 解决方法: 复制替换phoenix包的cursor文件 # Copyright 2 ...

  5. Mapreduce atop Apache Phoenix (ScanPlan 初探)

    利用Mapreduce/hive查询Phoenix数据时如何划分partition? PhoenixInputFormat的源码一看便知: public List<InputSplit> ...

  6. org.apache.phoenix.exception.PhoenixIOException: SYSTEM:CATALOG

    Error: SYSTEM:CATALOG (state=08000,code=101)org.apache.phoenix.exception.PhoenixIOException: SYSTEM: ...

  7. phoenix连接hbase数据库,创建二级索引报错:Error: org.apache.phoenix.exception.PhoenixIOException: Failed after attempts=36, exceptions: Tue Mar 06 10:32:02 CST 2018, null, java.net.SocketTimeoutException: callTimeou

    v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VM ...

  8. apache phoenix 安装试用

    备注:   本次安装是在hbase docker 镜像的基础上配置的,主要是为了方便学习,而hbase搭建有觉得   有点费事,用镜像简单.   1. hbase 镜像 docker pull har ...

  9. How to use DBVisualizer to connect to Hbase using Apache Phoenix

    How to use DBVisualizer to connect to Hbase using Apache Phoenix Article DB Visualizer is a popular ...

随机推荐

  1. 非jsonp解决跨域问题

    1.服务器端解决跨域问题:配置filter在filter中设置请求头import java.io.IOException; import javax.servlet.Filter;import jav ...

  2. 深入理解line

    什么是行间距? 古时候我们使用印刷机来出来文字.印刷出来的每个字,都位于独立的一个块中. 行间距,即传说中控制两行文字垂直距离的东东.在CSS中,line-height被用来控制行与行之间垂直距离. ...

  3. 使用EasyNVR无插件流媒体服务器接口和EasyPlayer.js播放器插件实现web网页H5播放无插件

    1.背景需求 很多客户在使用EasyNVR无插件流媒体服务器时,不喜欢产品化的界面,有时可能满足不了日常观看使用的需求.因此软件提供丰富的HTTP接口,供第三方平台调用集成.但是有时客户这边可能没有专 ...

  4. EasyGBS国标流媒体视频平台接入海康、大华、宇视的摄像机、硬盘录像机NVR、国标下级平台的方案

    在上一篇<EasyNVR和EasyDSS云平台联手都不能解决的事情,只有国标GB28181能解决了>我们大致介绍了国标GB/T28181的使用场景,而且初步介绍了EasyGBS国标视频平台 ...

  5. 移动端H5页面自适应手机屏幕宽度

    1.由于本人使用的是sublime.text,使用rem就可以达到效果. 点击菜单中的preferences下的browse packages,选择cssrem-master,添加或者编写cssrem ...

  6. 将CodedUI Test 放到控制台程序中,模拟鼠标键盘操作

    CodedUI Test是微软的自动化测试工具,在VS中非常好用.可以用来模拟鼠标点击,键盘输入.但执行的时候必须要用mstest调用,无法传入参数(当然可以写入config文件中,但每次修改十分麻烦 ...

  7. 使用jquery获取单选按钮radio的值

    <input type="radio" name="gender" value="男" >男</input> < ...

  8. MySQL中InnoDB全文检索

    InnoDB存储引擎从1.2.x开始支持全文索引技术,其采用full inverted index的方式.在InnoDB存储引擎中,将(DocumentID,Postition)视为一个ilist.因 ...

  9. MySQL二进制包安装简略过程

    l  软件目录 [root@MASTER_03 ~]# mkdir -pv /data/software [root@MASTER_03 ~]# cd /data/software/ [root@MA ...

  10. python read文件的r和rb的区别

    r,rb,w,wb 那么在读写文件时,有无b标识的的主要区别在哪里呢? 1.文件使用方式标识 'r':默认值,表示从文件读取数据. 'w':表示要向文件写入数据,并截断以前的内容 'a':表示要向文件 ...