第八课记录 HDFS基础

1、 Linux 文件信息

        [root@localhost hadoop]# hdfs dfs -ls /

        drwxr-xr-x   - root supergroup          0 2017-08-12 22:01 /a
        说明: d后面以3个字符为一组:


        d打头表示目录     当前用户     同组用户      其他人

                d                       rwx             r-x                 r-x 


2、Hadoop基于Java实现目录创建

package demo;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.junit.Test;

/**
 * 依赖的jar包导入进来
 * /root/training/hadoop-2.4.1/share/hadoop/common
 * /root/training/hadoop-2.4.1/share/hadoop/common/lib
 * 
 * /root/training/hadoop-2.4.1/share/hadoop/hdfs
 * /root/training/hadoop-2.4.1/share/hadoop/hdfs/lib
 * 
 * 操作HDFS,创建一个目录
 *   1、此时运行会报错: 权限问题: windows: java 用户: leveno  ---> 属于其他人
 * 
 * HDFS的权限: 功能非常弱
 *   1、记住一句话: 你说你是谁,你就是谁, HDFS不验证是不是真的.
 *         
 * 一共有4种方式改变我们的权限:
 *   1、System.setProperty("HADOOP_USER_NAME", "root");
 *   2、问题: 在Java程序中,接收命令行的参数有几种方式?
 *        (1) main 方法
 *        (2) -D 参数(重要)
 *   3、修改 hdfs-stie.xml 文件中的 dfs.permissions为false, 不进行权限验证.
 *   4、类型Linux的chmod 命令
 *        (1) hdfs dfs -chmod folder3 777
 * 
 * ---------------------------------------------------------------
 * 容易报的错误 ...... Name node is in safe mode..... 错误:
 *   原因: HDFS在启动的时候,首先进入安全模式, 如果在安全模式下,HDFS是只读的
 *       在Linux下执行:
 *       #hadoop dfsadmin -safemode get       看Hadoop的运行模式是怎样的
 *
 */
public class Demo1 {

	/**
	 * 执行此方法前,在Linux执行一下:
	 * #hdfs dfs -ls /                        看有没有folder1目录, 通过此命令进行验证
	 */
	@Test
	public void test1() throws Exception {
		// HDFS权限问题,设置一个环境变量: HADOOP_USER_NAME
		System.setProperty("HADOOP_USER_NAME", "root");
		
		// NameNode 管理员: 接收客户端的请求
		
		// 创建一个配置信息: NameNode的地址
		Configuration conf = new Configuration();
		conf.set("fs.defaultFS", "hdfs://192.168.73.132:9000");  // 基于code-site.xml的配置
		
		
		// 创建一个客户端,指向NameNode
		FileSystem client = FileSystem.get(conf);
		
		// 创建一个目录 
		client.mkdirs(new Path("/folder1"));
		
		client.close();
	}
	
}


Java 参数

package demo;

/**
 * DOS Run:
 *    1) javac MyDemo.java
 *    2) java -Dname=tom -Dage=23 MyDemo
 * @author tobin
 *
 */
public class MyDemo {
	
	public static void main(String[] args) {
		method1();
	}

	public static void method1() {
		// 在方法获取命令上的参数: name=tom  age=23
		// System.getProperty 获取命令行上的-D参数
		
		String name = System.getProperty("name");
		String age = System.getProperty("age");
		
		System.out.println(name + "\t" + age);
	}
}



3、Hadoop基于Java实现文件上传

package demo;

import java.io.FileInputStream;
import java.io.InputStream;
import java.io.OutputStream;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.junit.Test;

public class Demo2 {
	
	// 上传文件: hdfs dfs -put **** /目录下
	// 此方法的问题: 有没有一个简单的方式,实现上传与下载,不需要通过Java IO来实现, 通过 IOUtils 工具来实现
	@Test
	public void testUploadFile() throws Exception {
		// 创建一个配置信息: NameNode的地址
		Configuration conf = new Configuration();
		conf.set("fs.defaultFS", "hdfs://192.168.73.132:9000");  // 基于code-site.xml的配置
		
		// 创建一个客户端,指向NameNode
		FileSystem client = FileSystem.get(conf);
		
		// 上一个大于128M的文件
		// C:\Temp\AAA.mp4   350M左右
		
		// 创建一个输出流, 指向HDFS  (字节流)
		OutputStream out = client.create(new Path("/folder1/bbb.mp4"));
		
		// 创建一个输入流,从文件中读取    (字节流)
		InputStream in = new FileInputStream("C:\\Temp\\AAA.mp4");
		
		// 创建一个缓冲区
		byte[] buffer = new byte[1024];
		int len = 0;
		while ((len = in.read(buffer)) > 0) {
			// 读入了数据,直接写出
			out.write(buffer, 0, len); // 从0开始写, len的偏移量
		}
		
		out.flush();  // *
		out.close();
		in.close();
	}
	
}


// 最后执行完成后
//    1. 在Linux可以通过:
//          #hdfs dfs -ls /folder1 命令进行查询
//
//    2. 如果查看HADOOP的TMP格式化目录下的文件,进Linux的以下目录
//          #ls /root/training/hadoop-2.4.1/tmp/dfs
//          看到以下结果,由于当前环境是伪分布式环境,参看到以下3个目录 data表示 DataNode,  name表示NameNode,  namesecondary表示Secondary
//               drwx------. 3 root root 4096 Aug 29 15:33 data
//               drwxr-xr-x. 3 root root 4096 Aug 29 15:33 name
//               drwxr-xr-x. 3 root root 4096 Aug 29 15:33 namesecondary
//          #cd /root/training/hadoop-2.4.1/tmp/dfs/data/current/BP-504154172-127.0.0.1-1502513915069/current/finalized
//          直到进入以上目录,才能看到我们刚刚上传的blk打头的数据块文件(以128M大小的存储)
//				-rw-r--r--. 1 root root 134217728 Aug 29 16:51 blk_1073741828
//				-rw-r--r--. 1 root root   1048583 Aug 29 16:51 blk_1073741828_1004.meta
//				-rw-r--r--. 1 root root 134217728 Aug 29 16:51 blk_1073741829
//				-rw-r--r--. 1 root root   1048583 Aug 29 16:51 blk_1073741829_1005.meta
// 


4、Hadoop文件上传图


5、Hadoop文件下载图



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值