HDFS 文件和 Hive 权限问题

HDFS数据块损坏导致的Hive数据查询失败案例 hdfs块损坏导致hive执行查询、删除问题时报错。 问题1:hive中无法查询表中的数据信息,但是可以展示表结构等信息。 在hive中建立表,显示表信息均显示成功,部分信息如下: 展示表成功: show tables; 展示表属性成功: describe test; 插入表数据失败: insert into test values("hello"); 查询的时候也报错,报错信息如下所示: select* from test; 这可是真的奇怪,冷静下来想想,查看了最开始插入语句的错误信息,发现 阅读详情

目录



1 关于文件权限

# 1 Linux 的文件信息
[hive@cdh1 mysql]$ ll | grep test
drwx------ 2 mysql mysql       4096 Dec  8 20:35 flink_test
drwx------ 2 mysql mysql       4096 Dec 11 01:32 test
-rw-r--r-- 1 mysql mysql         29 Dec 11 09:40 test.csv


# 2 HDFS 的文件信息
[hive@cdh1 mysql]$ hadoop fs -ls /home
Found 5 items
drwxrwxrwx   - dr.who supergroup          0 2019-07-29 15:23 /home/flink
-rw-r--r--   3 root   supergroup      14205 2019-10-17 04:03 /home/rankQuote.csv
-rw-r--r--   3 hdfs   supergroup        329 2019-06-19 17:22 /home/sample.txt
drwxr-x---   - mysql  hive                0 2019-12-11 09:38 /home/test
-rw-r-----   3 mysql  hive               29 2019-12-11 09:40 /home/test.csv

关于上面信息的说明

  • 第一列表示 权限许可: Permission
  • 第二列。 Linux表示被引用的次数,文件默认为1 ,文件夹默认为2(Linux世界一切皆文件)。HDFS 表示的为副本数 Replication
  • 第三列表示 拥有者: Owner
  • 第四列表示 组: Group
  • 第五列表示 大小: Size
  • 第六列表示 最近修改时间: Last Modified
  • 第七列表示 文件或文件夹名。HDFS是绝对路径名称

权限列有由三组权限组成:所有者权限、组权限、公共权限

  • 第1个字符 标识文件类型:- 文件、d文件夹、l 软连接
  • 第2-4字符 标识所有者的权限
    • 第 2 字符,是否拥有读权限。yes=400,no=0
    • 第 3 字符,是否拥有写权限。200
    • 第 4 字符,是否拥有执行权限。 100
  • 第5-7字符 标识组权限
    • 第 5 字符,是否拥有读权限。40
    • 第 6 字符,是否拥有写权限。20
    • 第 7 字符,是否拥有执行权限。 10
  • 第8-10字符 标识公共权限
    • 第 8 字符,是否拥有读权限。4
    • 第 9 字符,是否拥有写权限。2
    • 第 10 字符,是否拥有执行权限。 1

2 Centos

2.1 关于 su 命令

  • su 用户1: 表示将用户1的身份赋予给当前用户
  • su - 用户1: 将用户1赋予当当前用户外,还会将环境设置为 用户1 登陆时的环境

可以看如下命令,执行su hdfs 时环境变量并没有变化,依然是原来用户的环境变量,只是拥有了 hdfs 的身份。
执行su - hdfs时环境变量已经改变,且会切换到 hdfs的家目录下。这个也就是有时切换了用户,但执行命令时还会报 command not found 的原因。

