Hiveログデバッグ
7659 ワード
ここ数日、多くの人がHiveを使う過程でこのような間違いやそのような間違いに遭遇しているのを見て、かわいそうな間違いのログの間違いを見て、ずっと原因が見つからなかった.その後、ログ出力レベルの変更を紹介したところ、エラーの原因がすぐに特定されました.そこで私はこの博文を書いた.HQLの使用中に問題が発生した場合は、ここで説明した方法でデバッグしてエラーに位置決めし、カーブを少なくしてください.はい、くだらないことはあまり本文に入らないでください.多くのプログラムでは、出力ログの形式でプログラムの実行状況を得ることができ、これらの出力ログでプログラムをデバッグすることができ、Hiveも例外ではありません.Hiveではログを出力するためにログ4 jが使用され、デフォルトではCLIはログ情報をコンソールに出力できません.Hive 0.13.0以前のバージョンでは、デフォルトのログ・レベルはWARNで、Hive 0.13.0からデフォルトのログ・レベルはINFOです.デフォルトのログは/tmp/フォルダのhive.logファイルに保存され、フルパスは/tmp//hive.logです.
注意すべきバグ:ローカルモードの場合、logファイル名は「hive.log」ではなく「.log」で、ここで見ることができます.https://issues.apache.org/jira/browse/HIVE-5528このバグはHive 0.13.0で解決されます.
デフォルトのログレベルでは、DEBUG情報を出力することはできません.これにより、さまざまな詳細なエラー情報が間違って数えられません.しかし、log 4 j出力のログ・レベルを次の2つの方法で変更し、これらのデバッグ・ログを使用してエラー・ロケーションを行うことができます.具体的には、次のようにします.
または${HIVE_HOME}/conf/hive-log 4 j.propertiesファイルでhive.root.loggerプロパティを見つけ、以下の設定に変更します.
上記の2つの方法の設定にはそれぞれ優劣があり、方法1の設定は今回のセッションにのみ有効であり、次回もログ出力レベルを変更したい場合は再設定する必要があるが、毎時毎刻ログの出力レベルを変更する必要があるかどうかであるため、出力のログレベルを変更する必要がある場合があり、必要でない場合がある.方法2ログ出力レベルをファイルに設定します.この設定はすべてのユーザーに有効であり、HQLを使用するたびに大量のログが出力されます.この場合、いつまでもHQLを必要とする実行ログのユーザーに適しています.
「Hiveのいくつかのパラメータ構成方法」では、Hiveの3つのパラメータ構成方法を紹介し、いくつかのシステムレベルのパラメータについて言及し、HQLでは設定が無効です.ここでは良い例です.logを設定するパラメータ読み出しはセッション確立前に完了しているためである.すなわち、log 4 jのログ出力レベルを次の方法で変更することはできません.
CLIに入ると、次のようなデバッグ情報が得られます.
次に、ログデバッグの例を示します.ログ出力レベルを変更する前に、次のクエリのすべてのテーブルのHQLは次のようになります.
上のエラーを得ると、上のエラー出力からメタデータに問題があることしかわかりません.具体的なエラーもわかりませんが、ログデバッグレベルhive.root.logger=DEBUG、consoleを変更したら、上記の文を実行するエラー出力を見てみましょう.
上記のエラースタックを使用すると、接続データベースに問題が発生したかどうかを特定できます.これにより、エラーの位置決め範囲が大幅に減少し、本Hive-site.xmlファイルの接続データベースの構成が正しいかどうかを確認して、上記の問題を解決することができます.このブログの文章は特別声明を除いて、すべてオリジナルです!オリジナルを尊重し、転載は過去の記憶から転載することを明記してください(http://www.iteblog.com/)この文書のリンク先: 『Hiveログデバッグ』(http://www.iteblog.com/archives/873) E-mail:[email protected]
注意すべきバグ:ローカルモードの場合、logファイル名は「hive.log」ではなく「.log」で、ここで見ることができます.https://issues.apache.org/jira/browse/HIVE-5528このバグはHive 0.13.0で解決されます.
デフォルトのログレベルでは、DEBUG情報を出力することはできません.これにより、さまざまな詳細なエラー情報が間違って数えられません.しかし、log 4 j出力のログ・レベルを次の2つの方法で変更し、これらのデバッグ・ログを使用してエラー・ロケーションを行うことができます.具体的には、次のようにします.
1
[wyp
@l
-datalog5.data.cn1 ~]$ hive --hiveconf hive.root.logger=DEBUG,console
または${HIVE_HOME}/conf/hive-log 4 j.propertiesファイルでhive.root.loggerプロパティを見つけ、以下の設定に変更します.
1
hive.root.logger=DEBUG,console
上記の2つの方法の設定にはそれぞれ優劣があり、方法1の設定は今回のセッションにのみ有効であり、次回もログ出力レベルを変更したい場合は再設定する必要があるが、毎時毎刻ログの出力レベルを変更する必要があるかどうかであるため、出力のログレベルを変更する必要がある場合があり、必要でない場合がある.方法2ログ出力レベルをファイルに設定します.この設定はすべてのユーザーに有効であり、HQLを使用するたびに大量のログが出力されます.この場合、いつまでもHQLを必要とする実行ログのユーザーに適しています.
「Hiveのいくつかのパラメータ構成方法」では、Hiveの3つのパラメータ構成方法を紹介し、いくつかのシステムレベルのパラメータについて言及し、HQLでは設定が無効です.ここでは良い例です.logを設定するパラメータ読み出しはセッション確立前に完了しているためである.すなわち、log 4 jのログ出力レベルを次の方法で変更することはできません.
1
hive> set hiveconf:hive.root.logger=DEBUG,console;
CLIに入ると、次のようなデバッグ情報が得られます.
01
[wyp
@l
-datalog5.data.cn1 /home/q/hive-
0.11
.
0
-bin/conf]$ hive
02
................................ , ............................
03
13
/
12
/
25
15
:
14
:
54
DEBUG parse.VariableSubstitution: Substitution is on: hive
04
................................ , ............................
05
13
/
12
/
25
15
:
14
:
54
DEBUG security.Groups: Creating
new
Groups object
06
13
/
12
/
25
15
:
14
:
54
DEBUG util.NativeCodeLoader: Trying to load the c...
07
library
for
your platform... using builtin-java classes where applicable
08
13
/
12
/
25
15
:
14
:
54
DEBUG security.JniBasedUnixGroupsMappingWithFallback:
09
Falling back to shell based
10
13
/
12
/
25
15
:
14
:
54
DEBUG security.JniBasedUnixGroupsMappingWithFallback:
11
Group mapping impl=org.apache.hadoop.security.ShellBasedUnixGroupsMapping
12
13
/
12
/
25
15
:
14
:
54
DEBUG security.UserGroupInformation: hadoop login
13
13
/
12
/
25
15
:
14
:
54
DEBUG security.UserGroupInformation: using local
14
user:UnixPrincipal: wyp
15
13
/
12
/
25
15
:
14
:
54
DEBUG security.UserGroupInformation:
16
UGI loginUser:yangping.wu (auth:SIMPLE)
17
................................ , ............................
次に、ログデバッグの例を示します.ログ出力レベルを変更する前に、次のクエリのすべてのテーブルのHQLは次のようになります.
1
hive> show tables;
2
FAILED: Error in metadata: java.lang.RuntimeException: Unable to instantiate
3
org.apache.hadoop.hive.metastore.HiveMetaStoreClient
4
FAILED: Execution Error,
return
code
1
from
5
org.apache.hadoop.hive.ql.exec.DDLTask
6
hive>
上のエラーを得ると、上のエラー出力からメタデータに問題があることしかわかりません.具体的なエラーもわかりませんが、ログデバッグレベルhive.root.logger=DEBUG、consoleを変更したら、上記の文を実行するエラー出力を見てみましょう.
01
hive> show tables;
02
................................ , ............................
03
13
/
12
/
25
15
:
23
:
58
INFO metastore.ObjectStore: ObjectStore, initialize called
04
13
/
12
/
25
15
:
23
:
58
ERROR Datastore.Schema: Failed initialising database.
05
Access denied
for
user
'datalog5'
@
'l-datalog5.data.cn1'
(using password: YES)
06
org.datanucleus.exceptions.NucleusDataStoreException:
07
Access denied
for
user
'datalog5'
@
'l-datalog5.data.cn1'
(using password: YES)
08
at org.datanucleus.store.rdbms.ConnectionFactoryImpl
09
$ManagedConnectionImpl.getConnection(ConnectionFactoryImpl.java:
536
)
10
at org.datanucleus.store.rdbms.RDBMSStoreManager.<init>
11
(RDBMSStoreManager.java:
290
)
12
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
13
................................ , ............................
上記のエラースタックを使用すると、接続データベースに問題が発生したかどうかを特定できます.これにより、エラーの位置決め範囲が大幅に減少し、本Hive-site.xmlファイルの接続データベースの構成が正しいかどうかを確認して、上記の問題を解決することができます.このブログの文章は特別声明を除いて、すべてオリジナルです!オリジナルを尊重し、転載は過去の記憶から転載することを明記してください(http://www.iteblog.com/)この文書のリンク先: 『Hiveログデバッグ』(http://www.iteblog.com/archives/873) E-mail:[email protected]