新普金娱乐网址


假如您吗想去锡兰地理

她于木泽

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

  • 十二月 19, 2018
  • 地理
  • 没有评论

另公司应用程序都亟需处理时问题。应用程序需要精晓当前之时间点和生一个时间点,有时它们还非得总结这半单时间点之间的路径。使用
JDK 完成这项任务将颇痛苦和麻烦。现在来瞧 Joda 提姆(Tim)e,一个面向 Java™
平台的好使的开源时间/日期库。正而你当本文中打探之那么,Joda-提姆(Tim)e
轻松解决了拍卖日期及岁月的痛与麻烦。

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

 

一如既往、实验介绍

当一个经典的数架构中,Hadoop
是拍卖复杂数据流的中央。数据往往是打众多疏散的系统被搜集而来,并导入
Hadoop 分布式文件系统(HDFS)中,然后通过 MapReduce 或者其他依照MapReduce 封装的语言(如Hive、Pig 和 Cascading
等)举办处理,最终以这个曾经过滤、转换和集合了之结果导出到一个或者多独外表系统被。

举个比现实的例证,一个特大型网站可能会师做有关于网站点击率的底蕴数据解析。从六只服务器被收集页面访问日志,并将其推送至
HDFS 中。启动一个 MapReduce 作业,并拿这么些多少作为 MapReduce
的输入,接下数据将于解析、汇总和与 IP 地址举办关联总结,最后得出
URL、页面访问量和每个 cookie
的地理地点数据。生成的有关结果好导入关系项目数据库中。即席查询(Ad-hoc
query)此时即令足以构建以这多少个多少及了。分析师可以急忙地扭转各种报表数量,例如,当前的独自用户数、用户访问太多之页面、按地区针对用户举行拆分和任何的数码汇总。

本节之根本用关爱 HDFS
数据的导入与导出,重要内容包含与当地文件系统、关系数据库、NoSQL
数据库、分布式数据库与此外 Hadoop 集群中数据的互导入和导出。

于编写集团应用程序时,我时用处理日期。并且在我之摩登项目面临 —
保险行业 —
纠正日期总括尤其首要。使用 java.util.Calendar 让自家小不安。假如你为都下此类似处理过日期/时间价值,那么您便通晓它使用起来有差不多累。因此当自家沾到
Joda-提姆(Tim)e — 面向 Java 应用程序的日期/时间库底替代采取 —
我决定钻探一下。其结果是:我深庆幸我如此做了。

1.1 实验知识点

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

Joda-提姆e 令时间和日期值变得易管理、操作与透亮。事实上,易于使是
Joda
的基本点设计目的。其他目的包括但扩展性、完整的特性集与对强日历系统的支撑。并且
Joda 与 JDK 是整而交互操作的,由此你无需替换所有 Java
代码,只待替换执行日期/时间总括的那么有代码。

1.2 实验环境

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

 

1.3 适合人群

服从学科难度也中,适合所有特别数目基础的用户,倘诺对数码存储
模块出精通会再也快的左。

Joda 实际上是包含众多用于 Java 语言的替代 API
的大型项目,因而从技术上讲,使用 Joda 和 Joda-提姆(Tim)e
名称表示同样之意是同种植误称。但在撰写本文之际,Joda-提姆(Tim)e API
近日像是唯一处于活跃开发状态下之 Joda API。考虑到 Joda
大型项目标此时此刻状态,我眷恋拿 Joda-提姆(Tim)e 简称也 Joda 应该没什么问题。

第二、实验部分

注意:实验楼环境里已经下载并安装 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

此地输入图片的叙述

何以而采用 Joda?考虑创立一个于是时间表示的某随意的随时 — 比如,2000
年 1 月 1 日 0 时 0 分。我如何创设一个就此时代表是眨眼之间间之 JDK
对象?使用 java.util.Date?事实上这是杯水车薪的,因为自 JDK 1.1
之后的每个 Java 版本的 Javadoc
都宣称应当以 java.util.CalendarDate 中不赞成采用的构造函数的数严重限制了而创设此类对象的门径。

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

hadoop fs -mkdir  -p /data/weblogs

这边输入图片的叙述

然而,Date 确实有一个构造函数,您能够用来成立用时代表有眨眼之间间之靶子(除
“现在” 以外)。该方法应用离 1970 年 1 月 1
日牛时格林(格林(Green))威治标准时间(也号称 epoch)以来的皮秒数作为一个参数,对时区举行校正。考虑到
Y2K 对软件开发公司之要害,您可能会面当自己已经记住了这值 —
可是我从没。Date 也只是这样。

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
命令,可以拿文件系统中之差不五个公文合并成为一个独的文书下充斥至当地文件系统。

