欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

二、hbase--集成Phoenix實現(xiàn)類SQL操作hbase

一、Phoenix概述

1、簡介
可以把Phoenix理解為Hbase的查詢引擎,phoenix,由saleforce.com開源的一個項目,后又捐給了Apache。它相當于一個Java中間件,幫助開發(fā)者,像使用jdbc訪問關(guān)系型數(shù)據(jù)庫一些,訪問NoSql數(shù)據(jù)庫HBase。

成都創(chuàng)新互聯(lián)公司是一家朝氣蓬勃的網(wǎng)站建設(shè)公司。公司專注于為企業(yè)提供信息化建設(shè)解決方案。從事網(wǎng)站開發(fā),網(wǎng)站制作,網(wǎng)站設(shè)計,網(wǎng)站模板,微信公眾號開發(fā),軟件開發(fā),成都小程序開發(fā),10年建站對成都活動板房等多個行業(yè),擁有豐富的網(wǎng)站建設(shè)經(jīng)驗。

phoenix,操作的表及數(shù)據(jù),存儲在hbase上。phoenix只是需要和Hbase進行表關(guān)聯(lián)起來。然后再用工具進行一些讀或?qū)懖僮鳌?/p>

其實,可以把Phoenix只看成一種代替HBase的語法的一個工具。雖然可以用java可以用jdbc來連接phoenix,然后操作HBase,但是在生產(chǎn)環(huán)境中,不可以用在OLTP中。在線事務(wù)處理的環(huán)境中,需要低延遲,而Phoenix在查詢HBase時,雖然做了一些優(yōu)化,但延遲還是不小。所以依然是用在OLAT中,再將結(jié)果返回存儲下來。

二、部署

基礎(chǔ)環(huán)境:
hadoop
hbase
zookeeper
這個基礎(chǔ)環(huán)境就是前面hbase的部署之后的環(huán)境,請自行按照前面的進行部署,這里不重復部署
下面我們通過Phoenix作為中間件,操作hbase集群數(shù)據(jù)。根據(jù)hbase的版本下載對應(yīng)版本的Phoenix,這里用的是 apache-phoenix-4.14.2-HBase-1.3-bin.tar.gz。并且是部署在bigdata121這臺主機上
解壓程序包:

tar zxf  apache-phoenix-4.14.2-HBase-1.3-bin.tar.gz -C /opt/modules/
mv /opt/modules/apache-phoenix-4.14.2-HBase-1.3-bin /opt/modules/phoenix-4.14.2-HBase-1.3-bin

配置環(huán)境變量:

vim /etc/profile.d/phoenix.sh
#!/bin/bash
export PHOENIX_HOME=/opt/modules/phoenix-4.14.2-HBase-1.3
export PATH=$PATH:${PHOENIX_HOME}/bin

source /etc/profile.d/phoenix.sh

復制hbase的 conf/hbase-site.xml 到/opt/modules/phoenix-4.14.2-HBase-1.3-bin/bin下。

cp ${HBASE_HOME}/conf/hbase-site.xml /opt/modules/phoenix-4.14.2-HBase-1.3-bin/bin

接著將Phoenix訪問hbase 的一些依賴包拷貝到hbase 的lib目錄下,注意:需要復制到所有hbase節(jié)點上

cd /opt/modules/phoenix-4.14.2-HBase-1.3-bin
cp phoenix-4.10.0-HBase-1.2-server.jar phoenix-core-4.10.0-HBase-1.2.jar ${HBASE_HOME}/lib/

復制到另外兩臺hbase節(jié)點上
scp phoenix-4.10.0-HBase-1.2-server.jar phoenix-core-4.10.0-HBase-1.2.jar bigdata122:${HBASE_HOME}/lib/
scp phoenix-4.10.0-HBase-1.2-server.jar phoenix-core-4.10.0-HBase-1.2.jar bigdata122:${HBASE_HOME}/lib/

啟動Phoenix命令行,測試是否能連接hbase

sqlline.py zkserver地址
如:
sqlline.py bigdata121,bigdata122,bigdata123:2181

要注意的是:Phoenix其實就是一個hbase的插件庫,并不是獨立的一個組件,hbase有了這個插件之后,重啟hbase,然后就可使用Phoenix來連接hbase,并操作hbase了。

三、基本使用命令

展示表有哪些

!table

創(chuàng)建表

create table "student"(
id integer not null primary key,
name varchar);
表名不加引號的話,就會默認將表名全部轉(zhuǎn)為大寫字母,加了引號就不會。后面的命令用到表名的時候情況都類似

刪除表

drop table “test”

插入數(shù)據(jù)

upsert into test values(1,'Andy');
插入value的時候,字符串不要用雙引號,只能用單引號,否則報錯.記住這里是upsert,不是insert,別搞錯了

查詢數(shù)據(jù)

select * from "test"。用法基本和普通的sql的select一樣

