Skip to main content

moregeek program

大数据笔记(五):HDFS权限和Java的api使用-多极客编程

HDFS权限和 Java的api使用

前言

博主语录:一文精讲一个知识点,多了你记不住,一句废话都没有

经典语录:别在生活里找你想要的,要去感受生活里发生的东西

一、HDFS的权限

1、启蒙案例

Permission    Owner    Group        Size    Replication    Block Size    Name

drwxr-xr-x      root    supergroup    0 B    0        0 B        user

-rw-r--r--         root    supergroup    8.61 KB    2        128 MB        install.log

2、基本特征

  • HDFS是一个文件系统
  • 类似unix、linux有用户概念
  • HDFS有相关命令和接口去创建用户
  • 有超级用户的概念

        linux系统中超级用户:root

        hdfs系统中超级用户: 是namenode进程的启动用户

  • 有权限概念

        hdfs的权限是自己控制的来自于hdfs的超级用户

3、实操

注意:一般在企业中不会用root做什么事情

面向操作系统        

root是管理员  其他用户都叫【普通用户】

面向操作系统的软件    

谁启动,管理这个进程,那么这个用户叫做这个软件的管理员

实操案例

切换我们用root搭建的HDFS

用god这个用户来启动

重复操作node01~node04:

sh stop-dfs.sh

3.1、添加用户:root

useradd god
passwd god

3.2、将资源与用户绑定

chown -R god  src
chown -R god /opt/bigdata/hadoop-2.6.5
chown -R god /var/bigdata/hadoop

3.3、切换到god去启动  

sh start-dfs.sh

为了拿到.ssh

ssh localhost

给god做免密

注意:我们是HA模式:免密的2中场景都要做的

# node01~node02:
cd /home/god/.ssh
ssh-keygen -t dsa -P '' -f ./id_dsa

# node01:
ssh-copy-id -i id_dsa node01
ssh-copy-id -i id_dsa node02
ssh-copy-id -i id_dsa node03
ssh-copy-id -i id_dsa node04

# node02
cd /home/god/.ssh
ssh-copy-id -i id_dsa node01
ssh-copy-id -i id_dsa node02


修改hdfs-site.xml

<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/god/.ssh/id_dsa</value>
</property>

 分发给node02~04

3.4、使用god用户重启HDFS

sh start-dfs.sh

4、用户权限验证实操

在node01执行操作

su god
hdfs dfs -mkdir /temp
hdfs dfs -chown god:ooxx /temp
hdfs dfs -chmod 770 /temp

在node04执行操作

useradd good
groupadd ooxx
usermod -a -G ooxx good
id good
su good
hdfs dfs -mkdir /temp/abc # 失败
hdfs groups

大数据笔记(五):HDFS权限和Java的api使用_hadoop

大数据笔记(五):HDFS权限和Java的api使用_java_02


用户good操作失败因为hdfs已经启动了,不知道你操作系统又偷偷摸摸创建了用户和组

成功操作命令

useradd good
groupadd ooxx
usermod -a -G ooxx good
su god
hdfs dfsadmin -refreshUserToGroupsMappings

注意需要在namenode的节点执行,其他节点是无效的 

大数据笔记(五):HDFS权限和Java的api使用_大数据_03

执行上面命令就可以刷新用户权限

大数据笔记(五):HDFS权限和Java的api使用_hdfs_04

结论:默认hdfs依赖操作系统上的用户和组

二、hdfs中Java的api使用

windows idea eclips  叫什么?

集成开发环境

语义:

开发hdfs的client

权限:

1)参考系统登录用户名;

2)参考环境变量;

3)代码中给出;

 HADOOP_USER_NAME  god

这一步操作优先再启动idea

大数据笔记(五):HDFS权限和Java的api使用_big data_05



JDK版本:

集群和开发环境jdk版本一致

maven:

构建工具  

文件操作代码

package com.lanson.bigdata.hadoop.hdfs;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;
import org.apache.hadoop.io.IOUtils;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.net.URI;

