1

Hiveを使用してCassandraファイルシステム(CFS)に保存されている固定幅のテキストファイルを読み込もうとしています。ハイブクライアントから実行すると、ファイルをクエリできます。ただし、Hadoop Hive JDBCから実行しようとすると、テーブルが使用できないか、接続が不良であると表示されます。以下は私が行った手順です。

入力ファイル(employees.dat):

21736Ambalavanar              Thirugnanam              BOY-EAG       2005-05-091992-11-18
21737Anand                    Jeyamani                 BOY-AST       2005-05-091985-02-12
31123Muthukumar               Rajendran                BOY-EES       2009-08-121983-02-23

Hiveクライアントを起動しています

bash-3.2# dse hive;
Logging initialized using configuration in file:/etc/dse/hive/hive-log4j.properties
Hive history file=/tmp/root/hive_job_log_root_201209250900_157600446.txt
hive> use HiveDB;
OK
Time taken: 1.149 seconds

固定幅形式のテキストファイルを指すHive外部テーブルを作成する

hive> CREATE EXTERNAL TABLE employees (empid STRING, firstname STRING, lastname STRING, dept STRING, dateofjoining STRING, dateofbirth STRING)
    > ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe'
    > WITH SERDEPROPERTIES ("input.regex" = "(.{5})(.{25})(.{25})(.{15})(.{10})(.{10}).*" )
    > LOCATION 'cfs://hostname:9160/folder/';
OK
Time taken: 0.524 seconds

テーブルから*を選択します。

hive> select * from employees;
OK
21736    Ambalavanar                     Thirugnanam                     BOY-EAG        2005-05-09      1992-11-18
21737    Anand                           Jeyamani                        BOY-AST        2005-05-09      1985-02-12
31123    Muthukumar                      Rajendran                       BOY-EES        2009-08-12      1983-02-23
Time taken: 0.698 seconds

ハイブテーブルの特定のフィールドで選択を実行すると、パーミッションエラーがスローされます(最初の問題)

hive> select empid, firstname from employees;
Total MapReduce jobs = 1
Launching Job 1 out of 1
Number of reduce tasks is set to 0 since there's no reduce operator
java.io.IOException: The ownership/permissions on the staging directory cfs:/tmp/hadoop-root/mapred/staging/root/.staging is not as expected. It is owned by root and permissions are rwxrwxrwx. The directory must be owned by the submitter root or by root and permissions must be rwx------
        at org.apache.hadoop.mapreduce.JobSubmissionFiles.getStagingDir(JobSubmissionFiles.java:108)
        at org.apache.hadoop.mapred.JobClient$2.run(JobClient.java:856)
        at org.apache.hadoop.mapred.JobClient$2.run(JobClient.java:850)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.Subject.doAs(Subject.java:416)
        at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1093)
        at org.apache.hadoop.mapred.JobClient.submitJobInternal(JobClient.java:850)
        at org.apache.hadoop.mapred.JobClient.submitJob(JobClient.java:824)
        at org.apache.hadoop.hive.ql.exec.ExecDriver.execute(ExecDriver.java:452)
        at org.apache.hadoop.hive.ql.exec.MapRedTask.execute(MapRedTask.java:136)
        at org.apache.hadoop.hive.ql.exec.Task.executeTask(Task.java:133)
        at org.apache.hadoop.hive.ql.exec.TaskRunner.runSequential(TaskRunner.java:57)
        at org.apache.hadoop.hive.ql.Driver.launchTask(Driver.java:1332)
        at org.apache.hadoop.hive.ql.Driver.execute(Driver.java:1123)
        at org.apache.hadoop.hive.ql.Driver.run(Driver.java:931)
        at org.apache.hadoop.hive.cli.CliDriver.processLocalCmd(CliDriver.java:255)
        at org.apache.hadoop.hive.cli.CliDriver.processCmd(CliDriver.java:212)
        at org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:403)
        at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:671)
        at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:554)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:616)
        at org.apache.hadoop.util.RunJar.main(RunJar.java:156)
Job Submission failed with exception 'java.io.IOException(The ownership/permissions on the staging directory cfs:/tmp/hadoop-root/mapred/staging/root/.staging is not as expected. It is owned by root and permissions are rwxrwxrwx. The directory must be owned by the submitter root or by root and permissions must be rwx------)'
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.MapRedTask

2番目の問題は、JDBC Hiveドライバー(dse / cassandraノードの外部)からselect *クエリを実行しようとすると、テーブルemployeesが使用できないことを示しています。作成された外部テーブルは一時テーブルのように機能し、永続化されません。'hive> show Tables;'を使用すると、employeesテーブルが一覧表示されません。誰かが私が問題を理解するのを手伝ってくれますか?

4

1 に答える 1

3

最初の問題に対する即時の回答はありませんが、2番目の問題は既知の問題によるもののようです。

DSE 2.1には、showtablesの実行時にCFSファイルから作成された外部テーブルをメタストアから削除するバグがあります。テーブルのメタデータのみが削除され、データはCFSに残るため、テーブル定義を再作成する場合は、再ロードする必要はありません。Cassandra ColumnFamiliesがサポートするテーブルは、このバグの影響を受けません。これはDSEの2.2リリースで修正されており、間もなくリリースされる予定です。

私はHiveJDBCドライバーに精通していませんが、いずれかの時点でShow Tablesコマンドを発行すると、このバグが発生する可能性があります。

于 2012-09-25T15:30:56.317 に答える