[root@cdh1 ~]# whoami
root
[root@cdh1 ~]# pwd
/root
[root@cdh1 ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/local/zulu8/bin:/usr/local/zulu8/jre/bin:/usr/local/scala/bin:/opt/cloudera/parcels/CDH-6.2.0-1.cdh6.2.0.p0.967373/lib/kafka/bin:/opt/cloudera/parcels/CDH-6.2.0-1.cdh6.2.0.p0.967373/lib/zookeeper/bin:/opt/flink-1.9.0/bin:/opt/apache-storm-1.2.2/bin:/root/bin
[root@cdh1 ~]# su hdfs
[hdfs@cdh1 root]$ pwd
/root
[hdfs@cdh1 root]$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/local/zulu8/bin:/usr/local/zulu8/jre/bin:/usr/local/scala/bin:/opt/cloudera/parcels/CDH-6.2.0-1.cdh6.2.0.p0.967373/lib/kafka/bin:/opt/cloudera/parcels/CDH-6.2.0-1.cdh6.2.0.p0.967373/lib/zookeeper/bin:/opt/flink-1.9.0/bin:/opt/apache-storm-1.2.2/bin:/root/bin
[hdfs@cdh1 root]$ exit
exit
[root@cdh1 ~]# su - hdfs
Last login: Wed Dec 11 11:29:20 CST 2019 on pts/2
[hdfs@cdh1 ~]$ pwd
/var/lib/hadoop-hdfs
[hdfs@cdh1 ~]$ echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/usr/local/zulu8/bin:/usr/local/zulu8/jre/bin:/usr/local/scala/bin:/opt/cloudera/parcels/CDH-6.2.0-1.cdh6.2.0.p0.967373/lib/kafka/bin:/opt/cloudera/parcels/CDH-6.2.0-1.cdh6.2.0.p0.967373/lib/zookeeper/bin:/opt/flink-1.9.0/bin:/opt/apache-storm-1.2.2/bin:/var/lib/hadoop-hdfs/.local/bin:/var/lib/hadoop-hdfs/bin
[hdfs@cdh1 ~]$ exit
logout

2.2 用户和组

# 1 用户的创建
#  1.1 创建用户,创建用户家目录,指定组为user1
useradd user1 -m -U -s /bin/bash

#  1.2 创建用户,不创建家目录。-M 不创建家目录、-U 创建一个和用户名一样的组
useradd user2 -M -s /bin/bash --gid user1

#  1.3 查看新建的用户 
cat /etc/passwd | grep user

#  1.4 设置 user1 的密码
passwd user1


#  1.5 切换到 user1 用户
su user2

#  1.6 查看当前登陆的用户
whoami

#  1.7 切换到 user2 用户
su - user1

#  1.8 查看当前路径。su - 用户,会自动切换到用户的家目录
pwd

#  1.9 删除某个用户. -r 表示删除家目录
userdel -r user2


# 2 组
#  2.1 查看已存在的所有组名
cat /etc/group

#  2.2 添加一个组。因为  /usr/sbin/groupadd 权限为只有 root 能对其编辑,需要切换到 root用户
# -rwxr-x--- 1 root root 65536 Mar 14  2019 /usr/sbin/groupadd
groupadd supergroup

#  2.3 将用户(已存在的)添加到这个组中。usermod 同样只有 root 能对其编辑
usermod -G supergroup user1

#  2.4 查看某用户id信息,可以看到用户id、组id
id user1

#  2.5 查看当前用户的归属的所有组
groups user1

#  2.6 将 supergroup 组中的 user1 用户删除
gpasswd -d  user1  supergroup


3 HDFS

从第一部分可以看到 HDFS 文件的为 supergroup

# root 用户上传到 HDFS 一个文件
echo `date` > test.txt
hadoop fs -put test.txt /home

# user1 用户创建一个 HDFS 文件夹
su - user1
hadoop fs -mkdir /home/test

# 查看
[user1@cdh1 ~]$ hadoop fs -ls /home
Found 5 items
drwxrwxrwx   - dr.who supergroup          0 2019-07-29 15:23 /home/flink
-rw-r--r--   3 root   supergroup      14205 2019-10-17 04:03 /home/rankQuote.csv
-rw-r--r--   3 hdfs   supergroup        329 2019-06-19 17:22 /home/sample.txt
drwxr-xr-x   - user1  supergroup          0 2019-12-11 14:41 /home/test
-rw-r--r--   3 root   supergroup         29 2019-12-11 14:38 /home/test.txt

3.1 将root 添加到 HDFS 的默认组中

# 1 添加一个  supergroup 组
groupadd supergroup

# 2 将root 用户添加到 supergroup 组
usermod -G supergroup root

# 3 查看
groups root

# 4 同步系统权限到 hdfs
su - hdfs -s /bin/bash -c "hdfs dfsadmin -refreshUserToGroupsMappings"

# 5 如果将 root 用户从 supergroup 移除 
gpasswd -d  root  supergroup

3.2 HDFS 组和权限

# 1 将 /home/test.txt 组改为 hive 
hadoop fs -chgrp -R hive /home/test.txt

# 2 将 /home/test.txt 拥有者改为 user1
hadoop fs  -chown user1 /home/test.txt

# 3 将 /home/test.txt 的文件权限改为拥有者有所有权限、组用户仅有读权限
hadoop fs -chmod 740 /home/test.txt

# 4 使用 user2 用户读取文件。发现报权限不够的错误
bash-4.2$ hadoop fs -cat /home/test.txt
cat: Permission denied: user=user2, access=READ, inode="/home/test.txt":user1:hive:-rwxr-----

# 5 将 user2 添加到 hive组。需要root用户执行
usermod -G hive user2

# 6 查看 hive 组的用户
cat /etc/group  | grep hive

# 7 再次查看数据。此时可以正常查看到数据
bash-4.2$ hadoop fs -cat /home/test.txt
Wed Dec 11 14:38:18 CST 2019


4 Hive

# 先把 user2 从 hive 权限组中删除
gpasswd -d  user2  hive
su - hdfs -s /bin/bash -c "hdfs dfsadmin -refreshUserToGroupsMappings"

# 进入 hive cli
hive

-- 1 建一个测试表 yore
create table yore(id int, name string);

-- 2 插入一条数据
INSERT INTO yore VALUES(1, "one");

-- 3 查询表中的数据
hive> SELECT * FROM yore;
OK
1       one
Time taken: 0.245 seconds, Fetched: 1 row(s)

-- 查看建表语句。可以看到保存在 HDFS 上的位置为 
--  hdfs://cdh1:8020/user/hive/warehouse/yore
SHOW CREATE TABLE yore;
 

# 1 查看 yore 表文件的权限,
[root@cdh1 ~]# hadoop fs -ls /user/hive/warehouse/yore
Found 1 items
-rwxrwx---   3 user1 hive          6 2019-12-11 15:54 /user/hive/warehouse/yore/000000_0

# 2 为了演示,最好设置为 公共用户不能访问, 770
hadoop fs -chmod -R 770 /user/hive/warehouse/yore

# 3 公共用户 user2 可以看到是没有权限读取的
bash-4.2$ whoami
user2
bash-4.2$ hadoop fs -cat /user/hive/warehouse/yore/000000_0
cat: Permission denied: user=user2, access=EXECUTE, inode="/user/hive/warehouse/yore":user1:hive:drwxrwx---

下看先 Hive 的权限

操作解释
ALL所有权限
ALTER允许修改元数据(modify metadata data of object)—表信息数据
UPDATE允许修改物理数据(modify physical data of object)—实际数据
CREATE允许进行Create操作
DROP允许进行DROP操作
INDEX允许建索引(目前还没有实现)
LOCK当出现并发的使用允许用户进行LOCK和UNLOCK操作
SELECT允许用户进行SELECT操作
SHOW_DATABASE允许用户查看可用的数据库

4.1 Sentry 服务

以 CDH 为例,先在集群中添加 Sentry 服务,服务实例如下:
在这里插入图片描述

  • 配置Hive使用Sentry服务。Hive -> 配置 -> 搜:Sentry 服务 -> 选中Sentry
  • 关闭Hive的用户模拟功能。 Hive -> 配置 -> 搜:HiveServer2 启用模拟 -> 取消勾选
  • 开启 sentry.hive.testing.mode。 Hive -> 配置 -> 搜:sentry-site.xml -> 添加配置项
    • 名称: sentry.hive.testing.mode
    • 值: true
  • 权限管理配置项。 Hive -> 配置 -> 搜:hive-site.xml -> 添加配置项
    • 名称: hive.security.authorization.enabled
    • 值: true
    • 名称: hive.security.authorization.createtable.owner.grants
    • 值: ALL
    <!-- 其实就是添加如下配置项 -->
    <property>
       <name>hive.security.authorization.enabled</name>
       <value>true</value>
        <description>enableordisable the hive clientauthorization</description>
    </property>
    <property>
       <name>hive.security.authorization.createtable.owner.grants</name>
       <value>ALL</value>
       <description>theprivileges automatically granted to theownerwhenever a table gets created. Anexample like "select,drop"willgrant select and drop privilege to theowner of thetable</description>
    </property>
    
  • Impala。Impala -> 配置 -> 搜:Sentry 服务 -> 选中Sentry
  • Hue。Hue -> 配置 -> 搜:Sentry 服务 -> 选中Sentry
  • HDFS开启 ACL 。HDFS -> 配置 -> 搜:ACL -> 勾上查询到的两个 HDFS(服务范围)

使用 hive cli 查询数据时

-- 查询时报 user2 用户没有权限读取数据。
--  看来 hive 的赋权并不能脱离 HDFS 的权限。hive.sentry.provider 映射的是 org.apache.sentry.provider.file.HadoopGroupResourceAuthorizationProvider
hive> SELECT * FROM yore;
FAILED: SemanticException Unable to determine if hdfs://cdh1.ygbx.com:8020/user/hive/warehouse/yore is encrypted: org.apache.hadoop.security.AccessControlException: Permission denied: user=user2, access=READ, inode="/user/hive/warehouse/yore":hive:hive:drwxrwx--x
        at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.check(FSPermissionChecker.java:400)
        at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkPermission(FSPermissionChecker.java:262)
        at org.apache.sentry.hdfs.SentryINodeAttributesProvider$SentryPermissionEnforcer.checkPermission(SentryINodeAttributesProvider.java:86)
        at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkPermission(FSPermissionChecker.java:194)
        at org.apache.hadoop.hdfs.server.namenode.FSDirectory.checkPermission(FSDirectory.java:1855)
        at org.apache.hadoop.hdfs.server.namenode.FSDirectory.checkPermission(FSDirectory.java:1839)
        at org.apache.hadoop.hdfs.server.namenode.FSDirectory.checkPathAccess(FSDirectory.java:1789)
        at org.apache.hadoop.hdfs.server.namenode.FSDirEncryptionZoneOp.getEZForPath(FSDirEncryptionZoneOp.java:197)
        at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getEZForPath(FSNamesystem.java:7190)
        at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.getEZForPath(NameNodeRpcServer.java:2066)
        at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.getEZForPath(ClientNamenodeProtocolServerSideTranslatorPB.java:1464)
        at org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$ClientNamenodeProtocol$2.callBlockingMethod(ClientNamenodeProtocolProtos.java)
        at org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:523)
        at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:991)
        at org.apache.hadoop.ipc.Server$RpcCall.run(Server.java:869)
        at org.apache.hadoop.ipc.Server$RpcCall.run(Server.java:815)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.Subject.doAs(Subject.java:422)
        at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1875)
        at org.apache.hadoop.ipc.Server$Handler.run(Server.java:2675)

