hadoop|hadoop hdfs
hdfs常用命令参数介绍
- hadoop fs -ls / 显示文件
- 【hadoop|hadoop hdfs】hadoop fs -mkdir -p /aaa/bbb/cc/dd 在hdfs上创建目录
- hadoop fs - moveFromLocal /home/hadoop/a.txt /aaa/bbb/cc/dd 从本地剪切粘贴到hdfs
- hadoop fs - moveToLocal /aaa/bbb/cc/dd /home/hadoop/a.txt 从hdfs剪切粘贴到本地
- Hadoop fs -appendToFile ./hello.txt /hello.txt 追加一个文件到已经存在的文件末尾
- hadoop fs -cat /hello.txt 显示文件内容
- hadoop fs -tail /weblog/access_log.1 显示文件末尾
- hadoop fs -text /weblog/access_log.1 以字符形式打印一个文件的内容
- chgrp chmod chown
功能:linux文件系统中的用法一样,对文件所属权限
示例:
hadoopfs-chmod666/hello.txt
hadoopfs-chownsomeuser:somegrp/hello.txt
- hadoop fs -copyFromLocal ./jdk.tar.gz /aaa/ 从本地文件系统中拷贝文件到hdfs路径去
- hadoop fs -copyToLocal /aaa/jdk.tar.gz 从hdfs拷贝到本地
- hadoop fs -cp /aaa/jdk.tar.gz /bbb/jdk.tar.gz.2 从hdfs的一个路径拷贝hdfs的另一个路径
- hadoop fs -mv /aaa/jdk.tar.gz / 在hdfs目录中移动文件
- hadoop fs -get /aaa/jdk.tar.gz 等同于copyToLocal,就是从hdfs下载文件到本地
- hadoop fs -getmerge /aaa/log.* ./log.sum 合并下载多个文件
- hadoop fs -put /aaa/jdk.tar.gz /bbb/jdk.tar.gz.2 等同于copyFromLocal
- hadoop fs -rm -r /aaa/bbb/ 删除文件或文件夹
- hadoop fs -rmdir /aaa/bbb/ccc 删除空目录
- hadoop fs -df -h / 统计文件系统的可用空间信息
- hadoop fs -du -s -h /aaa/* 统计文件夹的大小信息
- hadoop fs -count /aaa/ 统计一个指定目录下的文件节点数
- hadoop fs -setrep 3 /aaa/jdk.tar.gz
- 搭建开发环境
org.apache.hadoop hadoop-client2.6.1
- window下开发的说明
建议在linux下进行hadoop应用的开发,不会存在兼容性问题。如在window上做客户端应用开发,需要设置以下环境: A、在windows的某个目录下解压一个hadoop的安装包 B、将安装包下的lib和bin目录用对应windows版本平台编译的本地库替换 C、在window系统中配置HADOOP_HOME指向你解压的安装包 D、在windows系统的path变量中加入hadoop的bin目录
- java api hdfs 增删改
在java中操作hdfs,首先要获得一个客户端实例
Configuration conf = new Configuration()
FileSystem fs = FileSystem.get(conf)
public class HdfsClient {FileSystem fs = null;
@Before
public void init() throws Exception {// 构造一个配置参数对象,设置一个参数:我们要访问的hdfs的URI
// 从而FileSystem.get()方法就知道应该是去构造一个访问hdfs文件系统的客户端,以及hdfs的访问地址
// new Configuration();
的时候,它就会去加载jar包中的hdfs-default.xml
// 然后再加载classpath下的hdfs-site.xml
Configuration conf = new Configuration();
conf.set("fs.defaultFS", "hdfs://hdp-node01:9000");
/**
* 参数优先级: 1、客户端代码中设置的值 2、classpath下的用户自定义配置文件 3、然后是服务器的默认配置
*/
conf.set("dfs.replication", "3");
// 获取一个hdfs的访问客户端,根据参数,这个实例应该是DistributedFileSystem的实例
// fs = FileSystem.get(conf);
// 如果这样去获取,那conf里面就可以不要配"fs.defaultFS"参数,而且,这个客户端的身份标识已经是hadoop用户
fs = FileSystem.get(new URI("hdfs://hdp-node01:9000"), conf, "hadoop");
}/**
* 往hdfs上传文件
*
* @throws Exception
*/
@Test
public void testAddFileToHdfs() throws Exception {// 要上传的文件所在的本地路径
Path src = https://www.it610.com/article/new Path("g:/redis-recommend.zip");
// 要上传到hdfs的目标路径
Path dst = new Path("/aaa");
fs.copyFromLocalFile(src, dst);
fs.close();
}/**
* 从hdfs中复制文件到本地文件系统
*
* @throws IOException
* @throws IllegalArgumentException
*/
@Test
public void testDownloadFileToLocal() throws IllegalArgumentException, IOException {
fs.copyToLocalFile(new Path("/jdk-7u65-linux-i586.tar.gz"), new Path("d:/"));
fs.close();
}@Test
public void testMkdirAndDeleteAndRename() throws IllegalArgumentException, IOException {// 创建目录
fs.mkdirs(new Path("/a1/b1/c1"));
// 删除文件夹 ,如果是非空文件夹,参数2必须给值true
fs.delete(new Path("/aaa"), true);
// 重命名文件或文件夹
fs.rename(new Path("/a1"), new Path("/a2"));
}/**
* 查看目录信息,只显示文件
*
* @throws IOException
* @throws IllegalArgumentException
* @throws FileNotFoundException
*/
@Test
public void testListFiles() throws FileNotFoundException, IllegalArgumentException, IOException {// 思考:为什么返回迭代器,而不是List之类的容器
RemoteIterator listFiles = fs.listFiles(new Path("/"), true);
while (listFiles.hasNext()) {
LocatedFileStatus fileStatus = listFiles.next();
System.out.println(fileStatus.getPath().getName());
System.out.println(fileStatus.getBlockSize());
System.out.println(fileStatus.getPermission());
System.out.println(fileStatus.getLen());
BlockLocation[] blockLocations = fileStatus.getBlockLocations();
for (BlockLocation bl : blockLocations) {
System.out.println("block-length:" + bl.getLength() + "--" + "block-offset:" + bl.getOffset());
String[] hosts = bl.getHosts();
for (String host : hosts) {
System.out.println(host);
}
}
System.out.println("--------------为angelababy打印的分割线--------------");
}
}/**
* 查看文件及文件夹信息
*
* @throws IOException
* @throws IllegalArgumentException
* @throws FileNotFoundException
*/
@Test
public void testListAll() throws FileNotFoundException, IllegalArgumentException, IOException {FileStatus[] listStatus = fs.listStatus(new Path("/"));
String flag = "d--";
for (FileStatus fstatus : listStatus) {
if (fstatus.isFile())flag = "f--";
System.out.println(flag + fstatus.getPath().getName());
}
}
}
- 通过流的方式访问hdfs
/**
* 相对那些封装好的方法而言的更底层一些的操作方式
* 上层那些mapreducespark等运算框架,去hdfs中获取数据的时候,就是调的这种底层的api
* @author
*
*/
public class StreamAccess {FileSystem fs = null;
@Before
public void init() throws Exception {Configuration conf = new Configuration();
fs = FileSystem.get(new URI("hdfs://hdp-node01:9000"), conf, "hadoop");
}@Test
public void testDownLoadFileToLocal() throws IllegalArgumentException, IOException{//先获取一个文件的输入流----针对hdfs上的
FSDataInputStream in = fs.open(new Path("/jdk-7u65-linux-i586.tar.gz"));
//再构造一个文件的输出流----针对本地的
FileOutputStream out = new FileOutputStream(new File("c:/jdk.tar.gz"));
//再将输入流中数据传输到输出流
IOUtils.copyBytes(in, out, 4096);
}/**
* hdfs支持随机定位进行文件读取,而且可以方便地读取指定长度
* 用于上层分布式运算框架并发处理数据
* @throws IllegalArgumentException
* @throws IOException
*/
@Test
public void testRandomAccess() throws IllegalArgumentException, IOException{
//先获取一个文件的输入流----针对hdfs上的
FSDataInputStream in = fs.open(new Path("/iloveyou.txt"));
//可以将流的起始偏移量进行自定义
in.seek(22);
//再构造一个文件的输出流----针对本地的
FileOutputStream out = new FileOutputStream(new File("c:/iloveyou.line.2.txt"));
IOUtils.copyBytes(in,out,19L,true);
}/**
* 显示hdfs上文件的内容
* @throws IOException
* @throws IllegalArgumentException
*/
@Test
public void testCat() throws IllegalArgumentException, IOException{FSDataInputStream in = fs.open(new Path("/iloveyou.txt"));
IOUtils.copyBytes(in, System.out, 1024);
}
}
推荐阅读
- 【Hadoop踩雷】Mac下安装Hadoop3以及Java版本问题
- Hadoop|Hadoop MapReduce Job提交后的交互日志
- 安装ambari|安装ambari Hadoop--0(更新中...)
- #SQL|#SQL on Hadoop技术分析
- hadoop三个配置文件的参数含义说明(转)
- HDFS读写数据流
- 搭建大数据三节点(Hadoop、Hbase、Zookeeper、Kafka、Hive)环境(含配置文件参考)
- HDFS文件损坏解决方法
- 【Hadoop学起来】Linux配置$HADOOP_HOME/etc/hadoop/hadoop-env.sh时找不到JAVA_HOME?
- hadoop