欢迎投稿

今日深度:

Hadoop学习笔记,

Hadoop学习笔记,


实验环境:
1、Linux操作系统
2、Hadoop的介质
3、Spark的介质

学习路线和课程简介:
1、基础:Java语言:Java基础(Java SE):变量 类型 循环 if
面向对象:类、封装、集成、多态
I/O:输入流、输出流
反射、泛型
JDBC: 操作关系型数据库
Linux基础

大数据:数据的处理 (1)离线计算 (2)实时计算

2、Hadoop
(1)数据储存:HDFS
(2)数据计算:MapReduce(Java程序) ---> 离线计算
(3)其他组件(生态圈):HBase、Hive、Pig、Flume、Sqoop*****

3、Storm:实时计算框架(Java语言)
(1)NoSQL:Redis内存数据库
(2)Storm中的内容

4、Spark:数据计算
(1)Scala编程语言:看成是Java的升级
(2)Spark Core:整个Spark的核心 ---> 相当于MapReduce
(3)Spark SQL
(4)Spark Streaming:实时计算框架

5、项目实战



第一章、Linux基础

一、Linux的实验环境
(*)版本:RedHat 7.4 64位 自带netcat服务器(测试:Spark Streaming)
(*)VM:12
(*)类型:Redhat Linx 7 64位
(*)网卡:仅主机模式
(*)一共5台虚拟机:安装JDK、配置主机名、关闭防火墙
192.168.157.11 bigdata11
192.168.157.12 bigdata12
192.168.157.13 bigdata13
192.168.157.14 bigdata14
192.168.157.15 bigdata15

二、配置Linux和Linux的目录结构
1、对Linux了解
2、关闭防火墙
查看防火墙的状态:systemctl status firewalld.service
关闭防火墙: systemctl stop firewalld.service
禁用防火墙(永久)systemctl disable firewalld.service

3、设置主机名 (配置文件) /etc/hosts
vi /etc/hosts

192.168.157.11 bigdata11

三、vi编辑器:相当于linux的记事本
三种模式:
1、编辑模式:等待命令的输入
按i--> 进入:插入模式
按:(冒号)进入命令模式

2、插入模式: 按esc键回到编辑模式

3、命令模式
(*) w: 保存
(*) q: 退出
(*) wq: 保存退出
(*) 打开行号:set number
关闭行号: set nonumber
(*) 换行: set wrap
set nowrap

四、文件目录操作命令(重点掌握:后面操作HDFS的时候,很方便)

(*)ls 显示文件和目录列表
-l 列出文件的详细信息
-a 列出当前目录所有文件,包含隐藏文件

隐藏文件:.bash_profile 设置环境变量:JAVA_HOME、HADOOP_HOME
隐藏目录:.ssh ----> 配置Hadoop和Spark的免密码登录

查询Hadoop的中文件:hdfs dfs -ls /

(*)当前目录:pwd
/root ---> root用户的HOME目录(快捷方式: ~)

(*)mkdir 创建目录
-p 父目录不存在情况下先生成父目录

约定:mkdir /root/tools ---> 所有的安装包
mkdir /root/training ---> 安装目录

在Hadoop中创建目录:hdfs dfs -mkdir /aaa

(*)cd 切换目录

(*)touch 生成一个空文件
echo 生成一个带内容文件 ----> 更常用的用法:查看环境变量
echo $JAVA_HOME

(*)cat、tac 显示文本文件内容
cat是从第一行开始写;tac是从最后一行开始写
举例: cat a.txt
查看Hadoop中文件的内容: hdfs dfs -cat /a.txt

(*)cp 复制文件或目录
cp a.txt data.txt

在Hadoop中拷贝数据: hdfs dfs -cp /a.txt /b.txt

(*)rm 删除文件
-r 同时删除该目录下的所有文件
-f 强制删除文件或目录

rm -rf a.txt
在Hadoop中删除文件:hdfs dfs -rmr /a.txt

(*)kill:杀死
参数: -9 强制杀死
-3

(*)tar命令:打包压缩

五、Linux的权限管理(Hadoop的HDFS权限非常像)
1、权限的类型:r 读
w 写
x 执行

2、使用ls -l或者ll命令查看权限


六、安装常用软件:安装JDK的时候,讲讲tar命令
tar -zxvf jdk-8u144-linux-x64.tar.gz -C ~/training/
设置环境变量:vi ~/.bash_profile
JAVA_HOME=/root/training/jdk1.8.0_144
export JAVA_HOME

