Hadoop 分布式文件系统 — 导入和导出数据

讲明:该著作所有内容截选自实验楼教程【Hadoop 分布式文件系统 —
导入和导出数据】
~

一、实验介绍

在一个经文的数目架构中,Hadoop
是处理千头万绪数据流的着力。数据往往是从许多粗放的体系中采集而来,并导入
Hadoop 分布式文件系统(HDFS)中,然后通过 MapReduce 或者另外依据MapReduce 封装的言语(如Hive、Pig 和 Cascading
等)举办拍卖,最终将这多少个已经过滤、转换和聚集过的结果导出到一个或五个外表系统中。

举个相比现实的例子,一个大型网站可能会做一些有关网站点击率的基础数据解析。从六个服务器中募集页面访问日志,并将其推送到
HDFS 中。启动一个 MapReduce 作业,并将这一个数量作为 MapReduce
的输入,接下去数据将被分析、汇总以及与 IP 地址举行关联统计,最终得出
URL、页面访问量和各类 cookie
的地理地方数据。生成的连锁结果可以导入关系型数据库中。即席查询(Ad-hoc
query)此时就可以构建在这一个多少上了。分析师可以急速地扭转各种报表数量,例如,当前的单身用户数、用户访问最多的页面、按地区对用户展开拆分及其他的数据汇总。

本节的紧要将关注 HDFS
数据的导入与导出,重要内容涵盖与本土文件系统、关周全据库、NoSQL
数据库、分布式数据库以及另外 Hadoop 集群之间数据的互相导入和导出。

1.1 实验知识点

  • 利用 Hadoop shell 命令导入和导出数据到 HDFS
  • Pig 脚本来演示下 getmerge 命令的功用
  • 动用 distcp 实现集群间数据复制
  • 使用 Sqoop 从 MySQL 数据库导入数据到 HDFS
  • 应用 Sqoop 从 HDFS 导出多少到 MySQL

1.2 实验环境

  • Hadoop-2.6.1
  • Sqoop-1.4.5
  • mysql
  • Xfce终端

1.3 适合人群

本学科难度为中等,适合具大数据基础的用户,要是对数码存储
模块有询问会更快的左手。

二、实验部分

注意:实验楼环境里已经下载并安装 hadoop,及配置了环境变量,您只需要做以下步骤。

su hadoop
#hadoop 密码是 hadoop
hadoop namenode -format 
#格式化后会最下面出现下面提示才表征格式化成功
#17/05/18 08:47:25 INFO common.Storage: Storage directory #/home/hadoop/tmp/dfs/na
#me has been successfully formatted.....

此间输入图片的叙述

#启动 hadoop,并用 jps 检查是否启动进程
start-all.sh
jps

这里输入图片的讲述

2.1 使用 Hadoop shell 命令导入和导出数据到 HDFS

HDFS 提供了许多 shell 命令来落实访问文件系统的意义,这个命令都是构建在
HDFS FileSystem API 之上的。Hadoop 自带的 shell
脚本是因而命令行来举办所有操作的。那么些剧本的称呼叫作
hadoop,经常设置在$HADOOP_BIN目录下,其中$HADOOP_BIN是 hadoop/bin
文件完整的设置目录,同时有必要将 $HADOOP_BIN 配置到 $PATH
环境变量中,这样有着的吩咐都足以由此 hadoop fs -command
这样的款型来实施。

一经需要取得文件系统的具有命令,可以运作 hadoop 命令传递不带参数的选项
fs。

hadoop fs 

这里输入图片的讲述

这一个依据职能举行命名的命令的称号与 Unix shell 命令卓殊相似。使用 help
选项可以博得某个具体命令的事无巨细表明。

hadoop fs –help ls

此地输入图片的叙说

那一个 shell 命令和其简要的参数描述可在法定在线文档
http://hadoop.apache.org/docs/r2.6.1/hadoop-project-dist/hadoop-common/FileSystemShell.html
中举行查看。

