日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > 數據庫 > 數據庫應用 > 基于0.14.0版本配置HiveServer2

基于0.14.0版本配置HiveServer2

來源:程序員人生   發布時間:2015-07-02 08:48:26 閱讀次數:4956次
      項目中需要訪問hive作為mondrian的異種數據源履行MDX查詢,而我1般使用hive的時候都是直接通過hive命令行的方式直接履行SQL,或通過hive的jar包在程序中訪問,在這類方式的使用進程中,訪問的hadoop集群都是公司的集群,之前測試hive的進程中記得自己對hive的jdbc源碼進行了修改,主要是修改了1些hive在實現jdbc中沒有實現但是拋出異常的接口,而mondrian會調用這些接口致使下面的流程走不下去了,整體的修改應當說還是比較簡單的。另外1個問題是當時的hive是沒有使用任何認證機制的,包括hadoop也是沒有認證機制的,現在在公司的hadoop集群上跑需要使用kerberos認證,這1塊自己還不熟習,還只是知道怎樣用,所以還需要惡補了1下關于kerberos認證的知識。
      下面介紹1下我對hive幾種使用方式的理解,首先是hive的元數據庫,它分為3種情勢的,第1種是內嵌的derby數據庫,這類方式由于derby會在當前目錄創建1個目錄,所以智能啟動1個hive實例,第2種方式是使用遠程數據庫,也就是使用1個關系數據庫系統,例如mysql等(目前只測試了mysql),hive通過jdbc連接mysql獲得元數據信息,還有1種方式是hive自帶的metaserver,這個server是用來關系元數據的,相當于在真實的元數據管理器之前又搭了1個服務。
      在使用的進程中主要有兩種方式使用hive,第1種就是僅僅把hive作為1個可以對文件使用SQL查詢的根據來使用,也就是直接使用hive命令行,亦或在程序中使用hive提供的函數啟動,在這類情況下我們只需要配置好hive元數據服務器(告知hive存儲了哪些數據庫和表和其屬性)和hive的數據倉庫目錄(1般是1個HDFS的目錄),經過測試數據倉庫的目錄只是在創建數據庫的時候有作用,在創建表的時候會在所在數據庫的目錄下創建表的目錄,另外還需要指定hadoop的配置文件和jar包,畢竟hive依賴于hadoop履行任務。
      第2種方式就是講hive作為1個提供了SQL接口的數據庫使用,我們可以通過jdbc的方式訪問它,類似于使用mysql的方式,本文主要介紹的就是如何配置這個服務器并且使用hive自帶的客戶端和使用jdbc的方式連接使用。
      接下來就是對hive進行環境配置了,對hive,我的1般使用方式是使用遠程的mysql做為源數據服務器。而不使用hive自帶的matestore服務器,貌似后者能支持更大的并發,這個暫時沒需求就簡單的來,除元數據庫還有1個重點就是數據倉庫地址,我配置的我的個人用戶intern的目錄/user/intern,具體配置以下:
<property> <name>hive.metastore.warehouse.dir</name> <value>/user/intern/</value> <description>location of default database for the warehouse</description> </property> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://127.0.0.1:3306/HIVE</value> <description>JDBC connect string for a JDBC metastore</description> </property> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.jdbc.Driver</value> <description>Driver class name for a JDBC metastore</description> </property> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>root</value> <description>username to use against metastore database</description> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>root</value> <description>password to use against metastore database</description> </property>

      另外,這里對hive元數據的創建還需要注意1下,1般情況下我們會選擇使用utf8作為數據庫默許的字符集(應當是為了支持中文),但是如果你使用utf8字符集hive會出現很多稀里糊涂的毛病,讓人摸不到頭腦,所以需要再創建hive數據庫的時候需要指定字符集為latin1,另外還可讓hive自動幫你創建(我沒有嘗試過,不知道是不是可行)。