PATH=$JAVA_HOME/bin:$PATH
export PATH

生效环境变量: source ~/.bash_profile


七、案例:Java的死锁分析 ---> 介绍一个工具(kill -3 的命令)
目的:找到死锁 性能诊断
Java提供了一个非常强大的性能诊断工具:Thread Dump(文本信息)
1、Linux:kill -3 PID(就是Java的进程号)

2、Windows: 按ctrl+break(fn+B)键


学习大数据,学什么?怎么学?
1、原理和运行机制、体系结构(非常重要)
2、动手:搭建环境、写程序

目的:1、学习内容 2、熟悉一些名词

一、各章概述(Hadoop部分)
(一)、Hadoop的起源与背景知识
1、什么是大数据?两个例子、大数据的核心问题是什么?
举例:(1)商品推荐:问题1:大量的订单如何存储? 问题2:大量的订单如何计算?
(2)天气预报:问题1:大量的天气数据如何存储? 问题2:大量的天气数据如何计算?

大数据的核心问题:(1)数据的存储:分布式文件系统(分布式存储)
(2)数据的计算:分布式计算

2、概念:数据仓库(Data warehouse)
(1)我们可以把Hadoop和Spark看成是数据仓库的一种实现方式
(2)数据仓库就是一个数据库,一般只做select
(3)重要:掌握数据仓库搭建的过程
(4)数据仓库又是一种OLAP的应用系统

3、概念:OLTP和OLAP
(1)OLTP:online transaction processing 联机事务处理
(2)OLAP:online analytic processing 联机分析处理 ------> 一般:不会修改(删除)数据

4、(最重要的内容)Google的几篇论文:3篇
(1)GFS:Google File System -----> HDFS ----> 解决:数据的存储
(2)MapReduce计算模型 -----> Hadoop MapReduce ----> 解决:数据的计算
(3)BigTable大表 -----> HBase是NoSQL数据库

(二)、实验环境

(三)、Apache Hadoop的体系结构(重要):实现Google的思想论文
1、HDFS:Hadoop Distributed File System
(*)主从结构
(*)主节点:NameNode名称节点
(*)从节点:DataNode数据节点
(*)SecondaryNameNode:第二名称节点

2、Yarn:是一个容器,运行MapReduce程序
(*)主从结构
(*)主节点:ResourceManager 资源管理器
(*)从节点:NodeManager 节点管理器

3、HBase:需要单独安装
(*)主从结构
(*)主节点:HMaster
(*)从节点:RegionServer

(四)、Hadoop 2.X的安装与配置
Hadoop有三种安装模式
1、本地模式 一台Linux
2、伪分布模式 一台Linux
3、全分布模式 三台Linux
4、掌握免密码登录的原理和配置

(五)、Hadoop应用案例分析
1、大数据背景下,企业级系统的架构的变化
2、HBase进行日志分析
3、了解:Hadoop在淘宝的应用

(六)、HDFS:Hadoop的分布式文件系统,数据存储
1、操作HDFS:(1)命令行 (2)Java API (3)网页:Web Console
2、原理:数据上传的过程
数据下载的过程
3、HDFS的底层实现:RPC和Java动态代理
RPC:remote procedure call
4、高级特性
(*)回收站
(*)快照snapshot:是一种备份
(*)配额quota:(1)名称配额 (2)空间配额
(*)安全模式:safemode
(*)权限

(七)、MapReduce:是一个计算模型,可以用Java来实现
1、Demo:经典WordCount
2、重点:MapReduce处理数据的过程
3、原理:Yarn执行MapReduce的过程
4、MapReduce的高级特性
(*)序列化
(*)排序
(*)分区
(*)合并
5、MapReduce的核心:Shuffle(洗牌)
6、编程案例:
(*)排序:order by
(*)去重:distinct
(*)多表查询
(*)倒排索引

补充:MySQL数据库
(八)、Hive:蜂巢 数据分析的引擎:翻译器 SQL ---------------> MapReduce
(九)、Pig: 猪 数据分析的引擎:翻译器 PigLatin语言 ------> MapReduce

(十)、HBase: NoSQL数据库
1、是基于Hadoop之上的NoSQL
2、体系结构:HMaster、RegionServer
3、搭建:本地模式、伪分布模式、全分布模式
4、操作:命令行、Java API、Web Console
5、过滤器:实现复杂的查询
6、HBase上的MapReduce

(十一)、Sqoop:数据采集引擎,采集关系型数据库中的数据
(十二)、Flume:数据采集引擎,采集日志

