热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

说明:该文章所有内容截选自实验楼教程【Hadoop分布式文件系统—导入和导出数据】~一、实验介绍在一个经典的数据架构中,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 分布式文件系统 -- 导入和导出数据》 此处输入图片的描述

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

《Hadoop 分布式文件系统 -- 导入和导出数据》 此处输入图片的描述

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

《Hadoop 分布式文件系统 -- 导入和导出数据》 此处输入图片的描述

这些按照功能进行命名的命令的名称与 Unix shell 命令非常相似。使用 help 选项可以获得某个具体命令的详细说明。

hadoop fs –help ls

《Hadoop 分布式文件系统 -- 导入和导出数据》 此处输入图片的描述

这些 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

《Hadoop 分布式文件系统 -- 导入和导出数据》 此处输入图片的描述

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

hadoop fs -mkdir -p /data/weblogs

《Hadoop 分布式文件系统 -- 导入和导出数据》 此处输入图片的描述

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

hadoop fs -copyFromLocal weblog_entries.txt /data/weblogs

《Hadoop 分布式文件系统 -- 导入和导出数据》 此处输入图片的描述

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

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

《Hadoop 分布式文件系统 -- 导入和导出数据》 此处输入图片的描述

工作原理:

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

《Hadoop 分布式文件系统 -- 导入和导出数据》 此处输入图片的描述

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

《Hadoop 分布式文件系统 -- 导入和导出数据》 此处输入图片的描述

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 ,保存退出

《Hadoop 分布式文件系统 -- 导入和导出数据》 此处输入图片的描述

刷新文件使配置生效。

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

《Hadoop 分布式文件系统 -- 导入和导出数据》 此处输入图片的描述

Pig 脚本可以通过下面的命令行来执行:

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

《Hadoop 分布式文件系统 -- 导入和导出数据》 此处输入图片的描述

您可能会遇到如下错误

《Hadoop 分布式文件系统 -- 导入和导出数据》 此处输入图片的描述

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

《Hadoop 分布式文件系统 -- 导入和导出数据》 此处输入图片的描述

《Hadoop 分布式文件系统 -- 导入和导出数据》 此处输入图片的描述

该脚本逐行读取 HDFS 上的 weblog_entries.txt 文件,并且按照 md5 的值进行分组。parallel 是 Pig 脚本用来设置 reduce 个数的方法。由于启动了4个 reduce 任务,所以会在输出的目录 /data/weblogs/weblogs_md5_groups.bcp 中生成4个文件。

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

《Hadoop 分布式文件系统 -- 导入和导出数据》 此处输入图片的描述

/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

《Hadoop 分布式文件系统 -- 导入和导出数据》 此处输入图片的描述

该教程接下来还有:

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

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

三、实验总结

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

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


推荐阅读
  • 本文介绍了在sqoop1.4.*版本中,如何实现自定义分隔符的方法及步骤。通过修改sqoop生成的java文件,并重新编译,可以满足实际开发中对分隔符的需求。具体步骤包括修改java文件中的一行代码,重新编译所需的hadoop包等。详细步骤和编译方法在本文中都有详细说明。 ... [详细]
  • 前言折腾了一段时间hadoop的部署管理,写下此系列博客记录一下。为了避免各位做部署这种重复性的劳动,我已经把部署的步骤写成脚本,各位只需要按着本文把脚本执行完,整个环境基本就部署 ... [详细]
  • Azkaban(三)Azkaban的使用
    界面介绍首页有四个菜单projects:最重要的部分,创建一个工程,所有flows将在工程中运行。scheduling:显示定时任务executing:显示当前运行的任务histo ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 解决Sharepoint 2013运行状况分析出现的“一个或多个服务器未响应”问题的方法
    本文介绍了解决Sharepoint 2013运行状况分析中出现的“一个或多个服务器未响应”问题的方法。对于有高要求的客户来说,系统检测问题的存在是不可接受的。文章详细描述了解决该问题的步骤,包括删除服务器、处理分布式缓存留下的记录以及使用代码等方法。同时还提供了相关关键词和错误提示信息,以帮助读者更好地理解和解决该问题。 ... [详细]
  • Apache Shiro 身份验证绕过漏洞 (CVE202011989) 详细解析及防范措施
    本文详细解析了Apache Shiro 身份验证绕过漏洞 (CVE202011989) 的原理和影响,并提供了相应的防范措施。Apache Shiro 是一个强大且易用的Java安全框架,常用于执行身份验证、授权、密码和会话管理。在Apache Shiro 1.5.3之前的版本中,与Spring控制器一起使用时,存在特制请求可能导致身份验证绕过的漏洞。本文还介绍了该漏洞的具体细节,并给出了防范该漏洞的建议措施。 ... [详细]
  • 渗透测试基础bypass绕过阻挡我们的WAF(下)
    渗透测试基础-bypass ... [详细]
  • MapReduce工作流程最详细解释
    MapReduce是我们再进行离线大数据处理的时候经常要使用的计算模型,MapReduce的计算过程被封装的很好,我们只用使用Map和Reduce函数,所以对其整体的计算过程不是太 ... [详细]
  • MapReduce 切片机制源码分析
     总体来说大概有以下2个大的步骤1.连接集群(yarnrunner或者是localjobrunner)2.submitter.submitJobInternal()在该方法中会创建 ... [详细]
  • 目前正在做毕业设计,一个关于校园服务的app,我会抽取已完成的相关代码写到文章里。一是为了造福这个曾经帮助过我的社区,二是写文章的同时更能巩固相关知识的记忆。一、前言在爬取教务系统 ... [详细]
  • Zookeeper为分布式环境提供灵活的协调基础架构。ZooKeeper框架支持许多当今最好的工业应用程序。我们将在本章中讨论ZooKeeper的一些最显着的应用。雅虎ZooKee ... [详细]
  • 开发笔记:大数据之Hadoop(MapReduce):GroupingComparator分组案例实操
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了大数据之Hadoop(MapReduce):GroupingComparator分组案例实操相关的知识,希望对你有一定的参考价值。 ... [详细]
  • Hadoop之Yarn
    目录1Hadoop1.x和Hadoop2.x架构区别2Yarn概述3Yarn基本架构4Yarn工作机制5作业提交全过程6资源调度器7任务的推测执行1Hadoop1.x和Hadoo ... [详细]
  • Hadoop——Hive简介和环境配置
    一、Hive的简介和配置1.简介Hive是构建在Hadoop之上的数据操作平台lHive是一个SQL解析引擎,它将SQL转译成MapReduce作业,并 ... [详细]
  • 当计算任务越来越多,作业提交越来越多,企业普通的做法是,在原有的系统架构上,不停地往上堆积硬件或者加服务器。的确,hadoop设计上的优秀和可扩展性可以方便的 ... [详细]
author-avatar
欢不是欢7
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有