我需要在Hive中创建一些表,为此我想在hdfs中插入数据,以便自动创建一个hive表。
我考虑这个例子:
我需要存储在Hive中的这些信息。你能告诉我一个如何在HDFS中插入数据的例子吗?
答案 0 :(得分:1)
将数据上传到HDFS时,不会自动创建Hive表。这是您必须手动或通过应用程序以编程方式执行的操作。创建(外部)Hive表的命令基本上是:
hive> create external table <table_name> (param_1_name param_1_type, ...) row format delimited fields terminated by ',' location '/user/<your_hdfs_user>/path/to/the/data/directory/';
以上是针对CSV格式的结构化数据。如果数据是用JSON编写的,那么您将需要使用serde。
据说,一旦创建了Hive表,向表中添加新数据的一种非常简单的方法就是直接将这样的数据上传到HDFS。这可以通过WebHDFS完成。例如,如果要将文件添加到Hive表指向的HDFS文件夹(使用curl
作为Http cient):
$ curl -i -X PUT "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=CREATE
[&overwrite=<true |false>][&blocksize=<LONG>][&replication=<SHORT>]
[&permission=<OCTAL>][&buffersize=<INT>]"
您将收到必须遵循的重定向:
HTTP/1.1 307 TEMPORARY_REDIRECT
Location: http://<DATANODE>:<PORT>/webhdfs/v1/<PATH>?op=CREATE...
Content-Length: 0
因此,在重定向URL上执行PUT:
curl -i -X PUT -T <LOCAL_FILE> "http://<DATANODE>:<PORT>/webhdfs/v1/<PATH>?op=CREATE..."
(顺便说一句,如果您使用curl
选项,-L
可以自动遵循重定向。
创建文件后,您可以使用POST方法(如文档中所述op=append
)将新数据附加到已存在的文件中。
HTH