Hadoop的HDFS 入门使用

HDFS for the Batch Layer | Architects Zone一文详细介绍了Hadoop的两个组成部分之一HDFS。

当我们上传一个文件到HDFS,将自动分块到各个数据节点上。对于初学者,文章建议下载Cloudera, Hortonworks, 和 MapR 的Hadoop虚拟机,节省配置时间。

上传文件大概步骤:
$ hadoop fs -mkdir /logins
$ hadoop fs -put logins-2012-10-25.txt /logins

这是将logins-2012-10-25.txt 日志文件上传到logins目录。查询可见:
$ hadoop fs -ls -R /logins
-rw-r--r-- 3 hdfs hadoop 175802352 2012-10-26 01:38
/logins/logins-2012-10-25.txt

能够如Linux的shell命令一下查看文件内容:
$ hadoop fs -cat /logins/logins-2012-10-25.txt
alex 192.168.12.125 Thu Oct 25 22:33 - 22:46 (00:12)
bob 192.168.8.251 Thu Oct 25 21:04 - 21:28 (00:24)
...

为了查看上传的日志文件分块到哪些服务器数据节点上,用如下命令:


$ hadoop fsck /logins/logins-2012-10-25.txt -files -blocks -locations
/logins/logins-2012-10-25.txt 175802352 bytes, 2 block(s): A
OK
0. blk_-1821909382043065392_1523 len=134217728 B
repl=3 [10.100.0.249:50010, 10.100.1.4:50010, 10.100.0.252:50010]
1. blk_2733341693279525583_1524 len=41584624
repl=3 [10.100.0.255:50010, 10.100.1.2:50010, 10.100.1.5:50010]

这个文件被存成两块,其对应的IP地址和端口。


Sqoop: Big data conduit between NoSQL and RDBMS

Sqoop 是Apache的开源项目,能够将数据库数据导入到Hadoop的HDFS中:

bin/sqoop import --connect jdbc:mysql://localhost:3306/hadoop
--driver com.mysql.jdbc.Driver --username root --password root --table bse30

这是一个将MySQL数据库hadoop的数据表bse30导入到HDFS的案例,需要将MYSQL的JDBC驱动放入$SQOOP_HOME/lib 目录下。

下面命令正好相反,是将HDFS的数据导入到MySQL数据库中:
bin/sqoop export --connect jdbc:mysql://localhost:3306/hadoop
--driver com.mysql.jdbc.Driver --username root --password root --table bse30
--export-dir /user/surajit/bse30

也可以将数据库数据导入到Hive中,实际就是执行Hive的create table命令,如下:
bin/sqoop create-hive-table --connect jdbc:mysql://localhost:3306/hadoop
--driver com.mysql.jdbc.Driver --username root --P --table bse30

相反,从Hive中导出到MySQL:
bin/sqoop export --connect jdbc:mysql://localhost:3306/hadoop
--driver com.mysql.jdbc.Driver --username root --password root --table bse30
--export-dir /user/hive/warehouse/bse30

sqoop也可以实现MySQL等传统数据库和HBase之间的数据互相导入,具体命令可见原文。