本篇我们将介绍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. boost::lockfree::queue

    #include <boost/thread/thread.hpp> #include <boost/lockfree/queue.hpp> #include <iost ...

  2. iOS学习笔记(六)——ViewController

    ViewController是iOS应用程序中重要的部分,是应用程序数据和视图之间的重要桥梁,ViewController管理应用中的众多视图.iOS的SDK中提供很多原生ViewController ...

  3. 【BZOJ2482】[Spoj1557] Can you answer these queries II 线段树

    [BZOJ2482][Spoj1557] Can you answer these queries II Description 给定n个元素的序列. 给出m个询问:求l[i]~r[i]的最大子段和( ...

  4. Carries

    Carries frog has nn integers a1,a2,…,ana1,a2,…,an, and she wants to add them pairwise. Unfortunately ...

  5. 巨蟒python全栈开发数据库前端9:bootstrap

    1.bootstrap的主网站: http://www.bootcss.com/ (1)bootstrap的CSS样式 (2)bootstrap组件 (3)JavaScript插件 (4)阿里图标库的 ...

  6. 巨蟒python全栈开发django10:ajax&&登录认证

    通过题目进行知识点回顾: 聚合查询 From django.db.models import Avg,Min,Max,F,Q,Count,Sum #查询书籍的平均值 Ret= Models.Book. ...

  7. 斯坦福大学Andrew Ng - 机器学习笔记(2) -- 逻辑回归 & 正则化

    大概用了一个月,Andrew Ng老师的机器学习视频断断续续看完了,以下是个人学习笔记,入门级别,权当总结.笔记难免有遗漏和误解,欢迎讨论. 鸣谢:中国海洋大学黄海广博士提供课程视频和个人笔记,在此深 ...

  8. java 抽象类实现接口

    1.抽象类肯定可以实现接口:  2.这不是有没有意义的事情,是一种思想,当你自己写的类想用接口中个别方法的时候(注意不是所有的方法),那么你就可以用一个抽象类先实现这个接口(方法体中为空),然后再用你 ...

  9. re模块(Python中的正则表达式)

    re模块 正则表达式本身是一种小型的.高度专业化的编程语言,而在python中,通过内嵌集成re模块,程序媛们可以直接调用来实现正则匹配.正则表达式模式被编译成一系列的字节码,然后由用C编写的匹配引擎 ...

  10. More on Class Loading and Initialization

    上一篇博客中对于类的加载和初始化进行了详细的说明,但上一篇博客代码中的main()所在的类为导出类, 对其中一些问题的理解可能会引起误导和不明确,所以补充这篇博客进一步说明.以下面的代码为例进行说明: ...