4.2 权限设置和使用

Sentry不支持Hive CLI列权限管理,因此我们使用beeline 连接 hive。

beeline

beeline> !connect jdbc:hive2://cdh3:10000
Connecting to jdbc:hive2://cdh3:10000
Enter username for jdbc:hive2://cdh3:10000: hive
Enter password for jdbc:hive2://cdh3:10000: ****
Connected to: Apache Hive (version 2.1.1-cdh6.2.0)
Driver: Hive JDBC (version 2.1.1-cdh6.2.0)
Transaction isolation: TRANSACTION_REPEATABLE_READ

-- 1 创建 admin 角色
create role admin;
create role role_user2;

-- 2 查看角色
show roles;

-- 3 将 yore 表的 ALL 权限赋予给  admin 角色
grant all on table default.yore to role admin;

-- 3 将 yore 表的 select 权限赋予给  role_user2 角色
grant select on table default.yore to role role_user2;

-- 4.1  将角色 admin 的权限赋予 user1 用户
-- GRANT ROLE admin TO USER user1;

-- 4.2 将角色 role_user2 的权限赋予 user2 用户
-- GRANT ROLE role_user2 TO USER `user2`;


-- 5.1 将 admin 角色添加到 user1 
grant role admin to group user1;
-- 5.2 将 role_user2 角色添加到 user2
grant role role_user2 to group user2;