public class TestHDFS {

public Configuration conf = null;
public FileSystem fs = null;

//C/S
@Before
public void conn() throws Exception {
conf = new Configuration(true);//true
// fs = FileSystem.get(conf);
// <property>
// <name>fs.defaultFS</name>
// <value>hdfs://mycluster</value>
// </property>
//去环境变量 HADOOP_USER_NAME god
fs = FileSystem.get(URI.create("hdfs://mycluster/"),conf,"god");
}

@Test
public void mkdir() throws Exception {

Path dir = new Path("/lanson01");
if(fs.exists(dir)){
fs.delete(dir,true);
}
fs.mkdirs(dir);

}

@Test
public void upload() throws Exception {

BufferedInputStream input = new BufferedInputStream(new FileInputStream(new File("./data/hello.txt")));
Path outfile = new Path("/lanson/out.txt");
FSDataOutputStream output = fs.create(outfile);

IOUtils.copyBytes(input,output,conf,true);
}

@Test
public void blocks() throws Exception {

Path file = new Path("/user/god/data.txt");
FileStatus fss = fs.getFileStatus(file);
BlockLocation[] blks = fs.getFileBlockLocations(fss, 0, fss.getLen());
for (BlockLocation b : blks) {
System.out.println(b);
}
// 0, 1048576, node04,node02 A
// 1048576, 540319, node04,node03 B
//计算向数据移动~!
//其实用户和程序读取的是文件这个级别~!并不知道有块的概念~!
FSDataInputStream in = fs.open(file); //面向文件打开的输入流 无论怎么读都是从文件开始读起~!

// blk01: he
// blk02: llo lanson 66231

in.seek(1048576);
//计算向数据移动后,期望的是分治,只读取自己关心(通过seek实现),同时,具备距离的概念(优先和本地的DN获取数据--框架的默认机制)
System.out.println((char)in.readByte());
System.out.println((char)in.readByte());
System.out.println((char)in.readByte());
System.out.println((char)in.readByte());
System.out.println((char)in.readByte());
System.out.println((char)in.readByte());
System.out.println((char)in.readByte());
System.out.println((char)in.readByte());
System.out.println((char)in.readByte());
System.out.println((char)in.readByte());
System.out.println((char)in.readByte());
System.out.println((char)in.readByte());
}




@After
public void close() throws Exception {
fs.close();
}

}


©著作权归作者所有:来自51CTO博客作者Lansonli的原创作品,请联系作者获取转载授权,否则将追究法律责任
大数据笔记(五):HDFS权限和Java的api使用
https://blog.51cto.com/lansonli/5328521

怎么PS身份证地址号码和水印-多极客编程

PS修图要活学活用,不能依葫芦画瓢,根据不同的图片进行不同的处理方式!这个不能操之过急,也要有个时间的积累,做的越久经验就会越丰富,水平就越好。有时候我们在玩虚拟游戏的时候负责发放游戏身份卡的负责人不在,自己又等着急用,等着搬房子入会怎么办?这个是时候我们就可以采用PS技术对其进行P图修改。我们拿这张身份卡举例测试一下。怎么去P地址号码还有水印呢?我们先看地址部分,这个时候我们可以发现这个是有复杂

【存储数据恢复】服务器存储由于多次断电导致raid5阵列崩溃的数据恢复案例-多极客编程

存储raid故障:本案例数据存储中储存的是公司内部文件和机 密信息。存储上的6块硬盘组成raid5。存储在运行过程中突然崩溃,管理员强制重启后无法找到存储设备,多次重启也是如此。于是管理员联系我们数据恢复中心进行存储层面的数据恢复。数据恢复故障分析:经过我们数据恢复中心的硬件工程师检测和分析,初步判断这台存储的故障是raid模块损坏。一般像raid信息丢失或raid模块硬件损坏这类故障情况大多是由

上证上市数据可视化分析-清林会员@娇大侠 的学习笔记2-多极客编程

继续用清林情报分析师软件工具研究数据,这次从网站上下载了一份上证上市公司数据,希望利用工具分析出目前全国各地上市公司的分布情况,时间趋势等,通过数据分析出全国各地经济发展的大致情况。导入数据到清林情报分析师软件新建一个项目,用于本次数据分析,命名为“上市公司数据分析”。在该项目下,导入数据,创建本次数据的新模板,命名为“上市数据分析”,设置字段,保存模板后,导入数据。导入结果如图:查看导入的数据,

IT运维系统-服务建模从业务角度来管理IT-多极客编程

在对资源、服务和日志进行监控之后,我们能够收集企业范围内所有事件,帮助运维人员了解什么地方发生了什么事情。而基于规则的事件处理引擎则通过对事件进行过滤、压制和关联分析,极大减少了运维人员需要直接面对的事件数量,提高了运维工作效率和质量。但由于缺乏将业务服务与IT关联起来的能力,使运维基本还停留在以资源为中心的状况,运维人员在IT资源出现问题时无法确定问题对业务的影响,而在用户报告业务问题时又不能很