刪除數(shù)據(jù)

delete from "test" where id=2

修改表結(jié)構(gòu)

增加字段:alter table "student" add address varchar
刪除字段:alter table "student" drop column address

創(chuàng)建映射表

hbase創(chuàng)建表
create 'fruit','info','accout'
插入數(shù)據(jù)
put 'fruit','1001','info:name','apple'
put 'fruit','1001','info:color','red'
put 'fruit','1001','info:price','10'
put 'fruit','1001','account:sells','20'
put 'fruit','1002','info:name','orange'
put 'fruit','1002','info:color','orange'
put 'fruit','1002','info:price','8'
put 'fruit','1002','account:sells','100'

Phoenix創(chuàng)建映射表,注意必須是同名
create view "fruit"(
"ROW" varchar primary key,
"info"."name" varchar,
"info"."color" varchar,
"info"."price" varchar,
"account"."sells" varchar,
);

接著就可以在 Phoenix 中查看到hbase中的數(shù)據(jù)了

四、使用jdbc連接Phoenix

maven項目的pom.xml

<dependency>
    <groupId>org.apache.phoenix</groupId>
    <artifactId>phoenix-core</artifactId>
    <version>4.14.2-HBase-1.3</version>
</dependency>

代碼:

package PhoenixTest;

import org.apache.phoenix.jdbc.PhoenixDriver;

import java.sql.*;

public class PhoenixConnTest {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        //加載phoenix的jdbc驅(qū)動類
        Class.forName("org.apache.phoenix.jdbc.PhoenixDriver");
        //構(gòu)建連接字符串
        String url = "jdbc:phoenix:bigdata121,bigdata122,bigdata123:2181";
        //創(chuàng)建連接
        Connection connection = DriverManager.getConnection(url);
        //創(chuàng)建會話
        Statement statement = connection.createStatement();
        //執(zhí)行sql語句,注意,因為表名需要雙引號,所以記得加上 \ 用于轉(zhuǎn)義
        boolean execute = statement.execute("select * from \"fruit\"");
        if (execute) {
            //獲取返回的執(zhí)行結(jié)果,并打印
            ResultSet resultSet = statement.getResultSet();
            while (resultSet.next()) {
                System.out.println(resultSet.getString("name"));
            }
        }
        statement.close();
        connection.close();

    }
}

用jdbc連接Phoenix,出現(xiàn)的問題

Exception in thread "main" com.google.common.util.concurrent.ExecutionError: java.lang.NoSuchMethodError: com.lmax.disruptor.dsl.Disruptor.<init>(Lcom/lmax/disruptor/EventFactory;ILjava/util/concurrent/ThreadFactory;Lcom/lmax/disruptor/dsl/ProducerType;Lcom/lmax/disruptor/WaitStrategy;)V
    at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2254)
    at com.google.common.cache.LocalCache.get(LocalCache.java:3985)
    at com.google.common.cache.LocalCache$LocalManualCache.get(LocalCache.java:4788)
    at org.apache.phoenix.jdbc.PhoenixDriver.getConnectionQueryServices(PhoenixDriver.java:241)
    at org.apache.phoenix.jdbc.PhoenixEmbeddedDriver.createConnection(PhoenixEmbeddedDriver.java:147)
    at org.apache.phoenix.jdbc.PhoenixDriver.connect(PhoenixDriver.java:221)
    at java.sql.DriverManager.getConnection(DriverManager.java:664)
    at java.sql.DriverManager.getConnection(DriverManager.java:270)
    at PhoenixTest.PhoenixConnTest.main(PhoenixConnTest.java:11)
Caused by: java.lang.NoSuchMethodError: com.lmax.disruptor.dsl.Disruptor.<init>(Lcom/lmax/disruptor/EventFactory;ILjava/util/concurrent/ThreadFactory;Lcom/lmax/disruptor/dsl/ProducerType;Lcom/lmax/disruptor/WaitStrategy;)V
    at org.apache.phoenix.log.QueryLoggerDisruptor.<init>(QueryLoggerDisruptor.java:72)
    at org.apache.phoenix.query.ConnectionQueryServicesImpl.<init>(ConnectionQueryServicesImpl.java:414)
    at org.apache.phoenix.jdbc.PhoenixDriver$3.call(PhoenixDriver.java:248)
    at org.apache.phoenix.jdbc.PhoenixDriver$3.call(PhoenixDriver.java:241)
    at com.google.common.cache.LocalCache$LocalManualCache$1.load(LocalCache.java:4791)
    at com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3584)
    at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2372)
    at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2335)
    at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2250)
    ... 8 more

首先我們看到這一行:

java.lang.NoSuchMethodError: com.lmax.disruptor.dsl.Disruptor

