hadoop是什么?HDFS与MapReduce
Hive:数据仓库,在HDFS之上,后台执行,帮你执行。facebook开源,设计目的,类似SQL语言,来做转换。
Hadoop:集群的安装部署,建立在伪分布式安装基础上。
分布式数据库Nosql数据库,类似于oracle,存储几十亿行数据,上万列数据。准实时查询,与MapReduce很好集成,进行计算,处理数据,体系架构,访问(shell、API)
Linux系统:
- Hadoop生成环境都是Linux,不过Hadoop2.x开始支持Windows环境,开始支持。掌握Linux环境熟悉基本命令和Linux环境的基本配置。
- Linux环境搭建,使用VMWare虚拟机搭建。安装百度看看。
- Linux系统版本很多,使用CentOS6.4版本。Linux系统一般下都是用:RedHat 6.X 环境都是64位。
- Linux下的基本命令操作和基本的常识。
- Linux系统环境的基本配置,配置IP地址、配置主机名,关闭防火墙等。
- 远程连接Linux系统的工具,FTP工具,命令行工具,桌面化远程工具。
Linux命令
查看主机ip地址:
ifconfig ipconfig(windows下)
清除屏幕:
clear
在Linux系统中,系统中有默认的超级管理员用户root,就相当与win中的默认超级管理员用户administrator
配置主机名称:
查看当前系统主机名称:hostname
设置主机名称:
- root用户 hostname peter:仅仅当前生效。
- root用户 more /etc/sysconfig/network
文件查看: - more :一页一页查看,翻页查看内容
more /etc/sysconfig/network(要改主机名,在这个地址下去改) - tail:看文件最后几行内容,一般用于查看日志文件,滚动
tail -f /ect/sysconfig/network
tail -100f /data/jilu.log 查看日志文件最后100行内容 - cat:查看所有文件
一些基本命令:
pwd 显示当前用户所在的目录
ls 列出当前目录下的所有文件
cd data 进入当前目录的子目录data
mkdir 创建文件夹
touch hello.TXT 创建一个文件
vim 编辑:按下i,进入编辑
~:当前用户主目录
在Linux环境下,针对文件有三种格式:
- 文件 用-表示
- 目录 用d
- 链接 用l表示
每个文件针对于三类用户来说:文件的所有者,文件的同组用户,系统的其他用户。权限如何?
权限有三种: 可读(r/4) 可写(w/2) 可执行(x/1)
- 使用远程命令行登陆Linux系统,首先进入的是用户的主目录。
- 在Linux环境下,通常每创建一个用户,就会在/home目录下创建一个以用户名命名的文件夹,比如创建一个hadoop,则用户主目录为/home/hadoop/
ls显示
基本操作命令
用户减去可读可写可执行
文件的改法
Hadoop
- 存储:分布式,集群的概念。
分布式:很多台机器去储存数据,管理(主节点(班长)、从节点(学生))
HDFs(Hadoop Distributed FileSystem) - 分析:分布式,并行,离线计算框架。管理(主节点,从节点),MapReduce
大数据 云计算
大数据:数据量大、数据有价值,分析挖掘。
云计算:由三层构成:
IAAS:OpenStack:构建公司内部自由云平台。
PAAS
SAAS
Hadoop MapReduce:核心就是对数据的排序优化。
Apache Hadoop版本:
- 经典版本:0.20.2(这个版本资料最多)
1.0.0版本(第一个1.0.0正式版本),1.0.3或者1.0.4非常好(应用最多的版本)1.1.2、1.2.1(目前最新的版本) - 0.23.0(跨越版本,出现YARN框架,第二代MapReduce框架,资源管理和任务调度框架) 0.23.10版本最新的,与2.x系列版本区别在于,没有HDFS和HA和Federation特性。
- 2.X版本(将1.x系列版本与0.23.0系列版本的集合):1)2.0.X版本:属于2.x系列版本的alpha版本。 2) 2.1.x版本:属于2.x系列版本的beta版本。 3)2.2.0、2.3.0、2.4.0正式版本,可用于实际生产环境中。其中2.2.0是最好的。
lesson 4
对Apache Hadoop生态系统的认识
Hive就相当于仓库里的小库(画目录)
pig数据流处理
ETL(提取-转化-加载)从数据库中获取数据,并进行一系列的数据清理和清洗筛选,将合格的数据进行转换成一定的格式数据进行存储,将格式化的数据存储到HDFS文件系统上,以供计算框架进行数据分析和挖掘。格式化数据:TSV格式(每行数据的每列之间以制表符\t进行分割)、CSV格式:每行数据的每列之间以逗号分割。
sqoop:将关系型数据库中的数据与HDFS(HDFS文件,HBase中的表,Hive中的表)上的数据进行相互导入导出。
Flume:
收集各个应用系统和框架的日志,并将其放到HDFS分布式文件系统的相应制定的目录下。
Ambari:安装、部署、配置、管理(图形化界面让我们来管理)
Hadoop1.x组成
对于分布式系统和框架的架构来说,一般分为两部分:
- 管理层(用于管理应用程序)
- 应用层(工作的)
HDFS,分布式文件系统:
NameNode,属于管理层,用于管理数据的存储。
SecondaryNameNode,属于管理层,辅助NameNode管理。
DataNode:属于应用层,用户进行数据的
存储,被NameNode进行管理,要定时的向NameNode进行工作汇报,执行NameNode分配分发的任务。
MapReduce,分布式的并行计算框架:
JobTracker:属于管理层,管理集群资源和对任务进行资源调度,监控任务的执行。
TaskTracker:属于应用层,执行JobTracker分配分发的任务,并向 JobTracker汇报工作情况。
HDFS系统架构图
NameNode:存储文件的元数据
- 文件名称
- 文件的目录结构
- 文件的属性(权限、副本数、生成时间)
- 文件——对应的块(Block)——(存储在)DataNode上
MapReduce思想:
Map:分而治之(分成几块去执行)
reduce:归约(把分散的结果进行整合)
日志有两种,分别以log和out结尾。
- 以log结尾的日志,通过log4j日志记录格式进行记录的日志,采用日常滚动方式,文件后缀策略来命名日志文件。内容比较全面。
- 以out结尾的日志。记录标准输出和标准错误的日志,内容少,默认的情况系统保留最新的5个日志文件。
日志文件的存储位置,用户可以自定义的配置,在conf下hadoop-env.sh
hadoop-hadoop-datanode-hadoop-master.log
表示框架名称,启动守护进程的用户名,守护进程的名称,hadoop-master(运行守护进程的主机名称),log格式
三种启动停止
- 第一种方式:启动停止方式,分别启动hdfs和mapreduce,命令如下:
start-dfs.sh或者star-mapred.sh
停止:stop-mapred.sh,start-dfs.sh(谁先启动先关谁) - 第二种方式,启动start-all.sh
停止stop-all.sh - 第三种方式不管他了
hadoop1.2.1五个服务与配置文件的关系
1. 三大基础配置文件:
- core-site.xml:配置hadoop common project相关属性的配置,hadoop1.x框架基础属性配置。
- hdfs-site.xml:配置hdfs project文件系统相关属性。
- mapred-site.xml:配置与mapreduce 框架相关的属性。
普通配置文件:
- masters:主节点,并不是配置hadoop中的主节点的相关信息,配置HDFS辅助节点的信息。
- slaves:从节点,配置hadoop1.x中hdfs和mapreduce框架的从节点信息。
hadoop1.x五大服务(守护进程):
- namenode
- datanode
- secondarynamenode
- jobtracker
- tasktracker
前三属于hdfs,后二mapred
另外两个配置文件,masters(secondarynamenode)(一行代表一个主机可以配置多节点)
slaves(datanode和tasktracker)
分析启动shell脚本
- 查看start-all.sh
第一点,此shell脚本,仅仅在主节点上执行。
hadoop运行的java警告:
hadoop相关命令中config和cinfigdir作用
相当于一个快捷键,因为可能有很多个hadoop版本。
hadoop1.X的目录结构
设计得越来越好。
contrib是功能拓展的那个包。
share是一些模板的包。
libexec
bin目录的上级目录的libexec。上级目录就是hadoop-1.2.1
HDFS设计目标
hadoop distributed file system
移动计算比移动数据便宜:以前做数据处理,是把分散的数据拿到一台机器,现在用同一种计算方法,把该方法分散到不同的机器,每台机器进行他的计算,然后在汇总
默认一个块的大小是64M
HDFS文件系统架构概述
主从结构:主节点namenode存储文件元数据(名称,权限,拥有者,多少个块,路径,块的id),从节点datanode(存储文件,都是以块的形式来进行存储的)
rack:机架
每个块都会存在不同的节点上。
信息是一一对应的,块名,个数等等
块数据的校验和:针对块形成一个算法,把它存储在系统中,每过一段去检查这个校验和去判断是否文件破坏等等。
每个块有三个副本块。
datanode与namenode的联系通过心跳信号和块状态报告等等。
主从结构。名字节点namenode,数据节点datanode。
默认为三个副本(冗余)
回收机制:也有类似windows的东西。
HDFS副本放置策略:
数据损坏处理:
HDFS中Client(客户端)和SNN
目的:辅助合并,减小下一次重启的时间
hadoop操作命令
最近使用hive做一些etl工作,除了日常sql的编写,了解hadoop及hive的一些底层原理性质的东西包括调优非常有必要,一次hive调优就把原来的零散文件做了合并。首先记下hadoop常用的命令:(hadoop fs -help列出全部)
1,hadoop fs –fs [local | <file system URI>]:声明hadoop使用的文件系统,如果不声明的话,使用当前配置文件配置的,按如下顺序查找:hadoop jar里的hadoop-default.xml->HADOOPCONFDIR下的hadoop?default.xml?>HADOOP_CONF_DIR下的hadoop-site.xml。使用local代表将本地文件系统作为hadoop的DFS。如果传递uri做参数,那么就是特定的文件系统作为DFS。
2,hadoop fs –ls <path>:等同于本地系统的ls,列出在指定目录下的文件内容,支持pattern匹配。输出格式如filename(full path) <r n> size.其中n代表replica的个数,size代表大小(单位bytes)。
3,hadoop fs –lsr <path>:递归列出匹配pattern的文件信息,类似ls,只不过递归列出所有子目录信息。
4,hadoop fs –du <path>:列出匹配pattern的指定的文件系统空间总量(单位bytes),等价于unix下的针对目录的du –sb <path>/*和针对文件的du –b <path> ,输出格式如name(full path) size(in bytes)。
5,hadoop fs –dus <path>:等价于-du,输出格式也相同,只不过等价于unix的du -sb。
6,hadoop fs –mv <src> <dst>:将制定格式的文件 move到指定的目标位置。当src为多个文件时,dst必须是个目录。
7,hadoop fs –cp <src> <dst>:拷贝文件到目标位置,当src为多个文件时,dst必须是个目录。
8,hadoop fs –rm [-skipTrash] <src>:删除匹配pattern的指定文件,等价于unix下的rm <src>。
9,hadoop fs –rmr [skipTrash] <src>:递归删掉所有的文件和目录,等价于unix下的rm –rf <src>。
10,hadoop fs –rmi [skipTrash] <src>:等价于unix的rm –rfi <src>。
11,hadoop fs –put <localsrc> … <dst>:从本地系统拷贝文件到DFS。
12,hadoop fs –copyFromLocal <localsrc> … <dst>:等价于-put。
13,hadoop fs –moveFromLocal <localsrc> … <dst>:等同于-put,只不过源文件在拷贝后被删除。
14,hadoop fs –get [-ignoreCrc] [-crc] <src> <localdst>:从DFS拷贝文件到本地文件系统,文件匹配pattern,若是多个文件,则dst必须是目录。
15,hadoop fs –getmerge <src> <localdst>:顾名思义,从DFS拷贝多个文件、合并排序为一个文件到本地文件系统。
16,hadoop fs –cat <src>:展示文件内容。
17,hadoop fs –copyToLocal [-ignoreCrc] [-crc] <src> <localdst>:等价于-get。
18,hadoop fs –mkdir <path>:在指定位置创建目录。
19,hadoop fs –setrep [-R] [-w] <rep> <path/file>:设置文件的备份级别,-R标志控制是否递归设置子目录及文件。
20,hadoop fs –chmod [-R] <MODE[,MODE]…|OCTALMODE> PATH…:修改文件的权限,-R标记递归修改。MODE为a+r,g-w,+rwx等,OCTALMODE为755这样。
21,hadoop fs -chown [-R] [OWNER][:[GROUP]] PATH…:修改文件的所有者和组。-R表示递归。
22,hadoop fs -chgrp [-R] GROUP PATH…:等价于-chown … :GROUP …。
23,hadoop fs –count[-q] <path>:计数文件个数及所占空间的详情,输出表格的列的含义依次为:DIR_COUNT,FILE_COUNT,CONTENT_SIZE,FILE_NAME或者如果加了-q的话,还会列出QUOTA,REMAINING_QUOTA,SPACE_QUOTA,REMAINING_SPACE_QUOTA。
最后就是万能的hadoop fs –help [cmd]啦~~
演示截图:
创建目录
复制+删除
拷贝到当前的目录
hadoop读取与写入流程
读取:
写入:
HDFS JAVA API
使用HDFS FileSystem详解
讲解分析configuration和filesystem类
点开没有源码就需要找关联包
按住crlt再点击 可以看详细的
需要完成的
url来读取文件
文件流读取文件
有问题的地方:查看目录,获取节点信息,查看集群信息
HDFS实际应用之文件合并
./表示当前目录
减小了本地空间,也提高了上传的效率
hadoop也有这个命令:
getmerge
命令操作演示
保持格式一致,所以移除了一个
先通过fs没找到fsshell,进而找到这个类。
先建他,通过f12看源码,在源码中找到copymerge。
源码没看懂
getmerge功能实现思路
文件的上传下载,实质就是字符流的读写操作。
读文件:打开输入流--》read
写文件:打开输出流--》write
把这六个格子的文件上传到HDFS
百度网盘功能的实现以及HDFS API相应说明
上传 新建 下载 删除 重命名 移动都有对应的功能。
作业:按照百度网盘 实现自己的网盘,界面功能实现就好,使用jsp界面就好。
Hadoop章末作业布置
MapReduce章节
MapReduce特点
- 易于编程
- 良好拓展性
- 适合海量数据(离线计算)
- 高容错性
相关概念
输出文件包括三部分:
success(成功与否)
logs (日志文件)
输出结构
首先文件到map,map传输文件(进行排序),拷贝给reduce,然后进行后续过程。
shuffling包含拷贝排序。
num task 显示了有几个map,几个reduce
表示的进度,map就只有map
reduce拷贝,排序,reduce
Map处理
key是0,12 因为hello hadoop!我们看成12个字符。
Reduce分析
总的来说:
Input---key,value--map()--key,value--分区、排序、组合、拷贝排序(以key,value来做)--reduce--key,value--output
MapReduce编程模型
利用hadoop计算pi
利用的是蒙地卡罗算法,常用这个方法来看Hadoop的mapreduce性能。
几个监控图
MapReduce负责的一些功能
MapReduce的八股文结构
map转化的key与value
打包程序在hadoop下面运行
- 步骤
打包成jar包
在eclipse下面选择项目右键,选择export,然后在linux下运行。
hadoop jar <jar> 目标目录 输出目录代码示例
优化MyWordCount程序
消除此段警告提示
17/10/17 10:28:21 WARN mapred.JobClient: Use GenericOptionsParser for parsing the arguments. Applications should implement Tool for the same.
加入此类GenericOptionsParser
增加代码95-99行
加入hadoop-eclipse-plugins插件
把这个jar包放入eclipse下的dorpins,配置文件如下
改tmp.dir 以及false和3的那个参数
运行的时候(不太清楚)
为了简单起见直接配置参数有两种方式:
-
加入93-95行代码
args = new String[] {"hdfs://192.168.38.129:9000/opt/wc/input", "hdfs://192.168.38.129:9000/opt/wc/output4"};
- 右键run as 在最后一行
点进去直接配置
先会出现错误
解决方案(原理不懂):
MyWordCount处理过程详解
先分割:
自然先按字母表来排列
MapReduce作业运行流程
数据本地化:运算移动,数据不移动:不是随机分配,每个map任务需要一些文件,首先看哪台机器有满足此任务的条件。
spot 槽 指hadoop1.0中的资源
hadoop2.0用的是container 容器
MapReduce执行流程shuffle map之后 reduce之前的过程
一个reduce任务对应一个分区数据
数据压缩:一开始用Gzip后来用Lzo与snappy
Reduce端口分析
排序是hadoop的灵魂
先往内存里面写,然后不够的话,写到文件里去(绿色方框),最后再次合并到菱形,不断的合并与排序
MapReduce Shuffle(混淆)过程讲解
map端洗牌过程
在3过程中(溢出过程中):进行了排序、合并
可以定制分区,经过partitioner返回0,说明第一个就完全足够(取余数)
partion分区就来放key与value。
0,1,2各个分区。
reduce端口洗牌过程
同样如果没有到阈值也不用到disk
源代码跟踪查看Map Task和Reduce Task数目的个数
MapReduce回顾
Hadoop MapReduce数据类型
重写相当于方法的重载,函数名字一样但是功能不一样,例如一个求和函数但是他只能算整理,如果我们要让他算小数,就需要重载。
Hadoop中Comparator中的讲解(第67课,没看懂)
提出问题,原本当数据写入磁盘时候,首先需要....,能不能对字节直接进行比较
以下以InterWritable为例查看
分为如上四步的一个说明
自定义数据类型
数据类型这里不太明白
MapReduce应用案例之手机流量分析统计
-
分析业务需求:用户使用手机上网,存在流量的消耗,流量消耗有两部分:其一上行流量(发送信息流行),其二下行流量(接受信息流量),每种流量在网络传输过程中,都有两种形式说明:包的大小,流量的大小。使用手机上网,以手机号为唯一标识符,进行记录。需要的信息字段:
实际需要的字段:
- 手机号码
- 上行数据包数
- 下行数据包数
- 上行总流量
- 下行总流量
自定义数据类型(5个字段):
DataWritable 实现WritableComparable接口分析MapReduce写法,哪些业务逻辑在Map阶段执行,哪些业务逻辑在Reduce阶段执行。
Map阶段:从文件中获取数据,抽取出需要的五个字段,输出的key为手机号码,输出的value为数据流量的类型DataWritable对象。
Reduce阶段:将相同手机号码的value中的数据流量进行相加,得出手机流量的总数(数据包和数据流量)输出到文件中,以制表符分开。
69与70流量监控部分代码没看懂