【electron学习笔记】如何在electron集成截屏功能?-多极客编程

背景前段时间一直在做一款 electron 的 IM 聊天应用,其中需要实现 “截屏并发送截屏文件” 的功能。因此,翻阅了资料并且进行了对比研究,发现有两种可以实现的方案,下面来给大家介绍一下。一、electron 自带的API:desktopCapture这种方法是最简单易用的,但由于 electron 是自带的,对其要求不能太高,只能单纯地把整个屏幕截图返回,而且可能会有一些卡顿。范例代码如下

主管发话:一周搞不定用友U8 ERP跨业务数据分析,明天就可以“毕业”了-多极客编程

随着月末来临,又到了汇报总结的时刻。 (图片来自网络) 到了这个特殊时期,你的老板就一定想要查看企业整体的运转情况、销售业绩、客户实况分析、客户活跃度、Top10 sales、 产品情况、订单处理情况等信息。 对业务有一定了解的同学就会明白,整理出这些内容需要跨业务、跨功能模块,对数据进行整合。 而每次当领导下达数据分析的任务时,还是会让本U8老用户略微头疼 你可能想说,U8的业务处理功能那么完

开发一个不需要重写成Hive QL的大数据SQL引擎-多极客编程

摘要:开发一款能支持标准数据库SQL的大数据仓库引擎,让那些在Oracle上运行良好的SQL可以直接运行在Hadoop上,而不需要重写成Hive QL。本文分享自华为云社区《​​​​​​​​​​​​​​​从零开发大数据SQL引擎​​》,作者:JavaEdge 。学习大数据技术的核心原理,掌握一些高效的思考和思维方式,构建自己的技术知识体系。明白了原理,有时甚至不需要学习,顺着原理就可以推导出各种实

Spark性能优化案例-多极客编程

主流大数据技术都是开源的:Hadoop大数据存储与计算产品Hive、Spark SQL大数据仓库Storm、Flink这样的大数据流计算产品Mahout、MLlib大数据机器学习算法库如何参与Apache软件开发,如何进行软件性能优化及Spark源码优化:更深入、系统地了解软件性能优化更深入了解Spark的一些运行机制,同时也可以了解Apache开源社区的运作模式。因为我们在使用各类大数据产品的时

kettle庖丁解牛第25篇之插入更新-多极客编程

引言在上一篇文章中,我们主要讲解的是:更新组件的各种详细设置,最后实战演示了,从excel文件中读取数据,然后通过更新组件,对mysql库表中的数据进行更新操作。在本篇文章中,我们接着介绍:kettle中的插入更新组件。转换转换(transaformation)是ETL解决方案中最主要的部分,它处理抽取、转换、加载各种对数据行的操作。创建转换我们要做的ETL操作,全是在转换中设计的,所以我们要先创

Hive跨集群和版本迁移-多极客编程

公司重新搭建CDH6.3.0,并把旧集群Hive1.1迁移新集群Hive2.1,记录一下过程。一. 迁移Hive数据和MySQL中的matastore通过DistCp拷贝Hive数据到新集群,并从MySQL中导出Hive的元数据上传到新集群,最后在新集群MySQL中导入Hive元数据,并更新Hive版本,修改信息。1. 迁移Hive数据和MySQL中的matastore版本差异大,使用htfpha

基于Spark+Grafana可视化电商项目实战,好文收藏~-多极客编程

大家好,我是老兵。本系列为大数据项目实战系列,每期内容将讲解​​项目背景​​​、​​技术架构​​​和核心​​代码​​部分,帮助相关小伙伴快速了解大数据项目与技术。在上期的基于Spark GraphFrame社交网络实战项目中,介绍了Spark图计算与社交关系图谱,文章反响很好。​本期将继续介绍基于Spark和Grafana的​​电商零售分析​​项目,在文末附有电商数据集下载地址,欢迎大家自行领取。

主管发话:一周搞不定用友U8 ERP跨业务数据分析,明天就可以“毕业”了-多极客编程

随着月末来临,又到了汇报总结的时刻。 (图片来自网络) 到了这个特殊时期,你的老板就一定想要查看企业整体的运转情况、销售业绩、客户实况分析、客户活跃度、Top10 sales、 产品情况、订单处理情况等信息。 对业务有一定了解的同学就会明白,整理出这些内容需要跨业务、跨功能模块,对数据进行整合。 而每次当领导下达数据分析的任务时,还是会让本U8老用户略微头疼 你可能想说,U8的业务处理功能那么完