顯示的是com.lmax.disruptor.dsl.Disruptor這個方法不存在,于是在ideal里面找了找,是有這個方法的,然后我百度了下,這個包是hbase和Phoenix依賴的一個包。既然方法是存在的,但是卻顯示不存在的報錯,按照經(jīng)驗來說,很可能是這個依賴包的版本不對,導致某些方法不兼容。所以我嘗試換了下比較新的disruptor這個包的版本,去maven上找了找,挑了個3.3.7的版本(默認的是3.3.0),添加到pom.xml中

<dependency>
    <groupId>com.lmax</groupId>
    <artifactId>disruptor</artifactId>
    <version>3.3.7</version>
</dependency>

然后重新運行程序,奇跡出現(xiàn)了,正常運行了。那很明顯是因為包的版本問題了。

五、Phoenix與hbase結(jié)合使用時的bug

首先hbase的列簇中的字段沒有類型的概念,全都直接用二進制的方式存儲,且hbase本身只能解析string類型的。而我們使用Phoenix來用常規(guī)sql創(chuàng)建表時,字段是有類型的。會出現(xiàn)以下情況的bug
1、hbase顯示亂碼
? 這種情況是在Phoenix創(chuàng)建表的時候,字段有非string類型,比如int,double之類的。然后當從Phoenix使用insert之類的語句插入數(shù)據(jù)時,然后從Phoenix使用select語句查看數(shù)據(jù),是正常的,沒問題的。但是在hbase中使用scan查看表數(shù)據(jù)時,會發(fā)現(xiàn),其他非string類型的字段,顯示全是亂碼。這種情況是正常的,因為前面說了hbase無法解析非string類型,顯示出來是直接二進制的方式顯示。這個bug我暫時無解。
? 這種情況最好的方法就是,不從hbase查詢數(shù)據(jù),而是從Phoenix查詢數(shù)據(jù)。而且在這種情況下,在hbase中,連列簇,rowkey,column都是顯示奇奇怪怪的字符的。完全看不懂

2、Phoenix顯示不正常(不是亂碼)
? 在hbase中實現(xiàn)已存在一張表(有數(shù)據(jù)),然后在Phoenix中創(chuàng)建一張映射表。在hbase端查看數(shù)據(jù)是正常的,但是通過Phoenix查看,發(fā)現(xiàn)非string類型的顯示不正常,比如int,double之類的,變成一些非正常的數(shù)字。比如這樣:

select * from "fruit";
+-------+---------+---------+--------------+--------+
|  ROW  |  name   |  color  |    price     | sells  |
+-------+---------+---------+--------------+--------+
| 1001  | apple   | red     | -1322241488  | null   |
| 1002  | orange  | orange  | -1204735952  | null   |
+-------+---------+---------+--------------+--------+

原因其實很簡單,因為hbase本身的表并沒有存儲任何數(shù)據(jù)類型的信息,但是Phoenix卻強行強行解析成其他數(shù)據(jù)類型,自然不會匹配,所以顯示不正常。

price和sells明明是數(shù)字類型的,但是顯示出來的東西不正常。這種情況解決方案是:在Phoenix創(chuàng)建映射表時,字段類型全部定義為 varchar 這種string類型的。

分享標題:二、hbase--集成Phoenix實現(xiàn)類SQL操作hbase
文章路徑:http://chinadenli.net/article34/joiope.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)、網(wǎng)站排名云服務(wù)器、外貿(mào)網(wǎng)站建設(shè)定制開發(fā)、App開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)
大胆裸体写真一区二区| 国产精品一区二区传媒蜜臀| 97人妻精品一区二区三区免| 欧美精品久久男人的天堂| 日韩欧美好看的剧情片免费| 蜜桃传媒视频麻豆第一区| 欧美一区二区不卡专区| 熟女免费视频一区二区| 欧美成人国产精品高清| 日本黄色美女日本黄色| 免费一区二区三区少妇| 日韩欧美好看的剧情片免费| 国产91麻豆精品成人区| 国产一区二区三区精品免费| 国产精品一区二区香蕉视频| 亚洲午夜av一区二区| 激情国产白嫩美女在线观看| 日韩欧美中文字幕av| 国产福利一区二区三区四区| 在线欧美精品二区三区| 日本高清不卡一二三区| 亚洲国产精品无遮挡羞羞| 欧美大胆女人的大胆人体| 色婷婷国产熟妇人妻露脸| 亚洲国产成人一区二区在线观看| 精品日韩国产高清毛片| 亚洲欧洲精品一区二区三区| 日本不卡片一区二区三区| 欧美黑人在线精品极品| 人人妻人人澡人人夜夜| 男人和女人草逼免费视频| 夫妻性生活一级黄色录像| 四季av一区二区播放| 国产精品一区二区不卡中文| 久久精品少妇内射毛片| 搡老妇女老熟女一区二区| 1024你懂的在线视频| 亚洲国产另类久久精品| 国产亚洲不卡一区二区| 欧美乱码精品一区二区三| 日韩中文高清在线专区|