-- 6 查看 user1 用户组的角色信息
SHOW ROLE GRANT GROUP user1;
-- chakan  role_user2 下的权限信息
SHOW GRANT ROLE role_user2;


-- 7 回收角色
--  7.1 回收  某个角色对 库的 权限
REVOKE SELECT ON TABLE yore FROM ROLE role_user2;
--  7.2 回收摸个组下的 某个角色的权限
REVOKE ROLE role_user2 [, role_name] FROM GROUP user2;

使用 beeline 查看数据

  • user1 用户连接 Hive
beeline
beeline> !connect jdbc:hive2://cdh3:10000
Connecting to jdbc:hive2://cdh3:10000
Enter username for jdbc:hive2://cdh3:10000: user1
Enter password for jdbc:hive2://cdh3:10000:
Connected to: Apache Hive (version 2.1.1-cdh6.2.0)
Driver: Hive JDBC (version 2.1.1-cdh6.2.0)
Transaction isolation: TRANSACTION_REPEATABLE_READ

-- 1 查看表
0: jdbc:hive2://cdh3:10000> show tables;
+-----------+
| tab_name  |
+-----------+
| yore      |
+-----------+
1 row selected (0.16 seconds)

-- 2 查看表数据
0: jdbc:hive2://cdh3:10000> SELECT * FROM yore;
+----------+------------+
| yore.id  | yore.name  |
+----------+------------+
| 1        | one        |
+----------+------------+
1 row selected (0.293 seconds)

