Phoenix-基于HBase的低延迟操作 头歌——答案

简介: Phoenix-基于HBase的低延迟操作 头歌——答案

第1关:Phoenix初识

package com.educoder.bigData.sparksql4;
import java.sql.Connection;  
import java.sql.DriverManager;  
import java.sql.SQLException;
public class Case1 {  
    static {  
        try {  
            Class.forName("org.apache.phoenix.jdbc.PhoenixDriver");  
        } catch (ClassNotFoundException e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        }  
    }
    public static void createEducoderTable1() {  
        Connection connection = null;  
        try {  
            connection = DriverManager.getConnection("jdbc:phoenix:127.0.0.1:2181");  
            connection.createStatement().execute(  
                    "CREATE TABLE EDUCODER_TABLE1 (ID BIGINT not null primary key, info.BEGINTIME VARCHAR, ENDTIME VARCHAR, SALARY INTEGER, CITY VARCHAR)DATA_BLOCK_ENCODING='DIFF',VERSIONS=3,BLOCKSIZE='32000',MAX_FILESIZE=10000000");  
            connection.commit();  
        } catch (Exception e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        }  
        finally {  
            if(connection != null) {  
                try {  
                    connection.close();  
                } catch (SQLException e) {  
                    // TODO Auto-generated catch block  
                    e.printStackTrace();  
                }  
            }  
        }  
    }  
    public static void createEducoderTable2() {  
        Connection connection = null;  
        try {  
            connection = DriverManager.getConnection("jdbc:phoenix:127.0.0.1:2181");  
            connection.createStatement().execute(  
                    "CREATE TABLE \"educoder_table2\" (\"id\" BIGINT not null primary key, \"info\".\"begintime\" VARCHAR, \"endtime\" VARCHAR, \"salary\" INTEGER, \"city\" VARCHAR)COMPRESSION='GZ',VERSIONS=5,BLOCKSIZE='65536',MAX_FILESIZE=20000000");  
            connection.commit();  
        } catch (Exception e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        }  
        finally {  
            if(connection != null) {  
                try {  
                    connection.close();  
                } catch (SQLException e) {  
                    // TODO Auto-generated catch block  
                    e.printStackTrace();  
                }  
            }  
        }  
    }
}


第2关 Phoenix 查询和更新

