大数据营销的特点(大数据分析在营销中的作用)
626
2022-05-29
目录
前言
一、使用http的方式访问hdfs
二、hdfs各组件及其作用
三、hdfs中的数据块(Block)
四、java api 操作hdfs
五、java 开发 hdfs 应用时注意的事项
六、DataNode心跳机制的作用
七、NameNode中EditsLog 和FSImage 的作用
八、SecondaryNameNode 帮助NameNode 减负
九、NameNode 如何扩展?
十、创建文件的快照(备份)命令
十一、平衡数据
十二、safemode 安全模式
前言
时隔一年多,忙忙碌碌一直在做java web端的业务开发,大数据基本忘的差不多了,此次出一个大数据系列教程博文将其捡起。
hadoop,hdfs的下载安装以及启动,停止在这里就不一一介绍了,不会的可以查看我的历史博客。
默认我们已经搭建好了一个三节点的主从hadoop节点,一个master,两个salve
一、使用http的方式访问hdfs
在hdfs-site.xml中增加如下配置,然后重启hdfs:
使用http访问:
查询user/hadoop-twq/cmd 文件系统中的error.txt文件
http://master:50070/webhdfs/v1/user/hadoop-twq/cmd/error.txt?op=LISTSTATUS
http://master:50070/webhdfs/v1/user/hadoop-twq/cmd/error.txt?op=OPEN
支持的op见:
http://hadoop.apache.org/docs/r2.7.5/hadoop-project-dist/hadoop-hdfs/WebHDFS.html
二、hdfs各组件及其作用
三、hdfs中的数据块(Block)
数据块的默认大小:128M
设置数据块的大小为:256M = 256*1024*1024
在${HADOOP_HOME}/ect/hadoop/hdfs-site.xml增加配置:
数据块的默认备份数是3
设置数据块的备份数
对指定的文件设置备份数
hadoop fs -setrep 2 /user/hadoop-twq/cmd/big_file.txt
全局文件备份数是直接在hdfs-site进行设置:
数据块都是存储在每一个datanode 所在的机器本地磁盘文件中
四、java api 操作hdfs
使用javaapi 写数据到文件
package com.dzx.hadoopdemo;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.nio.charset.StandardCharsets;
/**
* @author duanzhaoxu
* @ClassName:
* @Description:
* @date 2020年12月17日 17:35:37
*/
public class hdfs {
public static void main(String[] args) throws Exception {
String content = "this is a example";
String dest = "hdfs://master:9999/user/hadoop-twq/cmd/java_writer.txt";
Configuration configuration = new Configuration();
FileSystem fileSystem = FileSystem.get(URI.create(dest), configuration);
FSDataOutputStream fsDataOutputStream = fileSystem.create(new Path(dest));
fsDataOutputStream.write(content.getBytes(StandardCharsets.UTF_8));
fsDataOutputStream.close();
}
}
使用java api 读取文件
package com.dzx.hadoopdemo;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URI;
/**
* @author duanzhaoxu
* @ClassName:
* @Description:
* @date 2020年12月17日 17:35:37
*/
public class hdfs {
public static void main(String[] args) throws Exception {
String dest = "hdfs://master:9999/user/hadoop-twq/cmd/java_writer.txt";
Configuration configuration = new Configuration();
FileSystem fileSystem = FileSystem.get(URI.create(dest), configuration);
FSDataInputStream fsDataInputStream = fileSystem.open(new Path(dest));
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(fsDataInputStream));
String line = null;
while (bufferedReader.readLine() != null) {
System.out.println(line);
}
fsDataInputStream.close();
bufferedReader.close();
}
}
使用java api 获取文件状态信息
package com.dzx.hadoopdemo;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.fs.permission.FsAction;
import org.apache.hadoop.fs.permission.FsPermission;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URI;
/**
* @author duanzhaoxu
* @ClassName:
* @Description:
* @date 2020年12月17日 17:35:37
*/
public class hdfs {
public static void main(String[] args) throws Exception {
//获取指定文件的文件状态信息
String dest = "hdfs://master:9999/user/hadoop-twq/cmd/java_writer.txt";
Configuration configuration = new Configuration();
FileSystem fileSystem = FileSystem.get(URI.create("hdfs://master:9999/"), configuration);
FileStatus fileStatus = fileSystem.getFileStatus(new Path(dest));
System.out.println(fileStatus.getPath());
System.out.println(fileStatus.getAccessTime());
System.out.println(fileStatus.getBlockSize());
System.out.println(fileStatus.getGroup());
System.out.println(fileStatus.getLen());
System.out.println(fileStatus.getModificationTime());
System.out.println(fileStatus.getOwner());
System.out.println(fileStatus.getPermission());
System.out.println(fileStatus.getReplication());
System.out.println(fileStatus.getSymlink());
//获取指定目录下的所有文件的文件状态信息
FileStatus[] fileStatuses = fileSystem.listStatus(new Path("hdfs://master:9999/user/hadoop-twq/cmd"));
for (FileStatus status : fileStatuses) {
System.out.println(status.getPath());
System.out.println(status.getAccessTime());
System.out.println(status.getBlockSize());
System.out.println(status.getGroup());
System.out.println(status.getLen());
System.out.println(status.getModificationTime());
System.out.println(status.getOwner());
System.out.println(status.getPermission());
System.out.println(status.getReplication());
System.out.println(status.getSymlink());
}
//创建目录
fileSystem.mkdirs(new Path("hdfs://master:9999/user/hadoop-twq/cmd/java"));
//创建目录并指定权限 rwx--x---
fileSystem.mkdirs(new Path("hdfs://master:9999/user/hadoop-twq/cmd/temp"), new FsPermission(FsAction.ALL, FsAction.EXECUTE, FsAction.NONE));
//删除指定文件
fileSystem.delete(new Path("hdfs://master:9999/user/hadoop-twq/cmd/java/1.txt"), false);
//删除指定目录
fileSystem.delete(new Path("hdfs://master:9999/user/hadoop-twq/cmd/java"), true);
}
}
五、java 开发 hdfs 应用时注意的事项
//需要把core-site.xml文件放到resources目录下,自动读取hdfs的ip端口配置
String dest = "user/hadoop-twq/cmd/java_writer.txt";
Configuration configuration = new Configuration();
FileSystem fileSystem = FileSystem.get(configuration);
FileStatus fileStatus = fileSystem.getFileStatus(new Path(dest));
六、DataNode心跳机制的作用
七、NameNode中EditsLog 和FSImage 的作用
八、SecondaryNameNode 帮助NameNode 减负
九、NameNode 如何扩展?
向主节点master的hdfs-site.xml 增加如下配置
查看 master节点的 clusterId
将hdfs-site.xml 从主节点master 拷贝到 slave1 和 slave2
形成三个节点的集群之后,我们使用java api 就不知道指定哪个 nameNode 的ip:端口了,所以我们需要进行viewFs配置
首先将core-site.xml 中的fs.defaultFS 配置项注释掉,然后添加如下配置
然后增加一个 mountTable.xml 文件( 元数据管理分布映射,相当于将namenode 管理的元数据分散到不同的namenode节点上)
然后将修改好的配置文件同步到 slave1 和 slave2 上,重启hdfs集群即可
重启之后在任意节点都可以使用通用的 请求方式,例如:
hadoop fs -ls viewfs:://my-cluster/
十、创建文件的快照(备份)命令
给指定的目录授权创建快照
hadoop dfsadmin -allowSnapshot /user/hadoop-twq/data
创建快照
hadoop fs -createSnapshot /user/hadoop-twq/data data-20180317-snapshot
查看创建的快照文件
hadoop fs -ls /user/hadoop-twq/data/.snapshot/data-20180317-snapshot
其他快照相关命令
十一、平衡数据
当我们对hdfs 集群进行扩展的时候,难免新扩展进来的节点,分配的数据量较少,这个时候为了能够均衡的分配数据,可以使用hdfs balancer命令
十二、safemode 安全模式
开启安全模式之后无法创建,删除目录和文件,只允许查看目录和文件
hadoop dfsadmin -safemode get
Safe mode is OFF
hadoop dfsadmin -safemode enter
Safe mode is ON
hadoop dfsadmin -safemode leave
Safe mode is ON
大数据 Hadoop
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。