【hive-整合】hive整合phoenix及注意問題

測(cè)試環(huán)境:phoenix4.14.1 hbase1.1.1 hive2.3.3 hadoop2.7.2
(由于不是通過CDH/Ambari搭建,所以會(huì)出現(xiàn)組件的兼容性問題)

聊一聊

  1. 為什么要使用hive映射phoenix?
    將數(shù)據(jù)存儲(chǔ)Phoenix,本質(zhì)是HBase提供的SQL。用于前端的查詢,要求RT在秒級(jí)以內(nèi)。phoenix作為hbase二級(jí)索引的最佳組合,測(cè)試過上百萬(wàn)級(jí)別的數(shù)據(jù)構(gòu)建二級(jí)索引最快的能在毫秒內(nèi)返回。另外還有數(shù)據(jù)的統(tǒng)計(jì)分析及數(shù)據(jù)處理、機(jī)器學(xué)習(xí)建模,當(dāng)然可以直接操作phoenix或spark+phoenix。對(duì)于離線的建模業(yè)務(wù),我們希望使用hive做更復(fù)雜的處理。

如何整合phoenix

參考官網(wǎng):http://phoenix.apache.org/hive_storage_handler.html
實(shí)際驗(yàn)證根據(jù)官網(wǎng)只使用phoenix-xxx-hbase-xxx-hive.jar是不足夠的,下面做說明。
Step 1: 添加phoenix-xxx-hbase-xxx-hive.jar、phoenix-xxx-hbase-xxx-client.jar 、phoenix-core-xxx-HBase-xxx.jar三個(gè)jar到hive環(huán)境(此步修改需同步客戶端)

方式一:直接添加改jar包到hive/lib目錄下
方式二:添加jar到hive/lib-aux(沒有則新建),修改hive/conf下的hive-env.sh添加如下環(huán)境變量

export HIVE_AUX_JARS_PATH=${HIVE_HOME}/lib-aux

Step 2: 在hive-site.xml添加如下屬性,使得hive的MR能夠使用phoenix的jar包.若不在hive-site.xml添加改屬性,當(dāng)hive語(yǔ)句執(zhí)行使用mr時(shí)(如有order by的語(yǔ)句)依然會(huì)報(bào)Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.hbase.ipc.controller.ServerRpcControllerFactory錯(cuò)誤。

<property>
      <name>hive.aux.jars.path</name>
      <value>${HIVE_HOME}/lib-aux</value>
</property>

注意(QUESTION):

  1. 由于phoenix jar中和hive/lib中的icu4j jar沖突,啟動(dòng)hive服務(wù)時(shí)會(huì)發(fā)生如下異常:
    Exception in thread "main" java.lang.NoSuchMethodError: com.ibm.icu.impl.ICUBinary.getRequiredData(Ljava/lang/String;)Ljava/nio/ByteBuffer;
    解決方案:移除hive/lib下的icu4j-4.8.1.jar
  2. 當(dāng)hive語(yǔ)句執(zhí)行使用mr時(shí)報(bào)如下錯(cuò)誤
    FAILED: Execution Error, return code -101 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask. HADOOP_CLASSPATH
    原因:根據(jù)官網(wǎng)只使用phoenix-xxx-hbase-xxx-hive.jar是不足夠的,還需要添加phoenix-xxx-hbase-xxx-client.jar 、phoenix-core-xxx-HBase-xxx.jar
  3. 由于hbase中通過HBase命令行單獨(dú)啟動(dòng)異步填充索引MR(run on yarn)時(shí)報(bào)異常升級(jí)了升級(jí)disruptor-3.3.0到disruptor-3.3.11造成hive/lib中的 disruptor-3.3.0.jar本版沖突
    FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. 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;)
    解決方案:同樣升級(jí)disruptor到3.3.11,或者直接在hive/lib下移除disruptor。(經(jīng)測(cè)試好像只升級(jí)或者移除客戶端的disruptor也能夠解決,這里為了統(tǒng)一把端的也一起升級(jí)了)

驗(yàn)證結(jié)果

  1. 創(chuàng)建phoenix表
create table IF NOT EXISTS TEST.TEST_PHOENIX (ID INTEGER not null primary key, name varchar,age INTEGER,score decimal, create_time timestamp,status tinyint, date_time time);

UPSERT INTO TEST.TEST_PHOENIX(id,name,age,score,create_time,status,date_time) VALUES(1,'foo',123,999.8,timestamp '2019-01-30 18:15:00',1,time '2019-01-30 18:30:00');

SELECT * FROM TEST.TEST_PHOENIX LIMIT 10;
  1. 創(chuàng)建hive外部表
create external table TEST_PHOENIX (
  id int,
  name string,
  age int,
  score decimal
)
STORED BY 'org.apache.phoenix.hive.PhoenixStorageHandler'
TBLPROPERTIES (
  "phoenix.table.name" = "TEST.TEST_PHOENIX",
  "phoenix.zookeeper.quorum" = "hdc-data1,hdc-data2,hdc-data3",
  "phoenix.zookeeper.znode.parent" = "/hbase",
  "phoenix.zookeeper.client.port" = "2181",
  "phoenix.rowkeys" = "id",
  "phoenix.column.mapping" = "id:ID, name:NAME, age:AGE, score:SCORE"
);
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 轉(zhuǎn)自 沈釗偉 HBase 在大數(shù)據(jù)生態(tài)圈中的位置 提到大數(shù)據(jù)的存儲(chǔ),大多數(shù)人首先聯(lián)想到的是 Hadoop 和 Ha...
    wangxiaoda閱讀 1,305評(píng)論 0 19
  • 說明:不少讀者反饋,想使用開源組件搭建Hadoop平臺(tái),然后再部署Kylin,但是遇到各種問題。這里我為讀者部署一...
    大詩(shī)兄_zl閱讀 2,183評(píng)論 0 2
  • 環(huán)境配置 hive-2.3.2hbase-1.4.2phoenix-4.14.0-HBase-1.4spark-2...
    soycici閱讀 3,010評(píng)論 1 2
  • hive.ddl.output.format:hive的ddl語(yǔ)句的輸出格式,默認(rèn)是text,純文本,還有json...
    博弈史密斯閱讀 2,100評(píng)論 0 6
  • 簡(jiǎn)介 HBase是高可靠性,高性能,面向列,可伸縮的分布式存儲(chǔ)系統(tǒng),利用HBase技術(shù)可在廉價(jià)PC Serve...
    九世的貓閱讀 2,387評(píng)論 1 6

友情鏈接更多精彩內(nèi)容