在Fedora 27的Spark独立模式下配置Hive本地多用户及本地运行
嘿,我来帮你搞定这个无Hadoop环境下Spark独立集群里的Hive本地多用户配置问题,结合你提到的Fedora 27环境和已经配置好的MySQL元数据仓库,咱们一步步来梳理:
1. 先把
HIVE_OPTS配置准确 你提到有不同的博客给出不同的命令,这里给你适配无Hadoop本地模式的完整配置,同时保留你已经设置的MySQL元数据仓库(这个配置应该已经在hive-site.xml里了,所以不用在HIVE_OPTS重复):
export HIVE_OPTS='-hiveconf mapred.job.tracker=local -hiveconf fs.defaultFS=file:/// -hiveconf hive.metastore.local=true -hiveconf hive.metastore.warehouse.dir=file:///var/lib/hive/warehouse'
这里几个关键参数的作用:
fs.defaultFS=file:///:明确指定用本地文件系统替代HDFShive.metastore.local=true:强制启用本地元数据模式,避免依赖Hadoop的远程metastorehive.metastore.warehouse.dir:指向一个全局可访问的仓库目录(后面会说多用户权限的处理)
2. 确保MySQL元数据仓库支持多用户访问
既然要多用户使用Hive,首先得保证MySQL里的Hive账号能被所有用户访问,同时hive-site.xml的配置对所有用户可见:
- 先给MySQL里的Hive账号(比如
hiveuser)授权本地访问权限:
GRANT ALL PRIVILEGES ON metastore_db.* TO 'hiveuser'@'localhost' IDENTIFIED BY '你的密码'; FLUSH PRIVILEGES;
- 把
hive-site.xml放到全局配置目录,让所有用户都能读取:
sudo mkdir -p /etc/hive/conf sudo cp $HIVE_HOME/conf/hive-site.xml /etc/hive/conf/ # 创建一个包含所有Hive用户的组,比如hiveusers sudo groupadd hiveusers # 把需要使用Hive的用户加入这个组 sudo usermod -aG hiveusers user1 sudo usermod -aG hiveusers user2 # 设置配置文件的权限 sudo chown root:hiveusers /etc/hive/conf/hive-site.xml sudo chmod 644 /etc/hive/conf/hive-site.xml
- 让每个用户的shell环境指向这个全局配置目录,在每个用户的
~/.bashrc里添加:
echo 'export HIVE_CONF_DIR=/etc/hive/conf' >> ~/.bashrc source ~/.bashrc
3. 配置多用户兼容的仓库目录
这里分两种场景,你可以根据需求选:
场景1:多用户共享同一个数据仓库
适合需要协作访问同一份数据的场景:
# 创建全局仓库目录 sudo mkdir -p /var/lib/hive/warehouse # 设置权限,让hiveusers组的用户都能读写 sudo chown :hiveusers /var/lib/hive/warehouse sudo chmod 775 /var/lib/hive/warehouse
同时在/etc/hive/conf/hive-site.xml里添加这两个配置项,确保新表的目录权限正确:
<property> <name>hive.warehouse.subdir.inherit.perms</name> <value>true</value> </property> <property> <name>hive.umask</name> <value>002</value> </property>
这样新创建的表目录会继承父目录的权限,同组用户都能读写。
场景2:每个用户有独立的数据仓库
适合用户数据隔离的场景,只需要修改HIVE_OPTS里的仓库路径为用户专属目录:
export HIVE_OPTS='-hiveconf mapred.job.tracker=local -hiveconf fs.defaultFS=file:/// -hiveconf hive.metastore.local=true -hiveconf hive.metastore.warehouse.dir=file:///home/$USER/hive-warehouse'
把这个命令加到每个用户的~/.bashrc里,这样每个用户的仓库都在自己的home目录下,不需要额外的权限配置。
4. 让Spark独立集群能识别Hive配置
因为是Spark独立模式运行,要确保Spark能读取到Hive的配置和MySQL驱动:
- 把MySQL的JDBC驱动包放到Spark的jars目录:
sudo cp /path/to/mysql-connector-java-*.jar $SPARK_HOME/jars/
- 在Spark的全局配置
$SPARK_HOME/conf/spark-defaults.conf里添加Hive集成配置:
spark.sql.hive.metastore.version 2.3.7 <!-- 替换成你实际的Hive版本 --> spark.sql.hive.metastore.jars $HIVE_HOME/lib/* spark.sql.hive.metastore.sharedPrefixes com.mysql.jdbc,org.apache.hadoop.hive.conf
5. 测试多用户配置是否生效
- 用第一个用户(比如user1)启动Hive CLI,创建测试表并插入数据:
hive hive> CREATE TABLE test_shared (id INT, content STRING); hive> INSERT INTO test_shared VALUES (1, 'from user1'); hive> SELECT * FROM test_shared;
- 切换到第二个用户(比如user2),启动Hive CLI尝试读取或写入:
su - user2 hive hive> SELECT * FROM test_shared; # 如果是共享仓库,还能插入数据 hive> INSERT INTO test_shared VALUES (2, 'from user2');
如果能正常执行,说明多用户配置已经生效了。
内容的提问来源于stack exchange,提问作者RobbieTheK
相关产品推荐
相关产品推荐

