1. 程式人生 > >[Hive]那些年我們踩過的Hive坑

[Hive]那些年我們踩過的Hive坑

1. 缺少MySQL驅動包

1.1 問題描述

Caused by: org.datanucleus.store.rdbms.connectionpool.DatastoreDriverNotFoundException: The specified datastore driver ("com.mysql.jdbc.Driver") was not found in the CLASSPATH. Please check your CLASSPATH specification, and the name of the driver.
	at org.datanucleus.store.rdbms
.connectionpool.AbstractConnectionPoolFactory.loadDriver(AbstractConnectionPoolFactory.java:58) at org.datanucleus.store.rdbms.connectionpool.BoneCPConnectionPoolFactory.createConnectionPool(BoneCPConnectionPoolFactory.java:54) at org.datanucleus.store.rdbms.ConnectionFactoryImpl.generateDataSources
(ConnectionFactoryImpl.java:213)

1.2. 解決方案

上述問題很可能是缺少mysql的jar包,下載mysql-connector-java-5.1.32.tar.gz,複製到hive的lib目錄下:

xiaosi@yoona:~$ cp mysql-connector-java-5.1.34-bin.jar opt/hive-2.1.0/lib/

2. 元資料庫mysql初始化

2.1 問題描述

執行./hive指令碼時,無法進入,報錯:

Exception in thread "main" java.lang.RuntimeException: Hive metastore database is
not initialized. Please use schematool (e.g. ./schematool -initSchema -dbType ...) to create the schema. If needed, don't forget to include the option to auto-create the underlying database in your JDBC connection string (e.g. ?createDatabaseIfNotExist=true for mysql)

2.2 解決方案

在scripts目錄下執行 schematool -initSchema -dbType mysql命令進行Hive元資料庫的初始化:

xiaosi@yoona:~/opt/hive-2.1.0/scripts$  schematool -initSchema -dbType mysql
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/home/xiaosi/opt/hive-2.1.0/lib/log4j-slf4j-impl-2.4.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/home/xiaosi/opt/hadoop-2.7.3/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]
Metastore connection URL:	 jdbc:mysql://localhost:3306/hive_meta?createDatabaseIfNotExist=true
Metastore Connection Driver :	 com.mysql.jdbc.Driver
Metastore connection User:	 root
Starting metastore schema initialization to 2.1.0
Initialization script hive-schema-2.1.0.mysql.sql
Initialization script completed
schemaTool completed

3. Relative path in absolute URI

3.1 問題描述

