Hadoop的HDFS 入门使用

13-07-30 banq
    

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] 
<p>

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

    

banq
2013-07-30 08:59

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之间的数据互相导入,具体命令可见原文。