(十三)、HUE:基于Web的管理工具

(十四)、ZooKeeper: 相当于是一个”数据库“,实现HA(High Avaiblity高可用性)

(十五)、Hadoop的集群和HA
1、HDFS的联盟(Federation)
2、Hadoop的HA(High Avaiblity高可用性)

(十六)、Redis:基于内存的NoSQL数据库,提高性能

(十七)、Storm:处理流式数据(实时计算)
集成Storm和Redis


一、Google的基本思想
1、GFS
2、MapReduce:计算模型,进行大数据计算
问题的来源:PageRank(网页排名)

核心:先拆分,再合并

3、BigTable:大表,NoSQL数据库:HBase 基于HDFS之上的NoSQL数据库、列式数据库
表 ----> 目录
数据 ----> 文件

思想:通过牺牲存储的空间,来换取性能
把所有的数据存入一张表中,完全违背了关系型数据库范式的要求

二、Hadoop 2.X的安装与配置
习惯:SecureCRT
准备:1、安装Linux和JDK
2、关闭防火墙
3、配置主机名

解压:tar -zxvf hadoop-2.7.3.tar.gz -C ~/training/
设置环境变量:vi ~/.bash_profile
HADOOP_HOME=/root/training/hadoop-2.7.3
export HADOOP_HOME

PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
export PATH
source ~/.bash_profile

介绍Hadoop的目录结构

Hadoop有三种安装模式
1、本地模式 一台Linux
(*)特点:没有HDFS,只能测试MapReduce程序(本地数据:Linux的文件)
(*)配置:hadoop-env.sh
26行 export JAVA_HOME=/root/training/jdk1.8.0_144

(*)Demo:测试MapReduce程序
example: /root/training/hadoop-2.7.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar
hadoop jar hadoop-mapreduce-examples-2.7.3.jar wordcount ~/temp/data.txt ~/temp/mr/wc1


2、伪分布模式 一台Linux
(*)特点:在单机上,模拟一个分布式的环境,具备Hadoop的所有功能
(*)hdfs-site.xml

<!--数据块的冗余度,默认是3-->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>

<!--是否开启HDFS的权限检查,默认:true-->
<!--
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
-->

core-site.xml
<!--NameNode的地址-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://bigdata11:9000</value>
</property>

<!--HDFS数据保存的目录,默认是Linux的tmp目录-->
<property>
<name>hadoop.tmp.dir</name>
<value>/root/training/hadoop-2.7.3/tmp</value>
</property>

mapred-site.xml
<!--MR程序运行的容器是Yarn-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>

yarn-site.xml
<!--ResourceManager的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>bigdata11</value>
</property>

<!--NodeManager运行MR任务的方式-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>

对NameNode进行格式化: hdfs namenode -format
日志:Storage directory /root/training/hadoop-2.7.3/tmp/dfs/name has been successfully formatted.

启动:start-all.sh = start-dfs.sh + start-yarn.sh

(*)Demo:测试MapReduce程序
example: /root/training/hadoop-2.7.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar
hadoop jar hadoop-mapreduce-examples-2.7.3.jar wordcount /input/data.txt /output/wc1204


3、全分布模式 三台Linux
(*)特点:真正的分布式环境,用于生产


4、掌握免密码登录的原理和配置



第二章
一、搭建Hadoop的全分布模式

1、三台机器:bigdata12 bigdata13 bigdata14
2、每台机器准备工作:安装JDK、关闭防火墙、设置主机名
systemctl stop firewalld.service
systemctl disable firewalld.service

设置主机名 vi /etc/hosts
192.168.157.12 bigdata12
192.168.157.13 bigdata13
192.168.157.14 bigdata14

3、配置免密码登录
(1)在每台机器上产生公钥和私钥
ssh-keygen -t rsa

(2)需要将每台机器的公钥复制给其他机器(下面的三句话,需要在每台机器上执行)
ssh-copy-id -i .ssh/id_rsa.pub root@bigdata12
ssh-copy-id -i .ssh/id_rsa.pub root@bigdata13
ssh-copy-id -i .ssh/id_rsa.pub root@bigdata14

4、保证每台机器的时间同步的
5、安装Hadoop的全分布环境(在主节点bigdata12上安装)
(1)解压设置环境变量
(2)修改配置文件
hadoop-env.sh
26行 export JAVA_HOME=/root/training/jdk1.8.0_144

hdfs-site.xml

