怎样修复基于Spark, MapReduce和Hive Jobs的Alluxio错误

本文介绍了出现'Class alluxio.hadoop.FileSystem not found'报错的原因及其解决方法

翻译原文为:https://dzone.com/articles/alluxio-developer-tip-how-to-fix-quotclass-alluxio

____________________________________________________________________________________________________

           有时会在Alluxio用户邮件列表上弹出一个引用作业失败的问题,并显示错误消息“java.lang.ClassNotFoundException:Class alluxio.hadoop.FileSystem not found”。 本文解释了失败的原因以及问题发生时的解决方案。

为什么会出现这种错误?

           一般出现该错误表示Alluxio客户端在运行时不可用。 当作业尝试访问Alluxio文件系统但未能找到Alluxio客户端的实现以连接到该服务时,这会导致异常。

           Alluxio客户端是一个Java库,它定义了类alluxio.hadoop.FileSystem,以便根据用户请求调用Alluxio服务(例如创建文件,列出目录等)。 它通常被预编译到名为alluxio-1.8.1-client.jar(对于v1.8.1)的jar文件中,并与Alluxio tarball一起分发。 要使用应用程序,此文件应位于JVM类路径上,以便可以将其发现并加载到JVM进程中。 如果应用程序的JVM无法在类路径上找到此文件,则它无法将类alluxio.hadoop.FileSystem实现,因此将抛出异常。

怎样解决这个问题?

           解决方案是:确保Alluxio客户端的jar分布在应用程序的类路径上。 在进行故障排除时应考虑以下几个因素:

                    <1>如果应用程序分布在多个节点上,则应将此jar分发给所有这些节点。 依据这些节点计算机的框架配置不同,此配置也可能非常不同:

                          •对于MapReduce或YARN,可以将路径附加到Alluxio客户端的jar上如 tomapreduce.application.classpath或yarn.application.classpath以确保每个任务都可以找到它。 或者,您可以提供路径作为-libjars的参数,例如:

 $ bin/hadoop jar \
 libexec/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar wordcount \
 -libjars /<PATH_TO_ALLUXIO>/client/alluxio-1.8.1-client.jar \
 <INPUT FILES> <OUTPUT DIRECTORY>

               注:根据Hadoop发行版,它也可能有助于设置$ HADOOP_CLASSPATH:

 export HADOOP_CLASSPATH=/<PATH_TO_ALLUXIO>/client/alluxio-1.8.1-client.jar:${HADOOP_CLASSPATH}

                      • 对于Spark,在运行Spark的每个节点上的spark / conf / spark-defaults.conf中设置并重新启动运行的Spark服务器进程

 spark.driver.extraClassPath /<PATH_TO_ALLUXIO>/client/alluxio-1.8.1-client.jar
 spark.executor.extraClassPath /<PATH_TO_ALLUXIO>/client/alluxio-1.8.1-client.jar

                       对于Hive,在conf / hive-env.sh中设置环境变量HIVE_AUX_JARS_PATH: 

export HIVE_AUX_JARS_PATH=/<PATH_TO_ALLUXIO>/client/alluxio-1.8.1-client.jar:${HIVE_AUX_JARS_PATH}

               在某些情况下,一个计算框架依赖于另一个。 例如,Hive服务可以使用MapReduce作为分布式查询的引擎。 在这种情况下,必须设置Hive和MapReduce的类路径才能正确配置。

总结: 

               1.对于使用Alluxio的应用程序,他们必须将Alluxio客户端jar文件附加到其类路径中。

               2.如何将Alluxio客户端jar文件配置到类路径可以根据计算框架逐个进行。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用pyspark中的算子对给定单词进行计数的代码: ```python # 导入pyspark库 from pyspark import SparkContext # 创建SparkContext对象 sc = SparkContext("local", "Word Count") # 定义要计数的单词列表 words = ['hadoop', 'spark', 'spark', 'mapreduce', 'spark', 'hive', 'hive', 'spark', 'hadoop', 'mapreduce', 'spark'] # 将单词列表转换为RDD word_rdd = sc.parallelize(words) # 使用map算子将每个单词映射为(单词, 1)的键值对 word_count_rdd = word_rdd.map(lambda word: (word, 1)) # 使用reduceByKey算子将相同单词的计数相加 word_count_rdd = word_count_rdd.reduceByKey(lambda x, y: x + y) # 输出计数结果 for word, count in word_count_rdd.collect(): print("{}: {}".format(word, count)) ``` 输出结果为: ``` hadoop: 2 spark: 5 mapreduce: 2 hive: 2 ``` 特殊字符的统计可以使用正则表达式进行匹配,然后使用过滤算子将特殊字符过滤掉,最后再进行计数。具体代码如下: ```python import re # 定义要计数的字符串 text = 'hadoop spark spark mapreduce spark spark hive hive spark hadoop mapreduce spark %' # 使用正则表达式匹配单词和特殊字符 words = re.findall(r'\w+|\W+', text) # 将单词列表转换为RDD word_rdd = sc.parallelize(words) # 使用filter算子过滤掉特殊字符 word_rdd = word_rdd.filter(lambda word: re.match(r'\w+', word)) # 使用map算子将每个单词映射为(单词, 1)的键值对 word_count_rdd = word_rdd.map(lambda word: (word, 1)) # 使用reduceByKey算子将相同单词的计数相加 word_count_rdd = word_count_rdd.reduceByKey(lambda x, y: x + y) # 输出计数结果 for word, count in word_count_rdd.collect(): print("{}: {}".format(word, count)) ``` 输出结果为: ``` hadoop: 2 spark: 5 mapreduce: 2 hive: 2 %: 1 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值