接下來還需要配置1些關于kerberos認證的東西,具體的配置內容以下:
<property> <name>hive.server2.authentication</name> <value>KERBEROS</value> <description> Client authentication types. NONE: no authentication check LDAP: LDAP/AD based authentication KERBEROS: Kerberos/GSSAPI authentication CUSTOM: Custom authentication provider (Use with property hive.server2.custom.authentication.class) PAM: Pluggable authentication module. </description> </property> <property> <name>hive.server2.authentication.kerberos.principal</name> <value>hive/xxx@HADOOP.XXX.COM</value> <description> Kerberos server principal </description> </property> <property> <name>hive.server2.authentication.kerberos.keytab</name> <value>/home/hzfengyu/hive.keytab</value> <description> Kerberos keytab file for server principal </description> </property>

      這3個配置項分別是配置hiveserver2的認證方式,如果配置不得當客戶端會出現很多問題,默許情況下認證方式是CUSTOM,這里我們配置成KERBEROS,然后配置kerberos認證需要的keytab文件和principal,1般情況下我們履行kinit也就是需要這兩樣東西,不過不同的是這里的principal需要指定完成的,而不只是@符號前面的東西(kinit的時候只指定前面的東西就能夠了),另外需要注意的是這里的keytab對應的用戶必須在hadoop上具有可代理履行的權限,這是hiveserver2所需要的,也就是說其實hiveserver2只是1個指定代理的服務器,不同的用戶通過jdbc連接到hiveserver2,根據客戶端不同的keytab用戶代理不同的用戶履行具體的操作。如果該用戶沒有代理的權限,在使用jdbc和hiveserver2建立連接的時候會出現認證毛病,毛病的堆棧為:
15/05/01 17:32:33 [main]: ERROR transport.TSaslTransport: SASL negotiation failure javax.security.sasl.SaslException: GSS initiate failed [Caused by GSSException: No valid credentials provided (Mechanism level: Server not found in Kerberos database (7) - UNKNOWN_SERVER)] at com.sun.security.sasl.gsskerb.GssKrb5Client.evaluateChallenge(GssKrb5Client.java:212) at org.apache.thrift.transport.TSaslClientTransport.handleSaslStartMessage(TSaslClientTransport.java:94) at org.apache.thrift.transport.TSaslTransport.open(TSaslTransport.java:253) at org.apache.thrift.transport.TSaslClientTransport.open(TSaslClientTransport.java:37) at org.apache.hadoop.hive.thrift.client.TUGIAssumingTransport$1.run(TUGIAssumingTransport.java:52) at org.apache.hadoop.hive.thrift.client.TUGIAssumingTransport$1.run(TUGIAssumingTransport.java:49) at java.security.AccessController.doPrivileged(Native Method)

      這里我用的是hive用戶,這個用戶具有代理權限,而我使用jdbc連接的機器使用的用戶是intern,首先在hive機器上履行啟動hiveserver2的命令:
./bin/hive --service hiveserver2

然后再客戶真個機器上通過hive自帶的beeline進行連接:
./bin/beeline

然后使用connect命令連接hiveserver2:
beeline> !connect jdbc:hive2://hiveserver2-ip:10000/foodmart;principal=hive/xxx@HADOOP.XXX.COM; scan complete in 34ms Connecting to jdbc:hive2://bitest0.server.163.org:10000/foodmart;principal=hive/app⑵0.photo.163.org@HADOOP.HZ.NETEASE.COM; Enter username for jdbc:hive2://bitest0.server.163.org:10000/foodmart;principal=hive/app⑵0.photo.163.org@HADOOP.HZ.NETEASE.COM;: Enter password for jdbc:hive2://bitest0.server.163.org:10000/foodmart;principal=hive/app⑵0.photo.163.org@HADOOP.HZ.NETEASE.COM;: Connected to: Apache Hive (version 0.14.0) Driver: Hive JDBC (version 0.14.0) Transaction isolation: TRANSACTION_REPEATABLE_READ 0: jdbc:hive2://bitest0.server.163.org:10000/>

      連接的時候需要指定jdbc的url(默許的端口號為10000,也能夠在hiveserver2的配置文件中配置),另外還需要制定服務器的principal,也就是在上面配置的那個hive.server2.authentication.kerberos.principal,而客戶端用戶使用的用戶就是客戶真個當前用戶,可使用klist查看。

