将数据从远程机器加载到Hive数据库

问题描述:

我有一个存储在远程机器上的CSV文件。我需要将这些数据加载到安装在不同机器上的Hive数据库中。有没有办法做到这一点?将数据从远程机器加载到Hive数据库

注意:我正在使用Hive 0.12。

由于Hive基本上将模式应用于驻留在HDFS中的数据,因此您需要在HDFS中创建一个位置,将数据移动到那里,然后创建一个指向该位置的Hive表。如果您使用的是商业版本,Hue(Hadoop用户环境网络用户界面)可能会有这种情况。

下面是命令行的示例。

创建本地计算机上的CSV文件:

$ vi famous_dictators.csv 

...这是文件的样子:

$ cat famous_dictators.csv 
1,Mao Zedong,63000000 
2,Jozef Stalin,23000000 
3,Adolf Hitler,17000000 
4,Leopold II of Belgium,8000000 
5,Hideki Tojo,5000000 
6,Ismail Enver Pasha,2500000 
7,Pol Pot,1700000 
8,Kim Il Sung,1600000 
9,Mengistu Haile Mariam,950000 
10,Yakubu Gowon,1100000 

然后scp csv文件到群集节点:

$ scp famous_dictators.csv hadoop01:/tmp/ 

ssh进入节点:

$ ssh hadoop01 

创建HDFS文件夹:

[[email protected] ~]$ hdfs dfs -mkdir /tmp/famous_dictators/ 

复制从本地文件系统到HDFS文件夹中的CSV文件:

[[email protected] ~]$ hdfs dfs -copyFromLocal /tmp/famous_dictators.csv /tmp/famous_dictators/ 

请登录蜂巢并创建表:

[[email protected] ~]$ hive 

hive> CREATE TABLE `famous_dictators`(
    > `rank` int, 
    > `name` string, 
    > `deaths` int) 
    > ROW FORMAT DELIMITED 
    > FIELDS TERMINATED BY ',' 
    > LINES TERMINATED BY '\n' 
    > LOCATION 
    > 'hdfs:///tmp/famous_dictators'; 

您现在应该能够在Hive中查询您的数据:

hive> select * from famous_dictators; 
OK 
1 Mao Zedong 63000000 
2 Jozef Stalin 23000000 
3 Adolf Hitler 17000000 
4 Leopold II of Belgium 8000000 
5 Hideki Tojo 5000000 
6 Ismail Enver Pasha 2500000 
7 Pol Pot 1700000 
8 Kim Il Sung 1600000 
9 Mengistu Haile Mariam 950000 
10 Yakubu Gowon 1100000 
Time taken: 0.789 seconds, Fetched: 10 row(s) 
+0

谢谢亚历克斯,其工作... – sam 2014-10-21 04:52:22

+0

我很高兴听到,山姆。做得好! – 2014-10-21 04:56:27