在这一节中,我们将使用 Hadoop shell 命令将数据导入HDFS 中,以及将数据从
HDFS
中导出。这个命令更多地用于加载数据,下载处理过的数额,管理文件系统,以及预览相关数据。领会这么些命令是高速利用
HDFS 的前提。

操作步骤:

你需要在实验楼网站上下载数据集
weblog_entries.txt

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

此地输入图片的叙说

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

此地输入图片的叙述

干活原理:

Hadoop shell 非常轻量地封装在 HDFS FileSystem API 之上。在进行 hadoop
命令时,假如传进去的参数是 fs,实际上执行的是
org.apache.hadoop.fs.FsShell
那些类。在0.20.2版本中FsShell实例化了一个org.apache.hadoop.fs.FileSystem
对象,并且将命令行参数与类方法映射起来。比如,执行hadoop fs –mkdir /data/weblogs
约等于调用FileSystem.mkdirs(new Path("/data/weblogs"))。同样,运行hadoop fs –copyFromLocal weblog_entries.txt /data/weblogs相当于在调用FileSystem.copyFromLocal(newPath("weblog_entries.txt"), new Path("/data/weblogs"))。HDFS数据复制到本地系统的实现形式也是同样,等同于调用
FileSystem.copyToLocal(newPath("/data/weblogs/ weblog_entries.txt"), new Path("./weblog_entries.txt"))

更多关于文件系统的接口音讯描述可以见官方文档:官方文档

mkdir 可以透过 hadoop fs -mkdir PATH1 PATH2
的花样来执行。例如,hadoop fs –mkdir /data/weblogs/20160511 /data/weblogs/20160501
将会在 HDFS 系统上各自创制多少个公文夹
/data/weblogs/20160511 和 /data/weblogs/20160501。假如文件夹创造成功则重返0,否则再次回到-1。

hadoop fs -mkdir /data/weblogs/20160511 /data/weblogs/20160501
hadoop fs -ls /data/weblogs

此间输入图片的描述

