通过FSDataOutputStream向HDFS上写数据
FSDataOutputStream,这个类重载了很多write方法,用于写入很多类型的数据:比如字节数组,long,int,char等等。
像FSDataInputStream一样,要获得FSDataOutputStream的实例,必须通过FileSystem该类来和HDFS建立连接,然后通过路径返回FSDataOutputStream实例。
FileSystem返回FSDataOutputStream实例的方法有两组
1.create(Path p)函数,创建一个空文件,然后可以向该文件顺序写入
2.append(Path p)函数,打开一个已有文件,并最做文件末尾追加数据
FileSystemUtil
public class FileSystemUtil {
private static FileSystem fileSystem;
//代码中Kerberos认证根据自己环境替换即可
public synchronized static FileSystem getFileSystem() throws IOException{
if(fileSystem==null){
Configuration conf=new Configuration();
conf.set("fs.defaultFS", "hdfs://host12.master.cluster.enn.cn:8020");
conf.set("dfs.client.block.write.replace-datanode-on-failure.policy" ,"NEVER" );
conf.set("dfs.client.block.write.replace-datanode-on-failure.enable" ,"true" );
KerberosClient.login(Constants.Kerberos_USER_NAME, Constants.Kerberos_KEYTAB_FILE);
fileSystem=FileSystem.get(conf);
}
return fileSystem;
}
public synchronized static void shutdown(){
if(fileSystem!=null){
try {
fileSystem.close();
fileSystem=null;
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) throws Exception {
System.out.println(FileSystemUtil.getFileSystem());
}
}
FSDataOutputStreamTest
public class FSDataOutputStreamTest{
private static final Logger LOGGER = LoggerFactory.getLogger(Test.class);
private static void hfdsAppendData() {
String filePath = "/user/hive/warehouse/test.db/t_test/day=2017-11-29/hour=16/backup_ycgqh";
FileSystem fileSystem = null;
FSDataOutputStream fileOutputStream = null;
Path hdfsPath = new Path(filePath);
try {
fileSystem=FileSystemUtil.getFileSystem();
if (!fileSystem.exists(hdfsPath)) {
fileOutputStream = fileSystem.create(hdfsPath,false);
}else{
fileOutputStream = fileSystem.append(hdfsPath);
}
fileOutputStream.writeUTF("");
} catch (IOException e) {
e.printStackTrace();
}finally {
if(fileOutputStream!=null){
try {
fileOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
FileSystemUtil.shutdown();
}
}
}
}
通过FSDataOutputStream向HDFS上写数据的更多相关文章
- HDFS的写数据过程分析
HDFS的写数据过程分析 我们通过FileSystem类可以操控HDFS, 那我们就从这里开始分析写数据到HDFS的过程. 在我们向 HDFS 写文件的时候,调用的是 FileSystem.creat ...
- USB系列之四:向U盘上写数据
在<USB系列之三>中,我们实现了一系列的SCSI命令,在这个系列中,我们要实现向U盘上写扇区的命令,所以,本文相对比较容易,更多地是给出一个实现的源程序. 在<USB系列之三> ...
- Linux启动kettle及linux和windows中kettle往hdfs中写数据(3)
在xmanager中的xshell运行进入图形化界面 sh spoon.sh 新建一个job
- HDFS 读/写数据流程
1. HDFS 写数据流程 客户端通过 Distributed FileSystem 模块向 NameNode 请求上传文件, NameNode 检查目标文件是否已存在,父目录是否存在: NameNo ...
- HDFS源码解析:教你用HDFS客户端写数据
摘要:终于开始了这个很感兴趣但是一直觉得困难重重的源码解析工作,也算是一个好的开端. 本文分享自华为云社区<hdfs源码解析之客户端写数据>,作者: dayu_dls. 在我们客户端写数据 ...
- hbase 从hdfs上读取数据到hbase中
<dependencies> <dependency> <groupId>org.apache.hbase</groupId> <artifact ...
- HDFS数据流——写数据流程
剖析HDFS文件写入 假设文件ss.avi共200m,其写入HDFS指定路径/user/atguigu/ss.avi流程如下: 1)客户端向namenode请求上传文件到指定路径,namenode通过 ...
- 把HDFS上的数据导入到Hive中
1. 首先下载测试数据,数据也可以创建 http://files.grouplens.org/datasets/movielens/ml-latest-small.zip 2. 数据类型与字段名称 m ...
- 在standalone模式下运行yarn 0.9.0对HDFS上的数据进行计算
1.通读http://spark.incubator.apache.org/docs/latest/spark-standalone.html 2.在每台机器上将spark安装到/opt/spark ...
随机推荐
- 我用过的gitlab api
1.新增tag https://docs.gitlab.com/ee/api/tags.html#list-project-repository-tags 2.获取指定项目合分支的最新一次merge ...
- jenkins git项目clean before checkout 和 wipe out repository & force clone
clean before checkout:会先执行一遍git clone,删除一些untracked文件和目录,比如删除上一次打包编译产生的文件 wipe out repository & ...
- css将两个元素水平对齐,兼容IE8
css实现元素水平对齐 css实现水平对齐,如图 有人会说css实现这种水平对齐要兼容ie8还不简单吗?使用float: left,或者display: inline-block,不就可以了吗?是的, ...
- php-fpm参数优化
php-fpm参数优化 2013-11-18 Posted by yeho php-fpm进程设置多少合适,设成动态还是静态? <lnmp一键安装包>中会根据你服务器内存调整php-fpm ...
- 【bzoj4552】【Tjoi2016&Heoi2016】【NOIP2016模拟7.12】排序
题目 在2016年,佳媛姐姐喜欢上了数字序列.因而他经常研究关于序列的一些奇奇怪怪的问题,现在他在研究一个难题,需要你来帮助他.这个难题是这样子的:给出一个1到n的全排列,现在对这个全排列序列进行m次 ...
- JavaScript输出
JavaScript不提供任何的内建或是打印方式 JavaScript的显示方案主要有以下四种: window.alert() 写入警告框 document.write() 写入 HTML 输出 ...
- javascript中面向对象的两种构建方式(构造函数)和(原型模式的区别)
1.构造函数模式--->alert的结果为false <!DOCTYPE html> <html lang="en"> <head> &l ...
- IDEA插件之自动查找bug工具
打开idea 插件搜索界面 输入 FindBugs-IDEA,安装完成后重启,选中要查找的包,右键找到对应的 FindBugs就可以开始进行自动扫描了
- [BZOJ2244]:拦截导弹(DP+CDQ分治+树状数组)
题目传送门 题目描述 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度.并且能够拦截任意速度的导弹,但是以后每一发炮弹都不能高于 ...
- Uncaught TypeError: Cannot read property 'length' of null错误怎么处理?
Uncaught TypeError: Cannot read property 'length' of null 错误怎么处理? 1.可能是返回的datagrid数据格式有问题,比如{"t ...