HDFS上的root scratch dir:/ tmp / hive应该是可写的。当前权限为:rwx --------
嗨,以下Spark代码我正在Eclipse的CDH 5.8&超越RuntimeExeption
public static void main(String[] args) {
final SparkConf sparkConf = new SparkConf().setMaster("local").setAppName("HiveConnector");
final JavaSparkContext sparkContext = new JavaSparkContext(sparkConf);
SQLContext sqlContext = new HiveContext(sparkContext);
DataFrame df = sqlContext.sql("SELECT * FROM test_hive_table1");
//df.show();
df.count();
}
根据Exception / tmp / hive on HDFS 应该是可写的,但是我们正在本地模式下执行spark job。这意味着本地(linux)文件系统中的目录 / tmp / hive 没有可写权限,而不是HDFS。
所以我执行了以下命令以获得许可。
$ sudo chmod -R 777 /tmp/hive
现在它正在为我工作。
如果在群集模式下执行spark job期间遇到同样的问题,则应在hive conf文件夹的 hive-site.xml 文件中配置以下属性并重启蜂巢服务器。
<property>
<name>hive.exec.scratchdir</name>
<value>/tmp/hive</value>
<description>Scratch space for Hive jobs</description>
</property>
<property>
<name>hive.scratch.dir.permission</name>
<value>777</value>
<description>The permission for the user-specific scratch directories that get created in the root scratch directory </description>
</property>
答案 0 :(得分:1)
使用正确的64位winutils并设置权限
winutils.exe chmod -R 777 \ tmp \ hive
System.setProperty("hadoop.home.dir", "C:\\Users\\Hadoop_home")
lazy val spark: SparkSession = {
FileUtils.deleteDirectory(new File("c:\\tmp\\metastore_db"))
FileUtils.deleteDirectory(new File("c:\\tmp\\spark-warehouse"))
SparkSession.builder().config("spark.sql.warehouse.dir", "C:\\temp\\").master("local").appName("spark session for testing").enableHiveSupport().getOrCreate()
}