-- 3 插入一条数据
0: jdbc:hive2://cdh3:10000> INSERT INTO yore VALUES(2, "two");

-- 再次查看表数据
0: jdbc:hive2://cdh3:10000> SELECT * FROM yore;
+----------+------------+
| yore.id  | yore.name  |
+----------+------------+
| 1        | one        |
| 2        | two        |
+----------+------------+
2 rows selected (0.374 seconds)

  • user2 用户连接 Hive
beeline
beeline> !connect jdbc:hive2://cdh3:10000
Connecting to jdbc:hive2://cdh3:10000
Enter username for jdbc:hive2://cdh3:10000: user2
Enter password for jdbc:hive2://cdh3:10000:
Connected to: Apache Hive (version 2.1.1-cdh6.2.0)
Driver: Hive JDBC (version 2.1.1-cdh6.2.0)
Transaction isolation: TRANSACTION_REPEATABLE_READ

-- 1 查看表
0: jdbc:hive2://cdh3:10000> show tables;
+-----------+
| tab_name  |
+-----------+
| yore      |
+-----------+
1 row selected (0.272 seconds)

-- 2 查看表数据
0: jdbc:hive2://cdh3:10000> SELECT * FROM yore;
+----------+------------+
| yore.id  | yore.name  |
+----------+------------+
| 1        | one        |
+----------+------------+
1 row selected (0.176 seconds)

-- 3 插入一条数据。发现报异常了,提示 user2 没有 QUER 权限
0: jdbc:hive2://cdh3:10000> INSERT INTO yore VALUES(3, "three");
Error: Error while compiling statement: FAILED: SemanticException No valid privileges
 User user2 does not have privileges for QUERY
 The required privileges: Server=server1->Db=default->Table=yore->action=insert->grantOption=false; (state=42000,code=40000)