那么 Calendar 又怎也?我轰下下的章程创建必需的实例:

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
分布式文件系统 —
导入和导出数据】
即可及时查看了~

Calendar calendar = Calendar.getInstance();
calendar.set(2000, Calendar.JANUARY, 1, 0, 0, 0);

老三、实验总结

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

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

 

动 Joda,代码应该接近如下所示:

DateTime dateTime = new DateTime(2000, 1, 1, 0, 0, 0, 0);

Joda 使用以下概念,它们可以用至其余日期/时间库:

  • 不可变性(Immutability)
  • 瞬间性(Instant)
  • 局部性(Partial)
  • 年表(Chronology)
  • 时区(Time zone)

我拿对 Joda 依次研讨每一个概念。

不可变性

本人于本文钻探的 Joda
类具有不可变性,由此其的实例不能给涂改。(不可变类的一个优点就是是它是线程安全之)。我用于你显示的用于拍卖日期总括的
API 方法漫天返一个遥相呼应 Joda
类的新实例,同时保持原来实例不变换。当您通过一个 API 方法操作 Joda
类时,您得捕捉该办法的归值,因为你在处理的实例不克叫改动。您可能对这种模式特别熟知;比如,这多亏 java.lang.String 的各个操作方法的办事法。

瞬间性

Instant 表示时间及的某个精确的时刻,使用自 epoch
最先盘算的阿秒表示。这同一定义及 JDK 相同,这就是怎其他
Joda Instant 子类都可同 JDK Date 和 Calendar 类兼容的来由。

重新通用一点底定义是:一个瞬间 就是凭借日线达唯有出现相同欠好都唯一的一个时间点,并且这种日子结构只可以坐同样栽起意义之方法面世同样次等。

局部性

一个局部时间,正如我用于本文中以其名叫局部时间有些一样,它凭借的是时的如出一辙部分有。弹指间性指定了同
epoch
相对的岁月达的一个准确时刻,与此相反,局部时间部分指的是以时刻及可来回
“移动” 的一个整日,这样它们便可行使被多独实例。比如,6 月 2
 可以使被自由一年的 6 月份(使用 Gregorian
日历)的老二天之妄动刹那间。同样,11:06
p.m.
 可以接纳被自由一年的任性一天,并且每一日只好接纳相同浅。尽管其从不点名一个年华及之标准时刻,局部时间有如故是行之有效之。

自己喜欢用有些时间有些看作一个又周期被的一些,这样的话,假使我正在考虑的日子构建可以因同等种有义之法面世反复(即再的),那么其就是是一个片段时间。

年表

Joda 本质 — 以及其设计中央 —
的首要就是是年表(它的义由一个同名抽象类捕捉)。从根本上讲,年表是平等栽日历系统
— 一种植总括时之特有措施 — 并且是一模一样种在里面实施日历算法的框架。受 Joda
补助的年表的事例包括:

  • ISO(默认)
  • Coptic
  • Julian
  • Islamic

Joda-Time 1.6 帮忙 8 种植年表,每一样种植都好当作特定日历系统的精打细算引擎。

时区

时区是价值一个对峙于英帝国格林威治之地理地方,用于统计时。要通晓事件暴发的可靠时间,还非得精通有是事件之职位。任何严酷的光阴统计都得涉及时区(或相对于
GMT),除非在与一个时区内出了针锋相对日测算(即日常这样时区也深关键,假诺事件于在另一个时区的处处存在利益关联的语句)。

DateTimeZone 是 Joda
库用于封装地方概念的近乎。许多日子以及岁月统计都足以在无关乎时区的情状下得,可是还需要领会 DateTimeZone 咋样影响
Joda
的操作。默认时间,即于运行代码的机器的网时钟检索到的岁月,在多数景下于应用。

语到日期处理,Joda
是一模一样种使人惊叹的快捷工具。无论你是算日期、打印日期,或是解析日期,Joda
皆以凡工具箱中之简便工具。在本文中,我先是介绍了 Joda,它可以当 JDK
日期/时间库底替代接纳。然后介绍了有的 Joda 概念,以及怎么着采用 Joda
执行日期总括和格式化。

Joda-提姆(Tim)e
衍生了有些系的色,您可能碰面意识这些品种大有因而。现在出现了一个对准
Grails Web 开发框架的 Joda-提姆(Tim)e 插件。joda-time-jpox
项目的靶子就是长一些少不了的映照,以运 DataNucleus 持久化引擎持久化
Joda-提姆e 对象。并且,一个针对 Google Web Toolkit(也称之为 Goda-提姆e)的
Joda-提姆e 实现即正值开中

相关文章

No Comments, Be The First!
近期评论
    分类目录
    功能
    网站地图xml地图