【问题标题】:hive understanding table creation蜂巢理解表创建
【发布时间】:2016-03-03 16:27:22
【问题描述】:

我正在接受mooc

它告诉我们使用以下命令将一些文件从我们的 PC 上传到 hdfs

azure storage blob upload local_path container data/logs/2008-01.txt.gz

我也是这样做的。 后来当我在 PUTTY 安全外壳中输入以下命令时,我能够看到该文件

hdfs dfs -ls /data/logs
Found 6 items
-rwxrwxrwx   1     331941 2016-03-03 15:56 /data/logs/2008-01.txt.gz
-rwxrwxrwx   1     331941 2016-03-03 15:58 /data/logs/2008-02.txt.gz
-rwxrwxrwx   1     331941 2016-03-03 15:58 /data/logs/2008-03.txt.gz
-rwxrwxrwx   1     331941 2016-03-03 15:58 /data/logs/2008-04.txt.gz
-rwxrwxrwx   1     331941 2016-03-03 15:58 /data/logs/2008-05.txt.gz
-rwxrwxrwx   1     331941 2016-03-03 15:58 /data/logs/2008-06.txt.gz

然后我们启动了一个hive 终端并首先创建了一个表,然后使用

将数据插入到该表中
load data inpath '/data/logs' into TABLE rawlog;

然后我们使用下面的命令创建了一个外部表

CREATE EXTERNAL TABLE cleanlog
(log_date DATE,
log_time STRING,
c_ip STRING,
cs_username STRING,
s_ip STRING,
s_port STRING,
cs_method STRING,
cs_uri_stem STRING,
cs_uri_query STRING,
sc_status STRING,
sc_bytes INT,
cs_bytes INT,
time_taken INT,
cs_user_agent STRING,
cs_referrer STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ' '
STORED AS TEXTFILE LOCATION '/data/cleanlog';

我们使用

将数据插入到表中
INSERT INTO TABLE cleanlog
SELECT *
FROM rawlog
WHERE SUBSTR(log_date, 1, 1) <> '#';

我退出蜂巢并输入以下命令

hdfs dfs -ls /data/logs
  1. 我在该文件夹中看不到任何内容,为什么?上传的日志在哪里 文件去哪儿了?
  2. rawlog 表在哪里?它是否存在于同一个文件夹中?为什么我看不到?
  3. 为什么我在我的 cleanlog 文件夹中看到文件 00000_0?是新的吗 桌子?如果我输入命令

    hdfs dfs -ls /data/cleanlog

我得到的输出是

Found 1 items
-rwxr-xr-x   1 sshuser supergroup   71323206 2016-03-03 16:11 /data/cleanlog/000000_0
################----------------------------------更新 1
  1. 如果在/data/logs/ 再加载一个数据文件会发生什么情况 然后运行select * from rawlog?它会自动提取数据吗 来自新文件?

【问题讨论】:

    标签: hadoop hive hdfs


    【解决方案1】:

    如果您不想丢失源文件夹中的数据,请使用外部表。看看这个 SE 问题:

    Difference between `load data inpath ` and `location` in hive?

    1. 我在该文件夹中看不到任何内容,为什么?上传的日志文件去哪了?

    它们已被删除,因为数据加载到表中,并且您在路径中使用加载数据而不是外部表

    1. rawlog 表在哪里?它是否存在于同一个文件夹中?为什么我看不到?

    数据所在的文件夹中不存在表定义。在您的 create table 语句中,您已经引用了要存储为 /data/cleanlog 的表数据的位置

    查看以下有关 hive 将文件存储在 hdfs 中的位置的查询。

    Where does Hive store files in HDFS?

    I have created a table in hive, I would like to know which directory my table is created in?

    1. 为什么我在我的 cleanlog 文件夹中看到文件 00000_0?是新表吗?

    这不是新表。在 hive shell 中执行此命令。

    describe formatted <table_name>;
    

    编辑:关于表的增量更新,请按照此article 和此问题的步骤进行操作:Delta/Incremental Load in Hive

    【讨论】:

    • 让我看看你的链接。如果可能,请在平均类型中回答我的更新 1
    • 应该的。看看这篇文章:hortonworks.com/blog/…
    • 我理解了我大部分问题的答案。我对q3有点困惑。我用STORED AS TEXTFILE LOCATION '/data/cleanlog;' Therefore file 0000_0 which resides in that folder is the tabel cleanlog, right? Also when i type describe 格式的cleanlog 创建了cleanlog 表;` 我得到Location: wasb://azure@azure.blob.core.windows.net/data/cleanlog
    • 这意味着 HDFS 可比存储中的 /data = wasb://azure@azure.blob.core.windows.net/data/。 azure 博客存储服务器格式将采用以下格式:wasb[s]://@.blob.core.windows.net/
    【解决方案2】:

    您使用了LOAD 命令,该命令将文件从其原始位置移动到原始日志表的文件夹(默认为/hive/warehouse/rawlog)。

    【讨论】:

    • 是否有任何简单的方法可以使用安全外壳访问该文件夹?其他问题也可以回答吗?
    猜你喜欢
    • 1970-01-01
    • 2014-05-24
    • 2020-08-26
    • 1970-01-01
    • 1970-01-01
    • 2014-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多