大数据
一、什么是大数据
#对海量书籍的存储已经管理
特点:
1.数据级别:TB、PB
2.数据是非结构化(视频、音频)以及半结构化(HTML)的数据
3.每天产生的数据要达到TB级别
二、大数据带来的变化
1.不需要依赖计算模型,存储全部样本的数据,直接可得到相近的结果
2.数据之间不存在因果关系,可直接得到结果
3.描述用户画像,精准推销
4.人工智能以及物联网的基础
5.人工神经网络的基础
6.可以运用到各行各业,如医疗行业
三、hadoop的发展
goole搜索引擎==>快、准、多==>数据不能删除==>引起数据存储的问题==>三大论文==>导致hadoop产生
四、HDFS与Mapreduce的出现
《GFS》==>HDFS,Hadoop分布文件系统
《Mapreduce》==>Mapreduce,分布式计算框架
五、Hadoop的架构版本
Hadoop1.0=HDFS+MapReduce
Hadoop2.0=HDFS+Yarn+MapReduce
Yarn:是细粒度的资源调度框架
六、HDFS
纵向扩展:加磁盘
横向扩展:加计算机,形成集群
DataNode(仅用来存储数据) + NameNode(检测和管理DataNode、存储元数据)
心跳机制:DataNode(心脏)向NameNod(心跳检测仪)发送信息,可实现实时检测。
#如何容灾:
备份机制:
1.在本机备份一份
2.在相同机架上不同节点(datanode)上备份一份
3.在不同机架上的节点中备份一份
七、Hadoop集群的搭建
Hadoop模式:
1.单机模式:一台机器,只支持MapReduce,这个模式用来测试MapReduce代码
2.伪分布模式:一台机器,支持HDFS与MapReduece,通过多线程来模拟分布式
3.完全分布模式:多台机器来搭建分布式
#由于只有一台计算机,资源有限,所以Hadoop模式采用伪分布式模式
1.准备一台虚拟机(配置固定IP)——基础条件
2.永久关闭防火墙——方便和外界进行操作不会有限制,但是在实际开发中不会关闭防火墙,只是开启一个端口与外界通信
3.永久配置linux主机名——方便记忆,操作主机名,
4.配置linux的hosts文件——方便访问
5.配置免密登陆——方便访问
6.上传和配置JDK
7.上传和配置Hadoop
#临时关闭防火墙
service iptables stop
#永久关闭防火墙
chkconfig iptables off
#临时配置主机名
hostname 主机名
#永久配置主机名,修改HOSTNAME的值,
vim /etc/sysconfig/network
#配置hosts文件中存放的是IP与域名之间的映射
#访问www.baidu.com的过程:首先查找本地的hosts文件中是否存在对应域名的映射关系,如果没有就转向DNS服务器,然后DNS服务器解析后,返回对应的IP,然后计算机再去访问对应的IP
#windows中hosts文件所在目录:C:\Windows\System32\drivers\etc
#Linux中的hosts文件所在目录:/etc/hosts , 添加刚刚配置的永久IP和主机名
vim /etc/hosts
#免密登陆:一台机器访问另一台机器时,不输入用户名和密码就可以访问
#加密方式:1.对称加密 2.非对称加密(RSA): 密钥对 (公钥:所有人都可见,私钥:仅有一份)
#公钥的加密信息只能由私钥来解密;linux默认使用RSA加密算法加密
#创建密钥对
ssh-keygen
#发送公钥
ssh-copy-id root@hadoop01
#注意:为了方便查找上传的软件,所以在/home中创建一个名为software的目录
mkdir /home/software
#上传:使用rz命令或者直接拖拽上传文件
#yum install -y lrzsz
#上传与配置JDK
#上传后,发现是.tar.gz文件,所以采用下面的语句解压
tar -zxvf jdk-7u51-linux-x64.tar.gz
#注意:这里解压后JDK就安装好了,因为这个压缩包,就是已经编译好了的JDK,所以不用编译安装了,只需要配置了
#配置环境变量
vim /etc/profile
#在/etc/profile的末尾添加的内容如下
#set java env
JAVA_HOME="/home/software/jdk1.7.0_51"
PATH="$PATH:$JAVA_HOME/bin"
CLASSPATH=".:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar"
export JAVA_HOME PATH CLASSPATH
#使修改生效
source /etc/profile
#上传与配置Hadoop
#上传后,发现是.tar.gz文件,所以采用下面的语句解压
tar -zxvf hadoop-2.7.1_64bit.tar.gz
#注意:这里解压后Hadoop就安装好了,因为这个压缩包,就是已经编译好了的JDK,所以不用编译安装了,只需要配置了
#配置Hadoop的环境变量,使hadoop的命令全局生效,修改/home/software/hadoop-2.7.1/etc/hadoop/hadoop-env.sh
#1.因为hadoop需要java的支持,所以需要在该文件中配置jdk的环境,即JAVA_HOME,在第25行
export JAVA_HOME=/home/software/jdk1.7.0_51/
#2.因为需要使hadoop知道自己的配置文件,所以还需要配置该文件中的Hadoop的配置文件路径,即HADOOP_CONF_DIR,在第33行
export HADOOP_CONF_DIR=/home/software/hadoop-2.7.1/etc/hadoop
#配置HDFS的核心配置文件,即配置NameNode
#配置文件:
/home/software/hadoop-2.7.1/etc/hadoop/core-site.xml
#配置HDFS相关属性,即配置NameNode
#配置文件:
/home/software/hadoop-2.7.1/etc/hadoop/hdfs-site.xml
配置MapReduce
#hadoop启动时只认mapred-site.xml,所以要配置mapred-site.xml文件,但是开始没有这个文件,只有一个mapred-site.xml.template模板文件,所以使用下面的命令,拷贝一份
cp mapred-site.xml.template mapred-site.xml
#配置文件:
/home/software/hadoop-2.7.1/etc/hadoop/mapred-site.xml
配置Yarn
#配置文件:
/home/software/hadoop-2.7.1/etc/hadoop/yarn-site.xml
配置slaves
#伪分布式,只有一台机器,所以还是配置自己,即将里面的内容替换为本机主机名
#配置文件:
/home/software/hadoop-2.7.1/etc/hadoop/slaves
配置系统文件——/etc/profile
#为Hadoop配置环境变量
vim /etc/profile
HADOOP_HOME="/home/software/hadoop-2.7.1"
PATH="$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin"
export JAVA_HOME PATH CLASSPATH HADOOP_HOME
八、测试Hadoop是否安装成功
#1.格式化,创建空的Fsimage文件和Edits文件
hadoop namenode -format
2.开启HDFS的服务
sh start-dfs.sh
3.测试是否启动成功的两种方式:
4.关闭服务
sh stop-dfs.sh
九、通过Hadoop的shell命令操作HDFS
#Hadoop的shell命令格式
hadoop fs 选项 参数
#与HDFS系统相关的路径,全部写绝对路径,因为不能切换路径,所以没有相对路径的说法
#1.创建目录
一次创建单个目录: hadoop fs -mkdir 目录名
一次创建多个目录: hadoop fs -mkdir 目录名 目录名 目录名
创建多级目录: hadoop fs -mkdir -p 目录名/目录名/目录名
#2.查看目录中的内容
hadoop fs -ls 目录名
#3.上传文件
hadoop fs -put 需要从Linux上传的文件 HDFS中的路径
#4.下载文件
hadoop fs -get 需要HDFS中下载的文件 Linux中的路径
#5.删除文件
hadoop fs -rm 文件
#6.删除空目录
hadoop fs -rmdir 目录
#7.删除文件或目录
hadoop fs -rmr 文件或目录
#8.查看文件内容
hadoop fs -cat 文件
hadoop fs -tail 文件
#9.移动
hadoop fs -mv 源 目标
#10.重命名
hadoop fs -mv 原名 目标名
#11.创建空文件
hadoop fs -touchz 文件
#12.合并目录1下的文件
hadoop fs -getmerge 目录1 合并后保存在Linux系统的文件名
#13.复制
hadoop fs -cp 源 目标
#14.查看HDFS上某文件的大小
hadoop fs -du 文件
#15.递归查看指定目录下的所有内容
hadoop fs -lsr 目录
#16.进入Hadoop安全模式
hadoop dfsadmin -safemode enter
#17.离开Hadoop安全模式
hadoop dfsadmin -safemode leave
#18.查看存活的datanode节点信息
hadoop dfsadmin -repot
#19.手动执行Fsimage文件与Edits文件合并元数据
hadoop dfsadmin -rollEdits
#20.查看指定目录的健康状况
hadoop fsck 目录
#21.查看文件block信息已经机架信息
hadoop fsck 文件 -files -blocks -locations -racks
#22.将本地文件(windows上面的文件)上传到HDFS
hadoop fs -copyFromLocal 本地文件 HDFS上的目录
#23.将HDFS上的文件拷贝到本地文件系统(windows系统)
hadoop fs -copyToLocal HDFS上的文件 本地的目录
十、HDFS的细节
#1.File Block
文件块是文件分布式存储的最小单位。
Hadoop1.0版本: 64M
Hadoop2.0版本: 128M
文件块的好处: 可以批处理,能够提高处理效率
#2.NameNode
NameNode用于管理元数据。
元数据=文件名+文件大小+文件块的信息
元数据被NameNode存放在内存中,可以应对服务器宕机带来的元数据丢失问题,除此之外,可以使查询效率提高
#3.DataNode
DataNode用于存储具体的数据
#4.Fsimage文件
Fsimage文件中存放的是最近的元数据信息
#5.Edits文件
Edits文件中存放的是最近的一系列的操作,即记录元数据的修改信息
#为了获取最新的元数据信息,Fsimage文件与Edits文件会进行定期的合并,这个定期的周期时间是3600s,把Fsimage文件中的信息和Edits文件中记录的最新操作信息进行合并,如果元数据丢失了,HDFS就不能进行正常的工作
#hadoop namenode -format命令的作用:创建最新的Fsimage文件已经Edits文件(这两个文件格式化之后都是空的),在实际生产环境中,用过之后就不会再使用了
#6.SecondaryNameNode
SecondaryNameNode的职责相当于秘书,NameNode会定期的将Fsimage文件和Edits文件传输到SecondaryNameNode,SecondaryNameNode会将这两个文件进行合并,然后将合并之后的元数据,再将传输到NameNode
#注意:
1.SecondaryNameNode仅仅是NameNode的辅助,并不能代替NameNode
2.SNN机制: 在hadoop服务启动时,合并操作是在NameNode上进行的,因为只有这样才能在第一时间获得最新的元数据信息,但是在hadoop服务运行过程中,合并操作仅由SecondaryNameNode
3.Hadoop1.0存在单点故障: 在Hadoop1.0版本中,SecondaryNameNode不是NameNode的热备份,所以做不到数据实时备份,如果NameNode里的元数据(Edits文件)丢失,那么元数据就不能被恢复。
#7.Hadoop回收站的配置
#Hadoop默认是不开启回收站的
#在开启后会自动在DHFS创建/user/root/.Trash/Current目录,删除的文件会被移动到这个目录中,但是删除这个目录中的文件,就会被永久删除
#还原操作:使用mv进行还原
#配置的文件:/home/software/hadoop-2.7.1/etc/hadoop/core-site.xml
#配置的内容:
<!--开启Hadoop回收站机制,vlaue值代表的是回收站存放的时间,默认单位是分钟-->
<property>
<name>fs.trash.interval</name>
<value>1440</value>
</property>
十一、Hadoop的API
#API就是一些预先定义的函数
11.1 环境搭建
1.安装eclipse,这里是因为idea可能不兼容这个项目
2.将用于把hadoop和eclipse关联的插件jar包复制到eclipse的安装目录下的plugins目录,为了让eclipse开启后能够找到
3.开启eclipse,并配置JDK,以及编译版本
#配置JDK
Window==>Preferences==>java==>Installed JRES==>添加并选择所使用的JDK版本
#配置编译版本
Window==>Preferences==>java==>Compiler==>选择与JDK版本一样的编译版本,如果不同可能出现问题
4.在windows中解压hadoop安装包,方便eclipse能够连接到Hadoop以及操作hadoop
#注意:解压路径不能有空格和中文
5.在eclipse中配置hadoop的安装路径
Window==>Preferences==>Hadoop Map/Reduce ==>选择到Hadoop的安装路径
#注意,如果没有Hadoop Map/Reduce,那么说明jar包没有弄好
6.指定用于连接远程Hadoop的MapReduce选项卡
Window==>show view==>others==>输入Map==>选择并打开“小黄象”==>在主视图中可以发现出现MapReduce的选项卡
7.新建Hadoop连接
在MapReduce选项卡中选择“小蓝象”,新建Hadoop连接
8.打开虚拟机,并开启HDFS服务
11.2 使用java API操作HDFS
#类与对象的关系
类是对对象的概括,对象是对类的一种实现
11.2.1 案例一: 测试使用JAVA API操作HDFS
#创建java project
new==>other==>搜索Map/Reduce Project
#Configuration类是代表Hadoop配置信息的类
#任何通过程序来配置Hadoop的信息,都要通过Configuration类来传递
#Configuration类实现了Iterable和Writable接口,说明可以进行增强for循环(foreach循环以及序列化和RPC
Configuration conf = new Configuration();
#可以通过通过对象调用方法来更改配置信息
#程序的优先级高于配置文件,所以配置信息最后由程序决定,如果程序没有配置相关信息,那么由Hadoop配置文件决定
#dfs.replication表示备份
conf.set("dfs.replication", "3");
#连接NameNode
#FileSystem类是代表Hadoop里面的文件系统的类
#HDFS代表类的是org.apache.hadoop.hdfs.FileSystem;
FileSystem fs = FileSystem.get(new URI("hdfs://hadoop01:9000"), conf);
#下载文件
FSDataInputStream fis = fs.open(new Path("/park/anaconda-ks.cfg"));
FileOutputStream fos = new FileOutputStream("1.txt");
IOUtils.copyBytes(fis, fos, conf);