package com.educoder.bigData.sparksql4;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
public class Test2 extends InitHdb2{
    public static void main(String[] args) throws SQLException {
        Connection connection = null;
        try {
            connection = DriverManager.getConnection("jdbc:phoenix:127.0.0.1:2181");
            connection.createStatement().executeUpdate("UPSERT INTO EDUCODER_TABLE1 VALUES('20190615','20190915', 1, 20, '上海') ON DUPLICATE KEY UPDATE SALARY = SALARY + 20");
            connection.createStatement().executeUpdate("UPSERT INTO EDUCODER_TABLE1 VALUES('20190618','20190918', 2, 10, '北京') ON DUPLICATE KEY UPDATE SALARY = SALARY + 20");
            connection.commit();
            queryTable(connection,"EDUCODER_TABLE1");
            connection.createStatement().executeUpdate("UPSERT INTO \"educoder_table2\"  SELECT * FROM EDUCODER_TABLE1 ");
            connection.commit();
            queryTable(connection,"educoder_table2");
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        finally {
            if(connection != null) {
                try {
                    connection.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    }
    private static void queryTable(Connection connection, String tableName) throws SQLException {
        ResultSet executeQuery = connection.createStatement().executeQuery("select * from \""+tableName+"\"");
        ResultSetMetaData metaData = executeQuery.getMetaData();
        int n = 0;
        while (executeQuery.next()) {
            System.out.println(tableName + "第" + ++n + "条数据:");
            for (int j = 0; j < metaData.getColumnCount(); j++) {
                String col_name = metaData.getColumnName(j + 1);
                Object value = executeQuery.getObject(col_name);
                System.out.print(col_name + ":" + value);
                if(j != metaData.getColumnCount() -1) {
                    System.out.print(",");
                }
                else {
                    System.out.println();
                }
            }
        }
    }
}


第3关 Phoenix 二级索引

package com.educoder.bigData.sparksql4;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
public class Test3 extends InitHdb3{
  public static void main(String[] args) throws SQLException {
    Connection connection = null;
    /********* Begin *********/
        String sql = "select * from my_index limit 10";         
        connection = DriverManager.getConnection("jdbc:phoenix:127.0.0.1:2181");
        connection.createStatement().executeUpdate("CREATE  INDEX my_index ON EDUCODER_TABLE1 (salary) ");  
    /********* End *********/
    queryTable(sql, connection);
  }
  public static void queryTable(String sql,Connection connection) throws SQLException {
    ResultSet executeQuery = connection.createStatement().executeQuery(sql);
    ResultSetMetaData metaData = executeQuery.getMetaData();
    System.out.println("索引表数据:");
    while (executeQuery.next()) {
      for (int j = 0; j < metaData.getColumnCount(); j++) {
        String col_name = metaData.getColumnName(j + 1);
        Object value = executeQuery.getObject(col_name);
        System.out.print(col_name + ":" + value);
        if(j != metaData.getColumnCount() -1) {
          System.out.print(",");
        }
        else {
          System.out.println();
        }
      }
    }
  }
}


第4关 Phoenix Spark操作

package com.educoder.bigData.sparksql4;
import java.util.Arrays;
import org.apache.spark.api.java.JavaRDD;  
import org.apache.spark.api.java.JavaSparkContext;  
import org.apache.spark.sql.Dataset;  
import org.apache.spark.sql.Row;  
import org.apache.spark.sql.SaveMode;  
import org.apache.spark.sql.SparkSession;
public class Case4 {
    public static void case4(TableVo1 vo) {  
        SparkSession spark = SparkSession.builder().appName("test1").master("local").getOrCreate();  
        JavaSparkContext context = JavaSparkContext.fromSparkContext(spark.sparkContext());  
        JavaRDD<TableVo1> parallelize = context.parallelize(Arrays.asList(vo));  
        Dataset<Row> df = spark.createDataFrame(parallelize, TableVo1.class);  
        df.write().mode(SaveMode.Overwrite).format("org.apache.phoenix.spark").option("zkUrl", "127.0.0.1:2181").option("table", "OUTPUT_TABLE").save();  
        spark.read().option("table", "OUTPUT_TABLE").option("zkUrl", "127.0.0.1:2181")  
        .format("org.apache.phoenix.spark").load().show();  
    }  
}
相关实践学习
lindorm多模间数据无缝流转
展现了Lindorm多模融合能力——用kafka API写入,无缝流转在各引擎内进行数据存储和计算的实验。
云数据库HBase版使用教程
&nbsp; 相关的阿里云产品:云数据库 HBase 版 面向大数据领域的一站式NoSQL服务,100%兼容开源HBase并深度扩展,支持海量数据下的实时存储、高并发吞吐、轻SQL分析、全文检索、时序时空查询等能力,是风控、推荐、广告、物联网、车联网、Feeds流、数据大屏等场景首选数据库,是为淘宝、支付宝、菜鸟等众多阿里核心业务提供关键支撑的数据库。 了解产品详情:&nbsp;https://cn.aliyun.com/product/hbase &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
6月前
|
分布式计算 资源调度 Hadoop
HBase表数据的读、写操作与综合操作
HBase表数据的读、写操作与综合操作
84 0
|
6月前
|
Java Shell 分布式数据库
【大数据技术Hadoop+Spark】HBase数据模型、Shell操作、Java API示例程序讲解(附源码 超详细)
【大数据技术Hadoop+Spark】HBase数据模型、Shell操作、Java API示例程序讲解(附源码 超详细)
153 0
|
Shell 分布式数据库 Apache
Hbase常用shell操作
Hbase常用shell操作
410 1
|
Java Shell 分布式数据库
HBase高级操作
HBase高级操作
292 0
|
6月前
|
分布式计算 Hadoop Shell
熟悉常用的HBase操作
熟悉常用的HBase操作
117 3
熟悉常用的HBase操作
|
6月前
|
分布式计算 Hadoop Shell
|
4月前
|
DataWorks 数据管理 大数据
DataWorks操作报错合集之在连接HBase时出现超时问题,该怎么解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
5月前
|
Java 大数据 API
【大数据】HDFS、HBase操作教程(含指令和JAVA API)
【大数据】HDFS、HBase操作教程(含指令和JAVA API)
142 0
【大数据】HDFS、HBase操作教程(含指令和JAVA API)
|
6月前
|
消息中间件 关系型数据库 MySQL
实时计算 Flink版操作报错合集之使用 Event Time Temporal Join 关联多个 HBase 后,Kafka 数据的某个字段变为 null 是什么原因导致的
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
120 0
|
6月前
|
SQL 消息中间件 Kafka
实时计算 Flink版操作报错合集之使用 Event Time Temporal Join 关联多个 HBase 后,Kafka 数据的某个字段变为 null 是什么原因导致的
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
83 0