<!--数据块的冗余度,默认是3-->
<property>
<name>dfs.replication</name>
<value>2</value>
</property>

<!--是否开启HDFS的权限检查,默认:true-->
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>


core-site.xml
<!--NameNode的地址-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://bigdata12:9000</value>
</property>

<!--HDFS数据保存的目录,默认是Linux的tmp目录-->
<property>
<name>hadoop.tmp.dir</name>
<value>/root/training/hadoop-2.7.3/tmp</value>
</property>

mapred-site.xml
<!--MR程序运行的容器是Yarn-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>

yarn-site.xml
<!--ResourceManager的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>bigdata12</value>
</property>

<!--NodeManager运行MR任务的方式-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>

slaves: 配置的是所有的从节点
bigdata13
bigdata14

(3)格式化NameNode: hdfs namenode -format


6、将配置好的目录复制到bigdata13和bigdata14上
scp -r hadoop-2.7.3/ root@bigdata13:/root/training
scp -r hadoop-2.7.3/ root@bigdata14:/root/training

7、启动Hadoop集群(在主节点上): start-all.sh
stop-all.sh

8、验证
(*)命令行:hdfs dfsadmin -report
(*)网页:HDFS:http://192.168.157.12:50070/
Yarn:http://192.168.157.12:8088

第四章:Hadoop的体系结构(非常重要):原理、结构、运行机制
问题:Putty或者SecureCRT连不上

一、HDFS的体系结构和运行原理
1、主节点:NameNode
(*)职责:管理HDFS
接收客户端的请求:上传数据、下载数据
管理和维护日志(edits文件)和元信息(指的是:数据块的位置信息:fsimage文件)

(*)HDFS的日志:edits文件
举例: 创建目录 ---> 产生日志
hdfs dfs -mkdir /mydemo1
查找edits文件:find . -name edits*

(1) edits_inprogress_0000000000000000105是二进制文件
(2)HDFS提供一个工具:edits viewer 日志查看器,转换成一个XML文件
hdfs oev -i edits_inprogress_0000000000000000105 -o ~/a.xml
<RECORD>
<OPCODE>OP_MKDIR</OPCODE>
<DATA>
<TXID>107</TXID>
<LENGTH>0</LENGTH>
<INODEID>16416</INODEID>
<PATH>/mydemo1</PATH>
<TIMESTAMP>1512565581211</TIMESTAMP>
<PERMISSION_STATUS>
<USERNAME>root</USERNAME>
<GROUPNAME>supergroup</GROUPNAME>
<MODE>493</MODE>
</PERMISSION_STATUS>
</DATA>
</RECORD>

(*)HDFS的元信息:fsimage文件:记录数据块的位置信息、冗余信息等等
查找fsimage文件:find . -name fsimage*
也是二进制的
HDFS也提供了一个工具:image viewer ,把fsimage文件转成文本、XML的文件

(*)问题:edits文件和fsimage文件,哪个文件体现了HDFS的最新状态?

2、从节点:DataNode
(*)按数据块保存数据:1.x:64M 2.x:128M
(*)数据块在操作系统的位置:
find . -name blk*
/root/training/hadoop-2.7.3/tmp/dfs/data/current/BP-156326068-192.168.157.11-1512395988927/current/finalized/subdir0/subdir0

(*)设置数据块冗余度的基本原则
一般,冗余度跟数据节点的个数一样,最大不要超过3

(*)一定做一下实验

3、第二名称节点:SecondaryNameNode,默认就跟NameNode在一起
(*)职责:定期进行日志信息的合并,edits ---> fsimage中
(*)掌握日志合并过程(重要)

二、Yarn的体系结构和运行原理:运行MapReduce的容器
hadoop jar hadoop-mapreduce-examples-2.7.3.jar wordcount /input/data.txt /output/wc1206

1、主节点:ResourceManager
职责:(*)接收任务请求
(*)资源的分配
(*)任务分配

2、从节点:NodeManager
职责:(*)从ResourceManager获取任务和资源
(*)执行

3、调度MR任务的过程
4、资源分配方式
(1)FIFO Scheduler:先来先得
(2)Capacity Scheduler:容器管理
(3)Fair Scheduler:公平调度管理 ,前提:假设任务具有相同优先级,平均分配资源

三、HBase的体系结构和运行原理
HBase是基于HDFS之上的NoSQL数据库

1、主节点:HMaster
2、从节点:RegionServer


四、主从结构的单点故障问题及解决方案(了解)


第五章:HDFS