查看 HDFS 上表文件的权限,虽然用户 user2 并不是 表文件的拥有者和 组内,通过权限设置依然我们访问到了表数据。

[root@cdh2 ~]#  hadoop fs -ls /user/hive/warehouse/yore
Found 2 items
-rwxrwx--x+  3 hive hive          6 2019-12-12 22:40 /user/hive/warehouse/yore/000000_0
-rwxrwx--x+  3 hive hive          6 2019-12-12 22:35 /user/hive/warehouse/yore/000000_0_copy_1

cdh中部署的hive查询报错 cdh(5.4.0)中部署的hive查询报错: Job Submission failed with exception 'org.apache.hadoop.security.AccessControlException(Permission denied: user=root, access=WRITE, inode="/user":hdfs:supergroup:drwxr-xr-x... 阅读详情

相关推荐

HDFS权限问题

背景 之前的工作中使用Hive一直都是用的内表,对于外表一直都没有正经研究过,最近偶尔使用了一次,就整出了不小的麻烦,而且发现是跟HDFS权限有关,然而就发现关于HDFS的权限问题理解的还是太少了,所以把问题整理一下。 一,Hive外表加载HDFS文件错误 场景是这样的:首先在Hive中新建一张外表 DROP TABLE IF EXISTS quickstart; CREATE EXTERNAL ...

其实我不会编程,只会脸滚键盘 5253

基于 Hadoop HA 的 Hive 搭建

前言 环境介绍 虚拟机软件:VirtualBox Linux 发行版本:Ubuntu 20.04.4 虚拟机核心数:1 core 虚拟机内存:2 GB JDK 版本:1.8.0_202 Hadoop 版本:3.2.3 ZK 版本:3.8.0 Hive 版本:3.1.3 MySQL 版本:8.0.28 Hadoop HA 搭建 集群规划 Hive 默认使用的元数据库为 derby,开启 Hive 之后就会占用元数据库,且不与其他客户端共享数据,所以我们需要将 Hive 的元数据地址改为 MySQL 按照以

不搞数学的汤老师 3786

java通过jdbc连接hive数据库时,无法使用count()语句

问题: java通过jdbc连接hive数据库 可以运行 select * from tables 但是运行count(*) 报错: select count(*) from tables 解决 参考1:zyl26的博客 出现原因可能是: 因为执行" select * from table; "并不需要启动mapreduce任务。而执行"select count(*) from table;"需要启动mapreduce任务。解决方法看执行过程的错误信息,我得到的信息是当前用户对于hdfs文件系统的/

Buevara的博客 1517

hadoop与HDFS交互

最后,了解一下如何把文件从HDFS中的一个目录拷贝到HDFS中的另外一个目录。该命令中表示在HDFS中创建一个“/user/hadoop”目录,“-mkdir”是创建目录的操作,“-p”表示如果是多级目录,则父目录和子目录一起创建,这里“/user/hadoop”就是一个多级目录,因此必须使用参数“-p”,否则会出错。在该界面中,上面的一排目录按钮(即“usr”、“local”、“hadoop”、“share”、“hadoop”和“common”),当点击某个目录按钮时,就会在下面列出该目录的内容。

weixin_52308622的博客 1690

Java8对接三方流式接口,并实时输出(GPT)

【代码】Java8对接三方流式接口,并实时输出(GPT)

m0_58617940的博客 1726

热膨胀系数(CTE)的不同处理方法对于封装翘曲仿真的影响

随着技术的不断发展,芯片封装的集成度越来越高,尺寸也越来越大,随之而来的封装翘曲问题也越来越引起关注。影响芯片封装翘曲最主要的原因就是封装中不同材料热膨胀系数(CTE)的失配性,因此在进行封装翘曲仿真的过程中,如何使用材料的CTE值就变得尤为重要,会对仿真精度产生较大的影响。本文将对比不同CTE的处理方法给仿真结果带来的影响。

