将数据从远程机器加载到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)
谢谢亚历克斯,其工作... – sam 2014-10-21 04:52:22
我很高兴听到,山姆。做得好! – 2014-10-21 04:56:27