一、操作HDFS
1、Web Console:端口50070
2、命令行:有两种类型
(1)普通操作命令: hdfs dfs ******
命令
-mkdir:在HDFS上创建目录
hdfs dfs -mkdir /aaa
hdfs dfs -mkdir /bbb/ccc
如果父目录不存在,使用-p参数先创建父目录

-ls 查看HDFS的某个目录
-ls -R 查看HDFS的某个目录,包含子目录
简写: -lsr

-put 上传数据
-copyFromLocal 上传数据
-moveFromLocal 上传数据,相当于ctrl+x

-copyToLocal 下载数据
-get 下载数据
举例: hdfs dfs -get /input/data.txt .

-rm: 删除目录
-rmr: 删除目录,包括子目录
hdfs dfs -rmr /bbb
日志:
17/12/08 20:32:10 INFO fs.TrashPolicyDefault: Namenode trash configuration: Deletion interval = 0 minutes, Emptier interval = 0 minutes.
Deleted /bbb

-getmerge:把某个目录下的文件,合并后再下载

-cp:拷贝 hdfs dfs -cp /input/data.txt /input/data2.txt
-mv:移动 hdfs dfs -cp /input/data.txt /aaa/a.txt

-count: 举例:hdfs dfs -count /students

-du: 类似-count,信息更详细
hdfs dfs -du /students

例子:
# hdfs dfs -count /students
1 2 29 /students
# hdfs dfs -ls /students
Found 2 items
-rw-r--r-- 1 root supergroup 19 2017-12-08 20:35 /students/student01.txt
-rw-r--r-- 1 root supergroup 10 2017-12-08 20:35 /students/student02.txt
# hdfs dfs -du /students
19 /students/student01.txt
10 /students/student02.txt

-text、-cat: 查看文本的内容
hdfs dfs -cat /input/data.txt
balancer:平衡操作
hdfs balancer

(2)管理命令:hdfs dfsadmin ******
-report: 打印HDFS的报告
举例:hdfs dfsadmin -report

-safemode:安全模式
hdfs dfsadmin -safemode
Usage: hdfs dfsadmin [-safemode enter | leave | get | wait]

# hdfs dfsadmin -safemode get
Safe mode is OFF
# hdfs dfsadmin -safemode enter
Safe mode is ON
# hdfs dfs -mkdir /dddd
mkdir: Cannot create directory /dddd. Name node is in safe mode.
# hdfs dfsadmin -safemode leave
Safe mode is OFF

3、Java API
(1)创建一个目录:mkdir ----> 告诉:权限的问题
(2)上传数据、下载数据
(3)查询数据的元信息

依赖的jar包:
/root/training/hadoop-2.7.3/share/hadoop/common
/root/training/hadoop-2.7.3/share/hadoop/common/lib

/root/training/hadoop-2.7.3/share/hadoop/hdfs
/root/training/hadoop-2.7.3/share/hadoop/hdfs/lib


二、HDFS输出数据的原理(画图):比较重要
1、数据上传的原理(过程)
2、数据下载的原理(过程)

三、HDFS的高级特性
1、回收站
2、快照snapshot:备份
3、配额quota:(1)名称配额
(2)空间配额

4、HDFS安全模式: safemode
5、HDFS的权限
6、HDFS的集群:(1)联盟Federation
(2)HA

四、HDFS底层的原理:Java程序
1、Java的动态代理
2、RPC:remote procedure call 远程过程调用



第五章:HDFS

一、操作HDFS
1、Web Console:端口50070
2、命令行:有两种类型
3、Java API

二、HDFS输出数据的原理(画图):比较重要
1、数据上传的原理(过程)
2、数据下载的原理(过程)

缓存元信息的内存:1000M
文件:hadoop-env.sh
# The maximum amount of heap to use, in MB. Default is 1000.
#export HADOOP_HEAPSIZE=
#export HADOOP_NAMENODE_INIT_HEAPSIZE=""


三、HDFS的高级特性
1、回收站: recyclebin
日志
-rmr: 删除目录,包括子目录
hdfs dfs -rmr /bbb
日志:
17/12/08 20:32:10 INFO fs.TrashPolicyDefault: Namenode trash configuration: Deletion interval = 0 minutes, Emptier interval = 0 minutes.
Deleted /bbb

(*)默认,HDFS的回收站是关闭
(*)启用回收站:参数---> core-site.xml
本质:删除数据的时候,实际是一个ctrl+x操作

<property>
<name>fs.trash.interval</name>
<value>1440</value>
</property>

