Apache Phoenix基本操作-1
本篇我们将介绍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的更多相关文章
- Apache Phoenix基本操作-2
1. 如何映射一个Phoenix的表到一个Hbase的表? 你可以通过Create table/create view DDL语句在一个已经存在的hbase表上创建一个Phoenix表或者视图.对于C ...
- [saiku] 使用 Apache Phoenix and HBase 结合 saiku 做大数据查询分析
saiku不仅可以对传统的RDBMS里面的数据做OLAP分析,还可以对Nosql数据库如Hbase做统计分析. 本文简单介绍下一个使用saiku去查询分析hbase数据的例子. 1.phoenix和h ...
- Apache Phoenix JDBC 驱动和Spring JDBCTemplate的集成
介绍:Phoenix查询引擎会将SQL查询转换为一个或多个HBase scan,并编排运行以生成标准的JDBC结果集. 直接使用HBase API.协同处理器与自己定义过滤器.对于简单查询来说,其性能 ...
- phoenix 报错:type org.apache.phoenix.schema.types.PhoenixArray is not supported
今天用phoenix报如下错误: 主要原因: hbase的表中某字段类型是array,phoenix目前不支持此类型 解决方法: 复制替换phoenix包的cursor文件 # Copyright 2 ...
- Mapreduce atop Apache Phoenix (ScanPlan 初探)
利用Mapreduce/hive查询Phoenix数据时如何划分partition? PhoenixInputFormat的源码一看便知: public List<InputSplit> ...
- org.apache.phoenix.exception.PhoenixIOException: SYSTEM:CATALOG
Error: SYSTEM:CATALOG (state=08000,code=101)org.apache.phoenix.exception.PhoenixIOException: SYSTEM: ...
- 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 ...
- apache phoenix 安装试用
备注: 本次安装是在hbase docker 镜像的基础上配置的,主要是为了方便学习,而hbase搭建有觉得 有点费事,用镜像简单. 1. hbase 镜像 docker pull har ...
- 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 ...
随机推荐
- 【BZOJ3620】似乎在梦中见过的样子 KMP
[BZOJ3620]似乎在梦中见过的样子 Description “Madoka,不要相信 QB!”伴随着 Homura 的失望地喊叫,Madoka 与 QB 签订了契约. 这是 Modoka 的一个 ...
- iOS蓝牙接收外设数据自动中断
一.错误原因 在做iOS设备作为central,与蓝牙外设连接,接收蓝牙外设传输的数据时发生蓝牙中断. 在- (void)centralManager:(CBCentralManager *)cent ...
- qs.parse()、qs.stringify()、JSON.stringify() 用法及区别
在处理数据的时候,有时候我们需要将对象和字符串和json之间进行转换,这个时候我们可以使用以下的方法 qs是一个npm仓库所管理的包,可通过npm install qs命令进行安装. qs.strin ...
- Django的admin样式丢失【静态文件收集】
在部署完Django项目后,进行admin后台登录发现样式丢失,后台日志显示:js和css文件丢失 解决办法: 配置settings.py如下: #DEBUG打开时,app的静态文件默认从这里读取 S ...
- MySQL事件的先后
今天闲聊之时 提及MySQL事件的执行,发现一些自己之前没有注意的细节 如果在执行事件过程中,如果insert的存储过程发生意外 会如何 USE iot2; CREATE TABLE aaaa (ti ...
- Android学习笔记之AndroidManifest.xml文件解析(详解)
一.关于AndroidManifest.xml AndroidManifest.xml 是每个android程序中必须的文件.它位于整个项目的根目录,描述了package中暴露的组件(activiti ...
- vue-cli 搭建项目
1.cnpm install -g vue-cli 2.vue -V(注意大写,查vue版本) 3.vue init webpack vue1(创建vue1目录) 4.cd vue1(定位到目录中) ...
- Hexo 使用中搭建博客过程中遇到的坑
本地执行hexo s 时报错: WARN No layout: index.html 原因:theme 没有下载下来,经查,theme文件夹下为空. 新建文章后,执行 hexo g 时报如下错误: ( ...
- LVM逻辑磁盘管理
一.简介 LVM是逻辑盘卷管理(Logical Volume Manager)的简称,它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵 ...
- 我的npm笔记
本文记录一些npm的使用技巧,主要包括自己常用的命令,做个备忘. NPM 是什么? NPM是NodeJS的包管理工具,现在已经进一步发展,致力于为很多其他平台提供包管理工具,其核心思想就是让包的安装更 ...