CentOS7下hadoop开发 - hdfs文件导入与导出

文件准备

centOS下安装wget命令

yum -y install wget

wget http://labfile.oss.aliyuncs.com/courses/832/weblog_entries.txt

hdfs和本地文件相互复制(hadoop shell命令)

1、 在 HDFS 中创建一个新文件夹,用于保存 weblog_entries.txt 文件:

hadoop fs -mkdir -p /data/weblogs

2、 将 weblog_entries.txt 文件从本地文件系统复制到 HDFS 刚创建的新文件夹下:

hadoop fs -copyFromLocal weblog_entries.txt /data/weblogs

3、 列出 HDFS 上 weblog_entries.txt 文件的信息:

hadoop fs -ls /data/weblogs/weblog_entries.txt

注意: copyFromLocalcopyToLocal只能复制文件到hdfs(hdfs复制到本地),getmerge则可以把hdfs中文件夹下所有文件合并成一个,复制到本地环境

使用 distcp 实现集群间数据复制

准备

  1. 保证复制源和复制目的地能够互相访问

  2. 关闭复制源集群 map 任务的推测机制,可以在配置文件 mapred-site.xml 中将 mapred.map.tasks.speculative.execution 的值设置为 false 来实现,这样就可以避免在 map 任务失败的时候产生任何不可知的行为

  3. 两个集群之间安装的 Hadoop 版本必须一致

集群间复制文件

1.将集群A的 weblogs 文件夹复制到集群B上:

hadoop distcp hdfs://namenodeA/data/weblogs hdfs://namenodeB/data/weblogs

2.将集群A的 weblogs 文件夹复制到集群B并覆盖已存在文件:

hadoop distcp –overwrite hdfs://namenodeA/data/weblogs hdfs://namenodeB/ data/weblogs

3.同步集群A和集群B之间的 weblogs 文件夹:

hadoop distcp –update hdfs://namenodeA/data/weblogs hdfs://namenodeB/data/ weblogs

distcp工作原理

在原集群,文件夹中的内容将被复制为一个临时的大文件。将会启动一个只有map(map-only)的 MapReduce 作业来实现两个集群间的数据复制。默认情况下,每个 map 就将会分配到一个256 MB 的数据块文件。举个例子,如果 weblogs 文件夹总大小为10 GB,默认将会启动40个 map,每个 map 会复制大约256 MB的数据。distcp 复制也可以通过参数手动设置启动的 map 数量。

hadoop distcp –m 10 hdfs://namenodeA/data/weblogs hdfs://namenodeB/data/ weblogs 在上面这个例子中,将会启动10个 map 进行数据复制。如果weblogs文件夹的总大小是10 GB,那么每个 map 会复制大约1 GB的数据。 如果要在运行的 Hadoop 版本不一样的两个集群之间进行数据复制,一般建议在复制源集群使用 HftpFileSystem。HftpFileSystem 是一个只读的文件系统。相应的 distcp 命令只能在目标服务器上运行:

hadoop distcp hftp://namenodeA:port/data/weblogs hdfs://namenodeB/data/ weblogs 在上面这条命令中,port的值要与配置文件hdfs-site.xml中dfs.http.address属性的端口值一致。

Sqoop 从 MySQL 数据库导入数据到 HDFS

准备:

安装配置Sqoop 与Mysql 驱动

下载并安装 Sqoop,及配置了环境变量 下载 Mysql 驱动,并 将 MySQL JDBC 驱动包复制到 $SQOOP_HOME/lib 目录下

注意:sqoop版本是后面带Hadoop的,不然运行时 会提示找不到Sqoop主类

列出 MySql 中所有数据库

./sqoop list-databases --connect jdbc:mysql://localhost:3306/ --username root --password 123456

把hive数据库version表数据导入到 HDFS 中

进入SQOOP_HOME目录

./bin/sqoop import --connect jdbc:mysql://localhost:3306/hive --username root -P --table version --target-dir /data/weblogs/import --delete-target-dir --class-name version --bindir ./bin

查看hdfs导入的数据

默认情况下,导入的数据将按主键进行分割。如果导入的表并不包含主键,必须指定 -m或者--split-by参数决定导入的数据如何分割。在前面的例子中,使用了-m参数。-m参数决定了将会启动多少个 mapper 来执行数据导入。因为将-m设置为1,所以就启动了一个 mapper 用于导入数据。每个 mapper 将产生一个独立的文件。

Sqoop 从 HDFS 导出数据到 MySQL

./bin/sqoop export --connect jdbc:mysql://172.18.0.104:3306/irdms_test  --username irdms --password irdms --table weblogs_from_hdfs --export-dir '/data/weblogs/weblog_entries.txt'  --input-fields-terminated-by  '\t'   --bindir ./bin/  -m 1 

参考资料

http://hadoop.apache.org/docs/r2.6.1/hadoop-project-dist/hadoop-common/FileSystemShell.html#copyFromLocal

http://sqoop.apache.org/docs/1.4.7/SqoopUserGuide.html#_large_objects

转载于:https://my.oschina.net/odetteisgorgeous/blog/3082095

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值