hdfs ha 搭建 -2
------------------------------------------
在journalnode 节点上启动journalnode 进程
hadoop -daemon.sh start journalnode
启动完成jn 后,需要在disk 上完成 两个nn的元数据同步工作。
如果正在构建新的hdfs 集群,需要在一台namenode 上进行 format 操作
若已经格式化文件系统,或者在non-ha 集群之上,要启动ha 功能。
需要复制现有的nn 的目录(~/hadoop/dfs/name) 到 另一台nn 的相同目录下。
hdfs namenode -bootstrapstandby
该命令保证 jn 有足够多的edit 来启动 两个nn。
如果正在将 non-ha namenode 转换成 ha,
执行命令 hdfs namenode -initializesharededits
会从local 的namenode 编辑日志目录数据初始化到jns 中。
启动两个nn,通过webui 查看每个nn 的状态。
http://s100:50070/
http://s800:50070/
hdfs-site.xml
<!-- ha --> 配置
xcp.sh hdfs-site.xml
stop-dfs.sh
名称节点 namenode datanode 都不启动
1. ssh s100 hadoop -daemon.sh start journalnode
2. ssh s700 hadoop -daemon.sh start journalnode
3. ssh s800 hadoop -daemon.sh start journalnode
xcall.sh jps
cd ~/hadoop/
scp -r dfs ubuntu@s800:/home/ubuntu/hadoop/
ssh s100 hadoop-daemon.sh start namenode
xcall.sh jps
ssh s800 hdfs namenode -bootstrapstandnameby
hadoop-daemon.sh stop namenode
hdfs namenode -initializesharededits
ssh s100 hadoop-daemon.sh start namenode
ssh s800 hadoop-daemon.sh start namenode
ssh s100 hadoop-daemons.sh start datanode
xcall.sh jps
s100:50070
s800:50070
[管理ha 过程]
hdfs dfs admin
hdfs haadmin -transitionToactive nn1
hdfs 分析读过程
--------------------------------------------------
String file = "hdfs://s100:8020/user/ubuntu/hadoop-2.7.2.tar.gz";
Path path = new Path(file);
FSdataInputStream in = fs.open(path); //shuru 输入刘
in.read();
in.close();
ssh s100 hdfs haadmin -transitionToactive nn1
DistributedFileSystem
FSdataInputStream
DfsInputStream
HdfsdataInputStream
DFsclient
FileSystem fs = FileSystem.get(conf)
sync();
hflush();
rsync();
hadoop 第5天 hdfs 机架感知--自定义感知类。
------------------------------------------------------------------
编写一个脚本或者实现接口: org.apache.hadoop.net.dnstoswitchmapping
调用这个接口会返回一个路径,反映的是网络中的top 结构。
hdfs classpath
hadoop classpath
hostname
将自定义的机架感知类打成jar 包,分发到所有节点 ${hadoop_home}/share
public class mydnstoswitchmapping implements dnstoswitchmapping{
// 解析主机名 ip 地址,返回网络路径 /xx/xxx
resolve(List<String> names){
for(string hostname :names){
// 取出hostname 后面的编号
integer no = integer.parseint(hostname.substring(1))
if(no < 400){
rackpath = "/rack1/"+hostname;
}else{
rackpath = "/rack2/"+hostname;
}
list.add(rackpath)
}
return list;
}
reloadCacheMappings()
reloadCacheMappings(List<String> names)
)
将自定义的机架感知类打成jar包,分发到所有节点的${hadoop_home}/share
cp Myrackawareness.jar /soft/hadoop-2.72/share/hadoop/common/lib
配置自定义的类来机架感应 topology.node.switch.mapping.impl
修改 core-default.xml 里的属性
<property>
<name> topology.node.switch.mapping.impl</name>
<value> com.it18.Myrackawareness</value>
</property>
xcall.sh jps
hdfs haadmin -transitionToactive nn1
hdfs dfs -put demo.txt /user/ubuntu
hadoop distcp /user/ubuntu/data /user/ubuntu/new/
distcp
---------------------------------
通过hadoop mr 技术实现并行复制,递归复制文件夹,新能教高
,实现跨集群复制。
hadoop distcp hdfs://s100:8020/user/ubuntu/data hdfs://s800:8020/user/ubuntu/new
archieve 归档文件
java archive
hadoop archive
hadoop archive -archivename file.har /my/files /mycluster 归档
hadoop archive -archivename file.har -p /user/ubuntu/new /user/ubuntu
hadoop fs -lsr /
hadoop fs -lsr har://user/ubuntu/my/files.har
hdfs dfs -help get 下载
man gzip
gzip -l demo.txt
gunzip demo.txt.zip
deflatecodec 压缩类
deflatecodec codec = reflectionutils.newinstance(class,conf);
fileoutputstream fos =new fileoutputstream("d:/koala.txt");
compressionoutputstream comout = codec.createoutputstream(fos)
ioutils.copyBytes(new FileInputputStream("d:/koals.txt"),comout,buffsize)
压缩-lzo
--------------------------------------------------------------