日志:
hdfs dfs -rmr /folder1
rmr: DEPRECATED: Please use 'rm -r' instead.
17/12/11 21:05:57 INFO fs.TrashPolicyDefault: Namenode trash configuration: Deletion interval = 1440 minutes, Emptier interval = 0 minutes.
Moved: 'hdfs://bigdata11:9000/folder1' to trash at: hdfs://bigdata11:9000/user/root/.Trash/Current
(*)恢复:实际就是cp,拷贝
hdfs dfs -cp /user/root/.Trash/Current/input/data.txt /input

清空:hdfs dfs -expunge

(*)补充:Oracle数据库也有回收站
SQL> select * from tab;

TNAME TABTYPE CLUSTERID
------------------------------ ------- ----------
BIN$WBSNMvxJpWvgUAB/AQBygg==$0 TABLE
BONUS TABLE
DEPT TABLE
EMP TABLE
RESULT TABLE
SALGRADE TABLE

6 rows selected.

SQL> -- drop table mydemo1;
SQL> show recyclebin;
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ -------------------
MYDEMO1 BIN$WBSNMvxJpWvgUAB/AQBygg==$0 TABLE 2017-09-01:06:56:15
SQL> select count(*) from mydemo1;
select count(*) from mydemo1
*
ERROR at line 1:
ORA-00942: table or view does not exist


SQL> select count(*) from BIN$WBSNMvxJpWvgUAB/AQBygg==$0;
select count(*) from BIN$WBSNMvxJpWvgUAB/AQBygg==$0
*
ERROR at line 1:
ORA-00933: SQL command not properly ended


SQL> select count(*) from "BIN$WBSNMvxJpWvgUAB/AQBygg==$0";

COUNT(*)
----------
30

SQL> flashback table mydemo1 to before drop;

Flashback complete.

SQL> show recyclebin;
SQL> select count(*) from mydemo1;

COUNT(*)
----------
30

2、快照snapshot:备份 ---> 一般来说:不建议使用快照

(*)默认:HDFS的快照是禁用的
(*)第一步:管理员开启某个目录的快照功能
[-allowSnapshot <snapshotDir>]
[-disallowSnapshot <snapshotDir>]

hdfs dfsadmin -allowSnapshot /mydir1

(*)第二步:使用HDFS的操作命令,创建快照
[-createSnapshot <snapshotDir> [<snapshotName>]]
[-deleteSnapshot <snapshotDir> <snapshotName>]
[-renameSnapshot <snapshotDir> <oldName> <newName>]

hdfs dfs -createSnapshot /mydir1 mydir1_backup_01
日志:Created snapshot /mydir1/.snapshot/mydir1_backup_01
本质:将数据拷贝一份到当前目录的一个隐藏目录下

(*)继续试验
hdfs dfs -put student02.txt /mydir1
hdfs dfs -createSnapshot /mydir1 mydir1_backup_02

对比快照: hdfs snapshotDiff /mydir1 mydir1_backup_01 mydir1_backup_02
Difference between snapshot mydir1_backup_01 and snapshot mydir1_backup_02 under directory /mydir1:
M .
+ ./student02.txt

3、配额quota:(1)名称配额: 规定某个目录下,存放文件(目录)的个数
实际的个数:N-1个
[-setQuota <quota> <dirname>...<dirname>]
[-clrQuota <dirname>...<dirname>]

hdfs dfs -mkdir /quota1
设置该目录的名称配额:3
hdfs dfsadmin -setQuota 3 /quota1

当我们放第三个文件的时候
hdfs dfs -put data.txt /quota1
put: The NameSpace quota (directories and files) of directory /quota1 is exceeded: quota=3 file count=4


(2)空间配额: 规定某个目录下,文件的大小
[-setSpaceQuota <quota> [-storageType <storagetype>] <dirname>...<dirname>]
[-clrSpaceQuota [-storageType <storagetype>] <dirname>...<dirname>]

hdfs dfs -mkdir /quota2
设置该目录的空间配额是:10M
hdfs dfsadmin -setSpaceQuota 10M /quota2

正确的做法:hdfs dfsadmin -setSpaceQuota 130M /quota2

放一个小于10M的文件,会出错
Caused by: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.hdfs.protocol.DSQuotaExceededException): The DiskSpace quota of /quota2 is exceeded: quota = 10485760 B = 10 MB but diskspace consumed = 134217728 B = 128 MB

注意:尽管数据不到128M,但是占用的数据块依然是128M
切记:当设置空间配额的时候,这个值不能小于128M