wangyubo1的博客 6854

Spark读取Hive分区表出现Input path does not exist的问题!!!

问题详情 Hive读取正常,不会报错,Spark读取数据就会出现报错信息: org.apache.hadoop.mapred.InvalidInputException: Input path does not exist: hdfs://testcluster/user/hive/warehouse/.... 然后我们去查看一下 表数据的具体在hdfs上的存储路径,去hdfs上查看,发现文件确...

ccyy 2169

开发者的避坑指南:在Apple Silicon Mac上构建RocketMQ Python客户端的完整心路历程

本文详细记录了在Apple Silicon Mac上构建RocketMQ Python客户端的完整过程,重点解决了架构兼容性问题。通过源码编译rocketmq-client-cpp库,修复构建脚本和CMake配置,最终成功在M2芯片MacBook Pro上部署RocketMQ Python客户端,为开发者提供了实用的避坑指南。

Pepper的专栏 696

实现hive proxy4-scratch目录权限问题解决

科技小先锋2017-11-14 01:34:00浏览419 hdfs path string static Hive hive在hdfs中的job中间文件是根据当前登陆用户产生的,其默认值为/tmp/hive-${user.name},这就导致实现proxy的功能时会遇到临时文件的权限问题,比如在实现了proxy功能后,以超级用户hdfs proxy...

大JAVA解决方案 603

金蝶ERP元数据解析:字段属性与表结构映射实战

本文深入解析金蝶ERP元数据的核心价值与应用实践,详细介绍了字段属性与表结构映射的关键技术。通过缓存获取与工具类直连两种方案对比,结合实际案例展示元数据在数据库校验、动态表单生成等场景的应用,帮助开发者高效解决二次开发中的常见问题。

weixin_33738555的博客 432

从零构建Elasticsearch MCP代理:自然语言查询背后的技术揭秘

本文深入解析如何从零构建Elasticsearch MCP代理,实现自然语言查询的技术架构与实战应用。通过MCP协议与Elasticsearch的结合,系统能够将自然语言转换为精确的DSL查询,提升非技术用户的数据查询效率。文章详细介绍了核心架构、DSL生成引擎、端到端系统搭建及生产环境最佳实践,为开发者提供全面的技术指南。

lll78的博客 875

hive启动报错/tmp/hive on HDFS should be writable

