1、hadoop要解决的问题(核心):
a)海量数据的存储:HDFS(海量分布式文件存储系统,老大:namenode,老二:datanode)。
b)海量数据的分析:MapReduce(离线数据处理,计算模型(并行计算框架))。
c)YARN(资源管理调度系统)(老大:resourcemanager,老二:Nodemanager)。
2、hadoop受Google的三篇论文启发:
GFS、MapReduce、BigTable
3、hadoop具体能干啥:
处理离线数据:日志分析。
4、HDFS的架构:
主从结构:
a)主节点:只有一个:namenode。负责:接收用户操作请求、维护文件系统的目录结构、管理文件与block之间关系,block与datanodes之间的关系。
b)从节点:有很多个:datanodes。负责:存储文件、文件被分成block存储在磁盘上、为保证数据安全,文件会有多个副本。
5、hadoop集群的物理分布:
6、单台机器(单节点)的物理结构:
7、hadoop的部署方式:
本地模式(用于调试)、伪分布式(一台机器模拟分布式)、集群模式。
8、伪分布式安装步骤:
关闭防火墙(因为多台节点之间要进行通信要占用端口,而防火墙会保护某些端口)。
修改ip(使每台机器都有固定的ip)。
修改hostname(主机名跟ip对应)。
设置ssh自动登录(安全的shell,一台机器给另一台机器发送命令)。
安装jdk。
安装hadoop。
9、主机和VMware之间通信:修改VMware网络为hostonly模式,在Windows就可以ping通虚拟机。
10、Linux相关命令:
查看防火墙状态:service iptables (防火墙)(参数:status)
修改ip: vim /etc/sysconfig/network-scripts/ifcfg-eth0
修改主机名: vim /etc/sysconfig/network
修改dns:vim /etc/hosts
查看防火墙是不是自启动:chkconfig iptables --list
改变系统的启动模式: vim /etc/inittab
关闭开机启动: chkconfig iptables off
查看文件内容: more filename
将java添加到环境变量: vim /etc/profie
刷新配置:source /etc/profile
8、修改五个配置文件:
a)hadoop_dir/etc/hadoop/:
vim hadoop-env.sh(修改hadoop的环境变量,hadoop依赖jdk)
添加Java_Home
b)core-site.xml(配置文件):
<configuration>
<property>
<name>fs.defaultFS(用来指定HDFS的老大(NameNode)的地址)</name>
<value>hdfs://hostname(ip):9000</value>
</property>
<property>
<name>hadoop.tmp.dir(用来指定hadoop运行时产生文件的存放目录)</name>
<value>hadoop_dir/tmp</value>
</property>
</configuration>
c)hdfs-site.xml
<configuration>
<property>
<name>dfs.replication(指定hdfs保存数据副本的数量)</name>
<value>1</value>
</property>
</configuration>
d)mapred-site.xml:
<configuration>
<property>
<name>mapreduce.framework.name(告诉hadoop以后mr运行在yarn上)</name>
<value>yarn</value>
</property>
</configuration>
e)yarn-site.xml:
<configuration>
<property>
<name>yarn.nodemagnager.aux-services(以后nodemaganer获取数据的方式是shuffle的方式)</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.hostname(指定yarn的老大resourcemanager的地址:主机名+ip)</name>
<value>(主机名)</value>
</property>
</configuration>
9,、需要将hadoop添加到环境变量中:vim /etc/profile
10、初始化文件系统HDFS(格式化文件系统)
使用 hadoop_dir/bin/里的 hadoop脚本:
hadoop nomenode -format
自动在hadoop_dir目录里生成tmp目录
10、启动hdfs和yarn:
脚本:hadoop_dir/sbin/:
./start_all.sh(过时了,可以分别启动:hdfs和yarn)
11、查看是否启动成功:
Java_dir/bin目录里的:jps命令
12、可以通过浏览器的方式验证:
http://192.168.8.88:50070(hdfs的管理界面)
http://192.168.8.88:8088(yarn的管理界面)
13、可以通过设置Windows的host,在hdfs的管理界面打开browser filesystem
14、上传本地文件到hdfs:
hadoop fs -put (本地文件) hdfs://hostname:9000/(dir)
15、从hdfs下载文件到本地:
hadoop fs -get hdfs://host_name:9000(namenode的地址)/dir /本地dir
(也可以在Windows的hdfs管理页面上下载)
16、测试MR和YARN
进入hadoop_dir/share/hadoop/mapreduce/
这里面有很多jar包,其中有hadoop官网给的用于测试MR的例子jar
运行:
hadoop jar 例子.jar wordcount(例子.jar里的参数)hdfs://home_dir:9000/input_dir(jar的输入,放在hdfs上) hdfs://home_dir:9000/output_dir(jar的输出,放在hdfs上)
17、停止hadoop:
进入hadoop_dir/sbin/
运行:stop-all.sh
18、ssh:secure shell
19、在Windows上再创建一个虚拟机,并且设置ip为198.126.8.99,设置好两个虚拟机之间,以及Windows和两个虚拟机之间都可以ping通。
20、在ip为88的虚拟机上运行:
ssh 192.168.8.99 mkdir /itcast0106
即在192.168.8.99的根目录/里创建目录itcast0106
21、ssh-keygen(生成秘钥) -t(指定加密类型) rsa(一种加密算法)
可以生成一个公钥,一个私钥
22、自己到自己免登陆:
把公钥拷贝给自己:cp id_rsa.pub(公钥) authorized_keys(已认证的钥匙:文件)
现在登陆到自己:ssh itcast01
不需要输入密码。
现在启动:./start-all.sh
不需要输入密码
总结:
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
把当前的公钥发送给要免登陆的机器上。
也可以使用命令:ssh-copy-id itcast01
23、ssh的免登陆过程:
//2017/8/14
1、自己设计一个分布式文件系统:
Hadoop2中块的大小为:128M,并且写满一个块,申请一个块(这样写入和读取失败时候,可以不用全部重新写入和读取)。
分布式文件管理系统很多,hdfs是一次写入多次查询,不支持并发写情况,小文件不合适(Hadoop2可以用于小文件)。
2、查看hdfs里的文件:
输入命令:hadoop fs(回车会有很多命令选项)
3、hdfs的架构:
客户端(client)要读取数据,首先要跟namenode打交道,从namenode获取元数据(metadata)信息,namenode查询其元数据信息,而元数据信息(Name,replicas,...)保存在内存和磁盘里,元数据返回给client后,client将数据分块依次读取到datanode上,如果一个datanode的块用完了,将剩下的块读取到其它的datanode上,并且客户端知道将数据读到哪个datanode上最近(就近原则)。
4、元数据(metadata)存储细节:
namenode里有:/test/a.log这个文件,有3个它的副本,该文件被切分成了{blk_1,blk_2}两块,{blk_1:[h0,h1,h3]}:blk_1这一块儿存储在h0(ip)、h1(ip)、h3(ip)机器上。
4、namenode介绍:
整个文件系统的管理节点,维护着整个文件系统的文件目录树,文件/木的元信息和每个文件对应的数据块列表。接收用户的操作请求。
namenode里的文件包括:
fsimage文件:元数据镜像文件。存储(磁盘上)某一时段namenode内存元数据信息。(并不保证磁盘上的数据与内存上的数据同步,磁盘上保存的是内存上的一段时间的数据信息)。
edits文件:记录用户的操作,操作日志文件。
fstime文件:保存最近一次checkpoint(做还原点)的时间。
以上这些文件保存在Linux的文件系统中。
5、在hadoop_dir/tmp/dfs/目录中有三个文件:
data、name、namesecondary。
其中data保存的是datanode、name保存的是namenode,而namesecondary用于帮助namenode同步数据。
6、namenode的工作特点:
namenode始终在内存中保存metedata元数据,用于处理“读请求”。
到有“写请求”到来时,namenode会首先写editlog到磁盘,即想edits文件中写日志,成功返回后,才会修改内存,并且向客户端返回。
hadoop会维护一个fsimage文件,也就是namenode中metedata的镜像,但是fsimage不会随时与namenode内存中的metadata保持一致,而是每隔一段时间通过合并edits文件来更新内容。secondarynamenode就是用来合并fsimage和edits文件来更新namenode的metedata的。
7、secondarynamenode介绍:
secondarynamenode是HA(高可用性)的一个解决方案。但不支持热备,配置即可。
执行过程:从namenode上下载元数据信息(fsimage,edits),然后把二者合并,生成新的fsimage,在本地保存,并将其推送到namenode,替换旧的fsimage。(注意伪分布式有secondarynamenode,在hadoop1中有,而在hadoop2中没有了secondarynamenode)。
8、secondarynamenode工作流程:
a)secondary通知namenode切换edits文件。
b)secondary从namenode以http的方式获得fsimage和edits。
c)secondary将fsimage载入内存,然后开始合并edits。
d)secondary将新的fsimage发回给namenode。
e)namenode用心的fsimage替换旧的fsimage。
9、什么时候checkpoint:
a)fs.checkpoint.period指定两次checkpoint的最大时间间隔,默认3600秒,即这么长时间secondarynamenode就要下载fsimage和edits进行数据同步。
b)fs.checkpoint.size规定edits文件的最大值,一旦超过这个值则强制checkpoint,不管是否达到最大时间间隔,默认是64M。
//2017/8/16
1、datanode:
提供真实文件数据的存储服务。
将文件切分成块:是最基本的存储单位。对于文件内容而言,一个文件的长度大小是size,那么从文件的0便宜开始,按照固定的大小,顺序对文件进行划分并编号,划分好的每一个块称一个Block。HDFS默认的block大小是128MB,以一个256MB文件,共有256/128=2个block。
不同于普通文件系统的是,HDFS中,如果一个文件小于一个数据块的大小,并不占用整个数据块存储空间。
replication。多副本,默认是三个。
2、Hadoop——namenode——心跳机制。
//2017/8/19
1、06HadoopRPC讲的Java实现RPC。
用eclipse写一个server和一个client,就可以通信。
把client放在虚拟机Linux系统里,server在Windows里,也可以正常通信。
2、07HDFS读取数据过程:
源码解释如何读取数据。
//2017/9/28
1、
05MR_例子1
Linux下安装eclipse:eclipse-jee-kepler-sr2-linux-gtk.tar.gz
maven项目——公司里大型开发用的。