4、HDFS安全模式: safemode ---> HDFS只读
命令: hdfs dfsadmin -safemode get|wait|leave|enter
作用:检查数据块的副本率,如果副本率不满足要求,就会进行水平复制

5、HDFS的权限


6、HDFS的集群:开个头
集群的两大功能:负载均衡,高可用(失败迁移)

(1)NameNode联盟(Federation) ----> HDFS

(2)HA: HDFS、Yarn、HBase、Storm、Spark ---> 都需要ZooKeeper


四、HDFS底层的原理:Java程序
1、Java的动态代理
2、RPC:remote procedure call 远程过程调用
HDFS的底层原理
1、Java的动态代理对象
再举一个例子:数据库的连接池 ----> 返回的Connection,不是真正的Connection,而是一个代理对象
实现一个接口:DataSource
准备环境:安装一个MySQL数据库

Hive的安装
在虚拟机上安装MySQL:
yum remove mysql-libs
rpm -ivh mysql-community-common-5.7.19-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.19-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.19-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.7.19-1.el7.x86_64.rpm
rpm -ivh mysql-community-devel-5.7.19-1.el7.x86_64.rpm (可选)

启动MySQL:service mysqld start
或者:systemctl start mysqld.service

查看root用户的密码:cat /var/log/mysqld.log | grep password
登录后修改密码:alter user 'root'@'localhost' identified by 'Welcome_1';

MySQL数据库的配置:
创建一个新的数据库:create database hive;
创建一个新的用户:
create user 'hiveowner'@'%' identified by 'Welcome_1';

给该用户授权
grant all on hive.* TO 'hiveowner'@'%';
grant all on hive.* TO 'hiveowner'@'localhost' identified by 'Welcome_1';

2、RPC:RPC(Remote Procedure Call)——远程过程调用,类似Web Service


六、MapReduce程序开发

1、Demo:WordCount单词计数
/root/training/hadoop-2.7.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar

执行:
hadoop jar hadoop-mapreduce-examples-2.7.3.jar wordcount /input/data.txt /output/mr/wc1213

分析WordCount程序数据处理的过程(非常重要)

2、开发自己的WordCount程序
开发一个MapReduce:求每个部门的工资总额

3、MapReduce的一些高级特性
(1)序列化:类似Java的序列化
(2)排序:默认排序:数字 升序
字符串 字典顺序
对象的排序:按照员工的薪水排序

(3)分区:Partition,默认情况下,MapReduce只有一个分区,意思是:只有一个输出文件
(4)合并:Combiner,在Mapper端,先做一次Reducer,用于减少输出到Reducer中的数据,从而提高效率
(5)MapReduce的核心:Shuffle(洗牌)



七、MapReduce的编程案例

六、MapReduce程序开发

1、Demo:WordCount单词计数
/root/training/hadoop-2.7.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar

执行:
hadoop jar hadoop-mapreduce-examples-2.7.3.jar wordcount /input/data.txt /output/mr/wc1213

分析WordCount程序数据处理的过程(非常重要)

2、开发自己的WordCount程序
需要包含的jar:
/root/training/hadoop-2.7.3/share/hadoop/common
/root/training/hadoop-2.7.3/share/hadoop/common/lib

/root/training/hadoop-2.7.3/share/hadoop/mapreduce
/root/training/hadoop-2.7.3/share/hadoop/mapreduce/lib

再举一个例子:开发一个MapReduce:求每个部门的工资总额
数据:员工表
SQL> select deptno,sum(sal) from emp group by deptno order by deptno;

DEPTNO SUM(SAL)
---------- ----------
10 8750
20 10875
30 9400



3、MapReduce的一些高级特性
(1)序列化:类似Java的序列化
如果一个类实现了的Hadoop的序列化机制(接口:Writable),这个类的对象就可以作为输入和输出的值
举例1:使用Employee类来封装员工信息,并且作为Map和Reduce的输入和输出

一定注意:序列化的顺序和反序列化的顺序要一致

举例2:使用序列化Employee重写 求每个部门的工资总额



(2)排序:注意:按照key2进行排序

默认排序:数字 升序
字符串 字典顺序
对象的排序:按照员工的薪水排序

如果要改变默认的排序规则,需要创建一个自己的比较器

(3)分区:Partition,默认情况下,MapReduce只有一个分区,意思是:只有一个输出文件
(4)合并:Combiner,在Mapper端,先做一次Reducer,用于减少输出到Reducer中的数据,从而提高效率
(5)MapReduce的核心:Shuffle(洗牌)