给hadoop格式化后,重启虚拟机后启动hive报错,,,显示系统用户没有写的权限 Caused by: java.lang.RuntimeException: The root scratch dir: /tmp/hive on HDFS should be writable. Current permissions are: rwx------ at org.apache.hadoop.hive.ql.session.SessionState.createRootHDFSDir(SessionState

北慕辰的博客,欢迎各位大佬光临!! 1635

【示波器专题】无源探头的常用附件

使用探头进行测试,我们不仅要知道探头的原理,还需要了解探头的常用附件及其使用方式,这样才能在尽可能在测试中提高效率且减少出错的概率

一点硬件 692

记一次Hive库里手动删除表,但是HDFS上还存在表文件奇怪问题

正常在hive库即hive命令行中删除一张表,hdfs上也是同步的被删除的,但是这次发现在hive里手动建了一张表,然后使用drop table 表名后,hive库里的确没发现这张表了,但是HDFS上还是有。 我使用的建表建库语句: create database test1 location 'hdfs://beh/user/test1/test1.db';   //创建库指定路径 use ...

心向,往之 1万+

matlab 显示曲面网格【2025最新版】

matlab点云工具箱对点云三维重建结果显示的函数。博客长期更新,本文最近更新时间为:2025年9月14日。

点云侠的博客 2580

uniapp+renderJS+google map开发安卓版APP非小程序

uniapp+renderJS+google map开发安卓版APP非小程序,google map小叉号不显示,google map自定义marker右上角的小叉号如何去掉,uniapp+google map不显示

renkai721的专栏 667

SparkSQL利用HDFS的权限控制表的读权限

Spark内置的thrift-server(连接hive)的对权限管理支持得并不是很好,只支持了create/drop权限的控制,但是任意用户都可以读任意库/表,委实是一个问题。为了解决这个问题,可以用HDFS的文件权限控制来对表的读权限进行控制。 1.新建用户 由于Hive,HDFS都是用系统用户来做权限控制的,所以需要新建一个系统用户。 比如新建一个mytest用户,如下图所示:

卧龙居 7846

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

CDH新集群没有hive创建表权限记录

1.集群装好后在hive创建表时遇到FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. MetaException(message:Got exception: org.apache.hadoop.security.AccessControlException Permission ...

sujins5288的博客 659

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

HDFS的上传与下载(put & get)

最近在做一个小任务,将一个CDH平台中Hive的部分数据同步到另一个平台中。毕竟我也刚开始工作,在正式开始做之前,首先进行了一段时间的练习,下面的内容就是练习时写的文档中的内容。如果哪里有错误或者疏漏,希望各位网友能够指出。 第二篇:Hive中数据的导入与导出:https://www.cnblogs.com/BlackString/p/10552806.html 第三篇:Hive分区表的导入与...

weixin_30652879的博客 1116

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

解决 The root scratch dir: /tmp/hive on HDFS should be writable. Current permissions are: rwxr-xr-x

问题描述: spark 将数据写入到hive表时 报错: The root scratch dir: /tmp/hive on HDFS should be writable. Current permissions are: rwxr-xr-x 如下图: 原因分析: 从The root scratch dir: /tmp/hive on HDFS should be writable. Current permissions are: rwxr-xr-x 可以看出,系统要求再hdfs上用户要具备写的权

m0_52184330的博客 4850

CDH 之 hive 数据迁移_cdh数据互导

先创建数据库OKdefault2.callBlockingMethodClientNamenodeProtocolProtosjavaatorgapachehadoopipcProtobufRpcEngineServerProtoBufRpcInvokercallProtobufRp。

2401_84166896的博客 630

Exception in thread “main“ org.apache.hadoop.security.AccessControlException: Permission denied: use

然后重启hdfs集群,重启Hive相关服务,重新运行即可。进入Hadoop安装目录下修改。

qq_59705101的博客 734

hdfs java 找不到文件_mapreduce执行程序HDFS路径找不到

因为mapreduce执行程序的数据输入路径是在HDFS路径下,而这个路径下的数据是我shell远程执行hive查询语句获得,但是mapreduce程序读取不到,可是我java端的DFS location就是连接HDFS里面有这个文件夹和数据,请问怎么办?mapreduce中文件路径是这样设置的:FileInputFormat.addInputPath(job, new Path("hdfs://...

weixin_39528467的博客 1014

最全CDH 之 hive 数据迁移_cdh数据互导(3)

查看 hive 是否有 /user 目录的权限#如下操作创建数据库#进入hive交互命令行执行 create database test;#或者直接用下面命令创建数据库。

2401_84182318的博客 1144

Hive hiveserver2 配置运行

1:运行 命令行模式: hive --service hiveserver2 --hiveconf hive.server2.thrift.port=10001 服务模式: hiveserver2 start [jifeng@feng01 conf]$ hive --service hiveserver2 --hiveconf hive.server2.thrift.port

风行天下 3万+

Hive3 客户端启动提示The dir: /** on HDFS should be writable. Current permissions are: rwxr-xr-x

错误信息: Logging initialized using configuration in file:/C:/hive/apache-hive-3.0.0-bin/conf/hive-log4j2.properties Async: true Exception in thread "main" java.lang.RuntimeException: The dir: /tmp/hive on HDFS should be writable. Current permissions are: rw

zhouzhiwengang的专栏 596
上一篇: 七牛云对象存储服务——实现Spring Boot多文件(图片)上传接口
下一篇: Beeline 的进阶使用
Yore Yuen
博客等级 码龄9年 8646粉丝 58原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yore Yuen

你的支持认可是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值