除使用自帶的beeline連接,還可以在程序中使用jdbc進行連接,測試代碼以下:
import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.security.UserGroupInformation; public class TestHive { public static void main(String[] args) throws SQLException { try { Class.forName("org.apache.hive.jdbc.HiveDriver"); } catch (ClassNotFoundException e) { e.printStackTrace(); } Configuration conf = new Configuration(); conf.setBoolean("hadoop.security.authorization", true); conf.set("hadoop.security.authentication", "kerberos"); UserGroupInformation.setConfiguration(conf); try { UserGroupInformation.loginUserFromKeytab("intern/bigdata", "C:UsersAdministratorDesktopintern.keytab"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } Connection conn = DriverManager .getConnection( "jdbc:hive2://hiveserver2-ip:10000/foodmart;principal=hive/xxx@HADOOP.XXX.COM;User=;Password=;", "", ""); Statement stmt = conn.createStatement(); String sql = "select * from account limit 10"; System.out.println("Running: " + sql); ResultSet res = stmt.executeQuery(sql); while (res.next()) { System.out.println(String.valueOf(res.getInt(1)) + " " + res.getString(2)); } } }

      好了,這里說完了如何搭建1個使用kerberos認證的hiveserver2,下1篇在介紹如何使用hive作為mondrian的數據源履行MDX查詢。

      最后的最后,介紹1下遇到的1個最大的問題,在配置kerberos認證的時候,我使用的hive版本是0.13.1,依照上面的配置出現了以下的問題:
2015-04⑶0 17:02:22,602 ERROR [Thread⑹]: thrift.ThriftCLIService (ThriftBinaryCLIService.java:run(93)) - Error: java.lang.NoSuchFieldError: SASL_PROPS at org.apache.hadoop.hive.thrift.HadoopThriftAuthBridge20S.getHadoopSaslProperties(HadoopThriftAuthBridge20S.java:126) at org.apache.hive.service.auth.HiveAuthFactory.getSaslProperties(HiveAuthFactory.java:116) at org.apache.hive.service.auth.HiveAuthFactory.getAuthTransFactory(HiveAuthFactory.java:133) at org.apache.hive.service.cli.thrift.ThriftBinaryCLIService.run(ThriftBinaryCLIService.java:43) at java.lang.Thread.run(Thread.java:701) 2015-04⑶0 17:02:22,605 INFO [Thread[Thread⑺,5,main]]: delegation.AbstractDelegationTokenSecretManager (AbstractDelegationTokenSecretManager.java:updateCurrentKey( 222)) - Updating the current master key for generating delegation tokens 2015-04⑶0 17:02:22,612 INFO [Thread⑶]: server.HiveServer2 (HiveStringUtils.java:run(623)) - SHUTDOWN_MSG: /************************************************************ SHUTDOWN_MSG: Shutting down HiveServer2 at bitest0.server.163.org/10.120.36.85 ************************************************************/

        最后在google找了1下相干的毛病,發現了HIVE的這個bug:https://issues.apache.org/jira/browse/HIVE⑺620
不知道我遇到的是否是這個問題,但是不管如何就是解決不了這個問題(其實可以說是束手無策),我就換了1下hive的版本,上看說在0.14.0已解決,我就換成了新的版本,果然這個問題不再出現了,至于究竟是否由這個bug引發也不得而知了。

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 91com在线观看 | 亚洲精品美女久久久久网站 | 色片视频| 亚久久 | 免费看v片 | 久久久久久亚洲av毛片大全 | 久久久久av| 美女高潮网站 | 日韩在线观看一区 | 欧美性猛片aaaaaaa做受 | 亚洲精品国产综合区久久久久久久 | 成人激情在线 | 亚洲精品视频免费看 | 日韩在线免费视频 | 精品久久99 | 一二区成人影院电影网 | 亚洲色图25p | 黄色综合 | 99热这里只有精品2 国产福利在线导航 | 精品在线一区 | 免费av在线| 精品国产一区二区三区四区四 | 99精品一区 | 精品国产91久久久久久老师 | 97视频在线免费播放 | 欧美日韩亚洲视频 | 日韩欧美一区二区三区久久婷婷 | 久久国产精品免费一区二区三区 | 五月婷婷中文字幕 | 亚洲国产一区二区三区, | 国产精品乱码久久久久久 | 日韩色网站 | 午夜三级在线观看 | 九九香蕉视频 | 国产成人在线不卡 | 美女国产精品 | 亚洲欧美视频一区 | 日韩精品欧美精品 | 久久久91精品 | 成年免费在线视频 | 麻豆乱码国产一区二区三区 |