栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > PHP

常用的HDFS操作

PHP 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

常用的HDFS操作

常用HDFS操作

进入hadoop目录

cd /usr/local/hadoop

然后启动hadoop服务

./sbin/start-all.sh

进入集群根目录

hadoop dfs -ls /

创建两个文本文件

echo "hello world" >> test_local.txt
echo "hello hadoop" >> test_put.txt

创建用户工作目录

hadoop fs -mkdir -p /user/hadoop
echo $?     //检查上一条指令的执行状态,若为0则代表执行成功并退出,若为1则代表执行失败

上传文件到HDFS系统

hadoop fs -put test_put.txt
//将test_put文件上传到集群中

向HDFS中上传任意文本文件,如果指定的文件在HDFS中已经存在,由用户指定是追加到原有文件末尾还是覆盖原有的文件先移动到hadoop文件夹

追加到原有文件末尾

hadoop fs -appendToFile test_local.txt test_put.txt
//将test_local.txt的内容追加到test_put.txt文件里去

将本地文件拷贝至HDFS系统

hadoop fs -copyFromLocal local.txt test.txt
//只能将本地文件内容拷贝至集群中的test.txt(文件不可以存在,没有会自动创建)
hadoop fs -copyFromLocal local.txt
//将本地文件local.txt的内容拷贝至集群中,若有相同文件名则拷贝失败

强制覆盖文件

hadoop fs -put -f local.txt(本地的文件) local.txt(HDFS的文件)

查看集群中文件内容

hadoop fs -cat test_put.txt

从HDFS中下载指定文件,如果本地文件与要下载的文件名称相同,则自动对下载的文件重命名

若本地文件中没有local.txt文件可以直接拷贝

hadoop fs -get local.txt
hadoop fs -copyToLocal local.txt

若本地文件中存在local.txt需要创建local_1.txt文件

hadoop fs -copyToLocal local.txt local_1.txt

将HDFS中指定文件的内容输出到终端中

hadoop fs -cat local.txt

显示HDFS中指定的文件的读写权限、大小、创建时间、路径等信息

hadoop fs -ls local.txt

给定HDFS中某一个目录,输出该目录下的所有文件的读写权限、大小、创建时间、路径等信息,如果该文件是目录,则递归输出该目录下所有文件相关信息

hadoop fs -ls -R -h . 
//查看当前目录下的文件

提供一个HDFS内的文件的路径,对该文件进行创建和删除操作。如果文件所在目录不存在,则自动创建目录

hadoop fs -rm ./put.txt
hadoop fs -mkdir ./test
hadoop fs -mkdir ./test/test.txt

提供一个HDFS的目录的路径,对该目录进行创建和删除操作。创建目录时,如果目录文件所在目录不存在则自动创建相应目录;删除目录时,由用户指定当该目录不为空时是否还删除该目录

hadoop fs -mkdir -p /test_2/test_3
//递归创建文件夹
hadoop fs -rm /test_2
//删除文件夹
hadoop fs -rm -r /test_2/test_3 
//递归删文件夹

向HDFS中指定的文件追加内容,由用户指定内容追加到原有文件的开头或结尾

hadoop fs -appendToFile append.txt /test1.txt //向结尾追加
//向开头追加
hadoop fs -get /test1.txt
cat test1.txt >> append.txt
hadoop fs -put -f append.txt /test1.txt

删除HDFS中指定的文件

hadoop fs -rm /test1.txt

删除HDFS中指定的目录,由用户指定目录中如果存在文件时是否删除目录

hdfs dfs -mkdir -p /dir

在HDFS中,将文件从源路径移动到目的路径

hadoop fs -mv /test1.txt /test2.txt

编程实现一个类“MyFSDataInputStream”,该类继承“org.apache.hadoop.fs.FSDataInputStream”,要求如下:实现按行读取HDFS中指定文件的方法“readLine()”,如果读到文件末尾,则返回空,否则返回文件一行的文本

package hadoop.apache.prg.example;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;
import org.apache.hadoop.io.IOUtils;
import org.apache.hadoop.util.Progressable;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
 
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URI;

public class MyFSDataInputStream {
	private FileSystem fileSystem = null;
    //配置文件
    private Configuration configuration = null;
    //虚拟机的HDFS的访问URI
    private static final String HDFS_URI = "hdfs://localhost:9000";
    public static void main(String args[]){
    	MyFSDataInputStream ms = new MyFSDataInputStream();
    	try{
    		ms.setUp();
    		ms.cat_test();
    		ms.clearTail();
    	}catch(Exception e){
    		System.out.println(e.toString());
    	}
    }
	//编程实现一个类“MyFSDataInputStream”,该类继承“org.apache.hadoop.fs.FSDataInputStream”,
    //要求如下:实现按行读取HDFS中指定文件的方法“readLine()”,如果读到文件末尾,则返回空,否则返回文件一行的文本。
    public void cat_test() throws Exception {
    	FSDataInputStream fin = fileSystem.open(new Path("/hdfs_test/hello.txt"));    
        //此路径为集群上的路径,不是本地路径
    	BufferedReader in = new BufferedReader(new InputStreamReader(fin, "UTF-8"));
    	String s = in.readLine();
    	while(s!=null)//如果当前行不为空
    	{
    	System.out.println(s);//打印当前行
    	s= in.readLine();//读取下一行
    	}
    	in.close();
    	}
    //开始前操作--初始化资源
    
    public void setUp() throws Exception {
        System.out.println("=====================start========================");
        configuration = new Configuration();
        fileSystem = FileSystem.get(new URI(HDFS_URI), configuration, "hadoop");
    }
 //结束后操作--释放资源
    
    public void clearTail() throws Exception {
        configuration = null;
        fileSystem = null;
        System.out.println("=====================end========================");
    }

}

查看Java帮助手册或其它资料,用“java.net.URL”和“org.apache.hadoop.fs.FsURLStreamHandlerFactory”编程完成输出HDFS中指定文件的文本到终端中

package hadoop.apache.prg.example;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.FsUrlStreamHandlerFactory;
import org.apache.hadoop.fs.Path;
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import org.apache.hadoop.fs.*;
import org.apache.hadoop.io.IOUtils;
public class ShowTheContent {
static {
	URL.setURLStreamHandlerFactory(new FsUrlStreamHandlerFactory());
}
public static void cat(String remoteFilePath) {
try (InputStream in = new URL("hdfs", "localhost", 9000, remoteFilePath).openStream()) {
	IOUtils.copyBytes(in, System.out, 4096, false);
	IOUtils.closeStream(in);
	} catch (IOException e) {
		e.printStackTrace();
	}
}
public static void main(String[] args) {
String remoteFilePath = "/hdfs_test/hello.txt"; // HDFS路径
try {
System.out.println("读取文件: " + remoteFilePath);
ShowTheContent.cat(remoteFilePath);
System.out.println("n读取完成");
} catch (Exception e) {
e.printStackTrace();
		}
	}
}

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/268834.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号