七、MapReduce的编程案例


一、排序:按照key2进行排序
1、数字的排序
2、字符串的排序
3、对象的排序: 实现WritableComparable接口 (1)序列化 (2)可被排序

员工数据 Employee.java ----> 作为key2输出
复习SQL:order by 后面 + 列名、表达式、别名、序号 desc
desc 只作用于离他最近的一个列
order by a desc,b desc

(1)一个列的排序
(2)多个列的排序

二、分区:Partition: 根据Map的输出(k2 v2)进行分区
1、默认情况下,MapReduce只有一个分区(只有一个输出文件)
2、什么是分区?(重要)
3、举例:Demo: 按照员工的部门号进行分区,相同部门号的员工输出到一个分区中
日志:
17/12/18 21:47:24 INFO mapreduce.Job: map 100% reduce 0%
17/12/18 21:47:49 INFO mapreduce.Job: map 100% reduce 33%
17/12/18 21:47:55 INFO mapreduce.Job: map 100% reduce 67%
17/12/18 21:47:56 INFO mapreduce.Job: map 100% reduce 100%

三、合并:Combiner
1、MapReduce的任务中,可以没有Combiner
2、Combiner是一种特殊的Reducer,是在Mapper端先做一次Reducer,用来减少Map的输出,从而提高的效率。
3、注意事项:
(1)有些情况,不能使用Combiner -----> 求平均值

(2)引入Combiner,不引人Combiner,一定不能改变原理的逻辑。(MapReduce编程案例:实现倒排索引)

错误:
Error: java.io.IOException: wrong value class: class org.apache.hadoop.io.DoubleWritable is not class org.apache.hadoop.io.IntWritable

四、什么时候Shuffle

五、MapReduce编程案例
一、什么是Shuffle(洗牌) ----> MapReduce核心
1、序列化
2、排序
3、分区
4、合并


二、MapReduce编程案例 ------> 掌握方法:如何开发一个程序
1、数据去重:
复习:SQL:distinct去掉重复的数据
作用于后面所有的列

复习(学习):Oracle中的多表查询
根据连接条件的不同:
(1)等值连接
(2)不等值连接
(3)外链接
(4)自连接

注意:(1)多表查询和子查询,尽量使用哪个?(多表查询)
(2)一般:多表查询的表的个数<=3 如果超过5个表,性能就差

2、多表查询:等值连接
查询员工信息:部门名称、员工姓名

select d.dname,e.ename
from emp e,dept d
where e.deptno=d.deptno;

问题:如果实现三张表??


3、多表查询:自连接: 通过表的别名,将同一张表看成多张表
查询员工信息:老板姓名 员工的姓名

select b.ename,e.ename
from emp b,emp e
where b.empno=e.mgr;

注意:产生的笛卡尔积= 原表的平方 ----> 自连接操作不适合操作大表
更好的方式:在Oracle中,使用层次查询(树)来取代自连接

4、倒排索引


5、使用单元测试:MRUnit

课程小结:

一、大数据的背景知识
1、什么是大数据?IBM五个v的特性。 举例:商品推荐、天气预报
2、数据仓库:就是一个数据库
3、OLTP和OLAP
4、Google的三篇论文
(1)GFS:HDFS
(2)MapReduce:PageRank搜索排名
(3)BigTable:大表---> HBase

二、Hadoop的体系结构
1、HDFS
(1)NameNode
(2)DataNode
(3)SecondaryNameNode

2、Yarn
(1)ResourceManager
(2)NodeManager

三、Hadoop的安装配置
1、注意:关闭防火墙、配置主机名、免密码登录(不对称加密)
2、三种模式:
(1)本地模式
(2)伪分布模式
(3)全分布模式

后面:HDFS的联盟、Hadoop的HA

四、HDFS
1、基本操作:命令行、Java、WebConsole
2、原理:上传和下载数据的过程
3、高级功能:回收站、快照、配额(名称、空间)、权限、安全模式
4、底层原理:代理对象和RPC

五、MapReduce

www.htsjk.Com true http://www.htsjk.com/Hadoop/41026.html NewsArticle Hadoop学习笔记, 实验环境: 1、Linux操作系统 2、Hadoop的介质 3、Spark的介质 学习路线和课程简介: 1、基础:Java语言:Java基础(Java SE):变量 类型 循环 if 面向对象:类、封装、集成...
相关文章
    暂无相关文章
评论暂时关闭