深入Hadoop
1、HDFS架构、启动过程
1)开发环境的准备
a.安装Maven(用于管理项目依赖包)
将apache-maven-3.0.5.tar.gz解压到/opt/models目录下
配置/etc/profile增加MAVEN_HOME和PATH,source /etc/profile
退出重新登录mvn -version
创建仓库目录~/.m2
将repository.tar.gz上传到/opt/softwares目录下
解压到~/.m2目录下
cp /opt/modules/apache-maven-3.0.5/conf/settings.xml .
b.安装Eclipse
将tools中的Eclipse压缩包解压
打开虚拟机进入eclipse目录运行./eclipse
配置maven为自己的maven目录
c.配置Eclipse与Maven插件
d.设置Linux下Eclipse快捷键
2、HDFS Java API 使用
1)获取文件系统
a.Configuration类 -->Configuration conf = new Configuration();
b.FileSystem类 -->FileSystem fileSystem = FileSystem.get(conf); return fileSystem;
2)获取输入流
a.定义文件名 -->String fileName = "文件路径";
b.Path类 -->Path readPath = new Path(fileName); 获取该文件的路径
c.FSDataInputStream inStream = fileSystem.open(readPath); 获取输入流(从文件系统中)
d.FileInputStream inStream = new FileInputStream("文件路径"); 获取本地文件输入流
3)获取输出流
定义文件名putFileName并获取路径writePath
FSDataInputStream outStream = fileSystem.create(writePath); 获取输出流
4)读和写流
try(
IOUtils.copyBytes(inStream,outStream,4096,false);
}catch(Exception e){
e.printStackTrace();
}final{
IOUtils.closeStream(inStream);
IOUtils.closeStream(outStream);
}
3、YARN架构、应用监控
1)safemode,namenode启动后进入safemode,等待datanode发送block report,等到达到阈值0.999后过30s退出safemode
手动进入safemode模式:bin/hdfs dfsadmin -safemode enter(leave)
4、MapReduce编程模型
1)一种分布式计算模型,MapReduce将整个并行计算过程抽象到两个函数
a.Map:对一些独立元素组成的列表的每一个元素进行指定的操作,可以高度并行
b.Reduce:对一个列表元素进行合并
c.数据的流向input-->map-->reduce-->output,以<key,value>对的形式流动
2)
3)MapReduce中的数据类型: -->都要实现Writable接口,以便序列化进行传输,key要继承WritableComparable
a.Text
b.LongWritable
c.IntWritable
d.NullWritable 当key或value值为空时使用
e.定义变量-->get,set方法-->构造方法-->重写equals,hashcode,tostring方法
-->实现WritableComparable接口中write,readFields,compareTo方法
5、MapReduce Shuffle过程
6、集群搭建
7、集群基准测试 --》测试集群的性能
a.吞吐量,namenode存储元数据的性能,yarn跑多个小作业时性能,
b.监控集群 cloudera
8、使用ntp配置内网时间同步
a.以一台机器作为时间服务器 -->rpm -qa | grep 'ntp'
vi /etc/ntp.conf 修改三处
vi /etc/sysconfig/ntpd 添加一行SYNC_HWCLOCK=yes
service ntpd start
chkconfig ntpd on
b.其他机器定时同步 -->切换到root用户写脚本
0-59/10 * * * * /usr/sbin/ntpdate localhost
9、Zookeeper
10、HDFS HA -->高可用性
NameNode Active
NameNode Standby
核心:保证两个NameNode中的文件系统元数据同步 -->Shared Edits-->jornal node
时刻知道DataNode的BLock Report -->同时向两个NameNode发送报告
client通过Proxy代理来选择Namenode,通过Zookeeper实现自动故障转移
工作:1)Shared Edits
2)standby Namenode
3)proxy
4)两个Namenode的隔离性 -->同时只能有一个Namenode向client提供服务
使用sshfence的方式需要配置两个namenode的无密码登录
依赖于zookee来实现自动故障转移
a,将namenode从standby转换为active
选举
b.监控 -->ZKFC(failure Contronner):是Zookeeper的一个客户端
11、中高级特性
1)federation -->联盟,不用应用可以使用不同的namenode进行数据管理
多个namenode分别管理各自文件的元数据,数据都存储在所有的datanode上
2)Snapshots -->快照,只读的基于时间点的文件系统拷贝,只有元数据,没有数据的快照
3)集中式缓存管理 -->允许用户将一部分目录或文件房子缓存中
4)Distributed Copy -->集群间的数据拷贝 bin/hadoop distcp
不同版本间的Hadoop集群拷贝走hftp协议
12、YARN HA