copyFromLocal 可以经过 hadoop fs –copyFromLocal LOCALFILEPATH URI
的情势来推行,假设 URI
的地方(指的是HDFS://filesystemName:9000本条串)没有了然给出,则默认会读取core-site.xml
中的 fs.default.name 这些特性。上传成功再次回到0,否则再次来到-1。

copyToLocal 命令可以通过
hadoop fs –copyToLocal [-ignorecrc] [-crc] URILOCAL_FILE_PATH的样式来举行。如果URI 的地点没有了然的交付,则默认会读取 core-site.xml 中的
fs.default.name 这多少个特性。copyToLocal 会执行CRC(Cyclic Redundancy
Check)校验保证已复制的数量的正确,一个难倒的副本复制可以经过 参数
–ignorecrc 来强制执行,还足以因而 -crc 参数在复制文件的还要也复制
crc 校验文件。

上文介绍的getcopyToLocal只得对文本举办复制,不可能对所有文件夹举行复制。当然
Hadoop 提供了getmerge
命令,能够将文件系统中的四个文件合并成一个独自的文本下载到本地文件系统。

2.2 Pig 脚本来演示下 getmerge 命令的效能

接下去我们将因而 Pig 脚本来演示下 getmerge 命令的遵守。
1.下载 Pig 并解压:

cd /opt
#网络可能慢点,需要耐心等待
sudo wget http://mirrors.aliyun.com/apache/pig/pig-0.15.0/pig-0.15.0.tar.gz 
sudo tar xvf  pig-0.15.0.tar.gz 

此地输入图片的讲述

2.布局 pig 环境变量:

sudo vi ~/.bashrc
#下拉到最底部,添加pig路径,注意您打开的.bashrc里面hadoop变量已经添加,此处只需补充pig环境变量即可
export PIG_HOME=/opt/pig-0.15.0
export PIG_CLASSPATH=/opt/hadoop-2.6.1/conf
export HADOOP_HOME=/opt/hadoop-2.6.1

export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/hadoop-2.6.1/bin:/opt/hadoop-2.6.1/sbin:/opt/pig-0.15.0/bin

#输入:wq ,保存退出

这里输入图片的叙说

刷新文件使配置生效。

source  ~/.bashrc

3.Pig 演示 getmerge 命令的功能

reduce 输出的数额存储在 HDFS
中,可以由此文件夹的称呼来引用。若文件夹作为一个作业的输入,那么该公文夹下的具备文件都会被拍卖。上文介绍的
getcopyToLocal
只好对文本举行复制,无法对所有文件夹举办复制。当然 Hadoop 提供了
getmerge
命令,能够将文件系统中的多少个文本合并成一个单身的文本下载到本地文件系统。
下面 Pig 脚本来演示下getmerge 命令的效能:

weblogs_md5_group_pig.sh 脚本如下:

weblogs = load '/data/weblogs/weblog_entries.txt' as
                (md5:chararray,
                  url:chararray,
                  date:chararray,
                  time:chararray,
                  ip:chararray);

md5_grp = group weblogs by md5 parallel 4;

store md5_grp into '/data/weblogs/weblogs_md5_groups.bcp';

#新建 weblogs_md5_group_pig.sh 脚本
sudo vi weblogs_md5_group_pig.sh
sudo chmod 777 -R weblogs_md5_group_pig.sh
more weblogs_md5_group_pig.sh

这里输入图片的讲述

Pig 脚本可以因而下边的命令行来施行:

cd /opt/pig-0.15.0/bin
#脚本执行时间可能过长,请耐心等待
./pig -f /home/shiyanlou/weblogs_md5_group_pig.sh

此处输入图片的叙说

您可能会遇到如下错误

这里输入图片的描述

解决办法:继续等待输出,不用任何操作,下图为部分截图。

此地输入图片的叙述

此间输入图片的叙说

该脚本逐行读取 HDFS 上的 weblog_entries.txt 文件,并且按照 md5
的值举行分组。parallel 是 Pig 脚本用来安装 reduce
个数的办法。由于起步了4个 reduce 任务,所以会在出口的目录
/data/weblogs/weblogs_md5_groups.bcp 中生成4个文件。

注意,weblogs_md5_groups.bcp 实际上是一个文件夹,显示该文件夹的列表信息可以看到:

此间输入图片的描述

/data/weblogs/weblogs_md5_groups.bcp 中包含4个文件,即
part-r-00000part-r-00001part-r-00002part-r-00003

getmerge
命令可以用来将4个文件合并成一个文书,并且复制到本地的文件系统中,操作完大家可以看出地面文件列表,具体命令如下:

sudo chmod 777 -R /home/shiyanlou/
hadoop fs -getmerge /data/weblogs/weblogs_md5_groups.bcp weblogs_md5_groups.bcp
ll weblogs_md5_groups.bcp

这里输入图片的描述

该学科接下去还有:

  • 2.3 使用 distcp 实现集群间数据复制
  • 2.4 使用 Sqoop 从 MySQL 数据库导入数据到 HDFS
  • 2.5 使用 Sqoop 从 HDFS 导出多少到 MySQL

由于篇幅有限就不全体放出去了,想要查看完整教程的,点击【Hadoop
分布式文件系统 —
导入和导出数据】
即可及时查看了~

三、实验总结

本章紧要目标是出现说法 Hadoop shell 命令导入和导出数据到 HDFS,使用 distcp
实现集群间数据复制,Sqoop 在 MySQL 与 HDFS 之间互相导入数据,以及 Pig
脚本测试 getmerge 效能。

点击【Hadoop 分布式文件系统 —
导入和导出数据】
即可及时查看完整教程了~

网站地图xml地图