Exception in thread "main" java.lang.IllegalArgumentException: java.net.URISyntaxException: Relative path in absolute URI: ${system:java.io.tmpdir%7D/$%7Bsystem:user.name%7D
...
Caused by: java.net.URISyntaxException: Relative path in absolute URI: ${system:java.io.tmpdir%7D/$%7Bsystem:user.name%7D
	at java.net.URI.checkPath(URI.java:1823)
	at java.net.URI.<init>(URI.java:745)
	at org.apache.hadoop.fs.Path.initialize(Path.java:202)
	... 12 more

3.2 解決方案

產生上述問題的原因是使用了沒有配置的變數,解決此問題只需在配置檔案hive-site.xml中配置system:user.name和system:java.io.tmpdir兩個變數,配置檔案中就可以使用這兩個變數:

<property>
    <name>system:user.name</name>
    <value>xiaosi</value>
</property>
<property>
    <name>system:java.io.tmpdir</name>
    <value>/home/${system:user.name}/tmp/hive/</value>
</property>

4. 拒絕連線

4.1 問題描述

on exception: java.net.ConnectException: 拒絕連線; For more details see:  http://wiki.apache.org/hadoop/ConnectionRefused
...
Caused by: java.net.ConnectException: Call From Qunar/127.0.0.1 to localhost:9000 failed on connection exception: java.net.ConnectException: 拒絕連線; For more details see:  http://wiki.apache.org/hadoop/ConnectionRefused
...
Caused by: java.net.ConnectException: 拒絕連線
	at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
	at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:717)
	at org.apache.hadoop.net.SocketIOWithTimeout.connect(SocketIOWithTimeout.java:206)
	at org.apache.hadoop.net.NetUtils.connect(NetUtils.java:531)
	at org.apache.hadoop.net.NetUtils.connect(NetUtils.java:495)
	at org.apache.hadoop.ipc.Client$Connection.setupConnection(Client.java:614)
	at org.apache.hadoop.ipc.Client$Connection.setupIOstreams(Client.java:712)
	at org.apache.hadoop.ipc.Client$Connection.access$2900(Client.java:375)
	at org.apache.hadoop.ipc.Client.getConnection(Client.java:1528)
	at org.apache.hadoop.ipc.Client.call(Client.java:1451)
	... 29 more

4.2 解決方案

有可能是Hadoop沒有啟動,使用jps檢視一下當前程序發現:

xiaosi@yoona:~/opt/hive-2.1.0$ jps
7317 Jps

可以看見,我們確實沒有啟動Hadoop。開啟Hadoop的NameNode和DataNode守護程序

[email protected]:~/opt/hadoop-2.7.3$ ./sbin/start-dfs.sh 
Starting namenodes on [localhost]
localhost: starting namenode, logging to /home/xiaosi/opt/hadoop-2.7.3/logs/hadoop-xiaosi-namenode-yoona.out
localhost: starting datanode, logging to /home/xiaosi/opt/hadoop-2.7.3/logs/hadoop-xiaosi-datanode-yoona.out
Starting secondary namenodes [0.0.0.0]
0.0.0.0: starting secondarynamenode, logging to /home/xiaosi/opt/hadoop-2.7.3/logs/hadoop-xiaosi-secondarynamenode-yoona.out
[email protected]:~/opt/hadoop-2.7.3$ jps
8055 Jps
7561 NameNode
7929 SecondaryNameNode
7724 DataNode

5. 建立Hive表失敗

5.1 問題描述

FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. MetaException(message:For direct MetaStore DB connections, we don't support retries at the client level.)

5.2 解決方案

檢視Hive日誌,看到這樣的錯誤日誌:

NestedThrowablesStackTrace:
Could not create "increment"/"table" value-generation container `SEQUENCE_TABLE` since autoCreate flags do not allow it. 
org.datanucleus.exceptions.NucleusUserException: Could not create "increment"/"table" value-generation container `SEQUENCE_TABLE` since autoCreate flags do not allow it.

出現上述問題主要因為mysql的bin-log format預設為statement ,在mysql中通過 show variables like 'binlog_format'; 語句檢視bin-log format的配置值

mysql> show variables like 'binlog_format';
+---------------+-----------+
| Variable_name | Value     |
+---------------+-----------+
| binlog_format | STATEMENT |
+---------------+-----------+
1 row in set (0.00 sec)

修改bin-log format的預設值,在mysql的配置檔案/etc/mysql/mysql.conf.d/mysqld.cnf中新增 binlog_format="MIXED" ,重啟mysql,再啟動 hive即可。

mysql> show variables like 'binlog_format';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| binlog_format | MIXED |
+---------------+-------+
1 row in set (0.00 sec)

再次執行創表語句:

hive> create table  if not exists employees(
    >    name string comment '姓名',
    >    salary float comment '工資',
    >    subordinates array<string> comment '下屬',
    >    deductions map<string,float> comment '扣除金額',
    >    address struct<city:string,province:string> comment '家庭住址'
    > )
    > comment '員工資訊表'
    > ROW FORMAT DELIMITED 
    > FIELDS TERMINATED BY '\t'
    > LINES TERMINATED BY  '\n'
    > STORED AS TEXTFILE;
OK
Time taken: 0.664 seconds

6. 載入資料失敗

6.1 問題描述

hive> load data local inpath '/home/xiaosi/hive/input/result.txt' overwrite into table recent_attention;
Loading data to table test_db.recent_attention
Failed with exception Unable to move source file:/home/xiaosi/hive/input/result.txt to destination hdfs://localhost:9000/user/hive/warehouse/test_db.db/recent_attention/result.txt
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.MoveTask

檢視Hive日誌,看到這樣的錯誤日誌:

Caused by: org.apache.hadoop.ipc.RemoteException(java.io.IOException): File /home/xiaosi/hive/warehouse/recent_attention/result.txt could only be replicated to 0 nodes instead of minReplication (=1).  There are 0 datanode(s) running and no node(s) are excluded in this operation.

看到 0 datanodes running 我們猜想可能datanode掛掉了,jps驗證一下,果然我們的datanode沒有啟動起來。

6.2 問題解決

7. Java連線Hive 驅動失敗

7.1 問題描述

java.lang.ClassNotFoundException: org.apache.hadoop.hive.jdbc.HiveDriver
	at java.net.URLClassLoader.findClass(URLClassLoader.java:381) ~[na:1.8.0_91]
	at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[na:1.8.0_91]
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) ~[na:1.8.0_91]
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[na:1.8.0_91]
	at java.lang.Class.forName0(Native Method) ~[na:1.8.0_91]
	at java.lang.Class.forName(Class.java:264) ~[na:1.8.0_91]
	at com.sjf.open.hive.HiveClient.getConn(HiveClient.java:29) [classes/:na]
	at com.sjf.open.hive.HiveClient.run(HiveClient.java:53) [classes/:na]
	at com.sjf.open.hive
            
           

相關推薦

[Hive]那些我們Hive

1. 缺少MySQL驅動包1.1 問題描述Caused by: org.datanucleus.store.rdbms.connectionpool.DatastoreDriverNotFoundException: The specified datastore drive

PHP之那些我們

PHP之那些年我們踩過的坑 1、由於使用單引號,以“ ”為分割符,使用PHP函式explode分割字串,不能正常分割。 原因:這個涉及到單引號與雙引號的區別,在單引號中反斜槓不能被解析。因此,使用explode分割時,如果使用單引號, 會被當作字串,而不是換行符,所以此時,不能正常分

那些我們的php(持續更新)

原因:在第一次迴圈時,陣列的指標指向下一個元素,得到的陣列值為2,這個時候,php陣列內部會複製一份臨時的陣列$tmp, $tmp的指標指向第二個元素,後續呼叫current($a),實際上是取的臨時陣列$tmp的當前值,而$tmp的指標始終指向第二個元素,所以輸出結果永遠是2

那些,都在這裡了~|面試題填大全

HTML   1、什麼是盒子模型?     有些面試官會問你對盒子模型的理解,在我們平時看到的網頁中,內部的每一個標籤元素它都是有幾個部分構成的:內容(content)、外邊距(margin)、內邊距(padding)、邊框(border),四個部分組成

那些

 1. fread函式需要注意的點 bool ip_arrival(string ip) { FILE *pfd = NULL; unsigned char tmpbuf[1024]

那些我們,依然有人在

       去年公司南山接了一個大單,由於專案沒有類似的借鑑完全要靠自己摸索,然後是做一版感覺不行又要調整,反反覆覆修改,然後新功能又要開發,一時一個人根本忙不過來,非常頭痛,為工作更方便乾脆安營扎山寨在客戶那邊,邊開發邊討論解決方案,每天都是半夜才回到家。但是由於新

那些的emoji亂碼

前言 這是一個由亂碼引發的故事。抱歉我暫時找不到更加慘烈的圖,請相信我,還有更目不忍視的畫面。請看下圖那些框框,那都是些什麼鬼!這是要害死強迫症嗎?如果同時看到幾十個框,簡直讓人崩潰。 問題來了,這究竟是些什麼鬼? 計算機編碼 既然是亂碼,當然要看編碼,那什麼是編碼呢? 我

那些我跳(0)

編程軟件 思想 模塊化 告訴 流程 一個 公司 框架 設計   1、最近在網上總是可以看到很過java技能培訓廣告,真的是java太火了嗎?私心裏認為寫代碼思想更重要!   2、剛入職的小白,進入公司一切顯得熟悉又陌生。熟悉的代碼,熟悉的那幾種編程軟件,陌生的業務流程,陌生

那些我們的計算機經典書

C/C++ Python 深度學習 JavaScript 神經網絡 點擊關註 異步圖書,置頂公眾號每天與你分享 IT好書 技術幹貨 職場知識參與文末話題討論,每日贈送異步圖書。——異步小編經典作品是一些產生某種特殊影響的書,它們要麽自己以遺忘的方式給我們的想像力打下印記,要麽喬裝成個人或集

CCF篇:那些我們遇到的“小”Problem總結

小總結: 今天水CCF的基礎題,練練速度和一次性的正確率,果然頗有收貨,下面的錯誤可能是我們不經意間就會失誤的操作,到後期若想刷刷有點難度的題,在這些小失誤上浪費時間實在不值得,下面羅列一下我的總結也可以作為我以後的小筆記。 宣告變數n之後,然後在宣告陣列a[n]之前一定

那些我們的Wrox精品紅皮計算機圖書 有獎活動

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

那些我們的檢視日誌的命令

我們經常需要在日誌中搜索日誌,找程式碼中的問題,有時候我們需要精確的找到某一行或某個時間的日誌,下面我們來看看都怎麼用命令來搜尋相關日誌。 cat -n test.log日誌是有行號的, cat test.log 日誌沒有行號 tail -n 10 test.log 查詢日誌尾部最後10行的

ASIO 騰空出世 (那些我們的網路庫.PartII)

ASIO 騰空出世 在地球最大的島上,另一位少年開始拜讀 ACE 的大作。那時候,沒有 libuv 沒有 libev 更沒有 libevent . 有的只是 ACE. 然而這個南方小國的少年沒有跟風陷入 ACE 崇拜,他以敏銳的目光察覺到了 ACE 的弊病。 ACE 哪裡做

關於微信H5公眾號支付我們(get_brand_wcpay_request:fail)(防止更多人

最近公司有了一個新的需求,學生在購買課時的時候,需要讓家長或者朋友代付。這樣的話我首先想到的就是微信的H5支付(微信內建瀏覽器呼叫支付模組)。當時想用這個支付的原因因為是前端程式碼十分簡單。。 然而恰恰是因為自己選擇了這個方法,讓自己連續兩天陷入了困境。 下

【Bugly乾貨分享】那些我們的顯示效能指標

注:Google 在自己文章中用了 Display Performance 來描述我們常說的流暢度,為了顯得有文化,本文主要用“顯示效能”一詞來代指“流暢度”(雖然兩者在概念上有細微差別)。 從 Android 誕生的那一刻起,流暢度就為眾人所關注。一

那些我們的程序

隨著一句fork,一個新程序呱呱落地,但它這時只是老程序的一個克隆。    然後隨著exec,新程序脫胎換骨,離家獨立,開始了為人民服務的職業生涯。    人有生老病死,程序也一樣,它可以是自然死亡,即執行到main函

那些我們的網路庫(PartI)

為什麼要用 C++ 編寫服務端程式? 如果說答案是效能,那麼肯定有人會滿不在乎。覺得效能不夠的話, 只要加機器就可以了。然而更少的機器,意味著更低的能耗,更少的硬體投入,更少的人力資源投入去維護機器。總而言之,更低的成本。 肯定會有人說,C++的開發速度太慢了。然而這

“數據治理那點事”系列之一:那些我們一起

分享 加工 可視化 原則 流程 自動化 影響 發揮 業務 這是一個系列文章,沈澱了我在數據治理領域的一些實踐和思考。共分為5篇: · 數據治理:那些年,我們一起踩過的坑 主要講講數據治理工作中常見的一些誤區。 · 要打仗你手裏先得有張地圖:元數據管理 這一篇講講元數據的概念

資料治理:那些我們一起

寫在前面: 這是一個系列文章,沉澱了我在資料治理領域的一些實踐和思考。共分為5篇。分別是: 一、資料治理:那些年,我們一起踩過的坑 主要講講資料治理工作中常見的一些誤區。 二、要打仗,你手裡先得有張地圖:資料治理之元資料管理 這一篇講講元資料的概念和具體應用場景。 三、不忘初

架構真經 | 那些我們的快取

  在碼農的世界裡,一直以來都有一個信仰:只要使用了快取,效能就會翻倍;用上快取的應用就像是打通任督二脈的武林高手,內力生生不息。但是今天我想跟各位猿類朋友聊一聊自己在使用快取時遇到的那些坑,這裡主要講物件快取應用部分,想了解全面的推薦閱讀《架構真經》。