由一个HADOOP_HOME and hadoop.home.dir are unset报错引起的window环境连接调试远程hadoop的一系列问题,hadoop版本 2.8

本文对应的安装过程请点击此处


结论

先说结论。最后问题解决了。终于能在windows的eclipse上通过执行wordcount类,然后将某个文档内容处理后,将结果传到远程服务器的hadoop的某个文件夹下了。

当时的环境

我已经在linux服务器上安装了分布式的hadoop环境,一namenode两datanode。而且已经在linux服务器上测试过hadoop2.8自带的wordcount的jar的运行。可以正常运行并得到结果

eclipse中已添加hadoop-eclipse-plugin-2.7.jar(不是2.8的插件jar包,请注意)。并且在eclipse中配置了map/reduce对应的hadoop的一些基本配置信息。如下面两张图



上图中的advanced parameters中仅修改了hadoop.tmp.dir属性,改为我在linux中的/usr/local/hadoop/tmp的路径而已。其他属性都是默认值。

将hadoop自带的wordcount.class反编译后放到一个新建立的mapreduce工程中。工程里面用到的jar包来源于hadoop2.8自带的所有jar包。代码仅有一个wordcount.java,没有其他辅助配置性信息和java文件。代码关键部位如下图所示


其中入参和出参都在名为ars的字符串数组中定义了。而且那个入参要在linux服务器上真实存在,出参应该是个空的路径,否则会报路径已存在的错误。

问题的产生

当我运行这个java文件的时候,报错“HADOOP_HOME and hadoop.home.dir are unset”。然后我就懵逼了。

解决步骤

题外话:我一直认为,我本地的eclipse就是个调用远程hadoop的作用,所以本地的windows操作系统中不需要安装hadoop了。所以我看到这个HADOOP_HOME的时候一直不明白,难道我还需要在我本地安装一个hadoop吗????

其实答案是:是的。我倒霉就倒霉在没有在本地放一个hadoop。这个hadoop不需要安装,不需要像网上说的得先安装一个什么Cygwin(说个题外话,我始终认为,这个东西就是在windows上模拟一个类似linux的环境出来。然并卵。)。只需要找一个hadoop2.8的二进制包(官网上这个东西大概400多兆),解压放到你windows下的某处即可。

然后重点在这里,仅仅解压缩了这个hadoop的包还不够,还需要这俩东西:hadoop.dll和winutils.exe及其附属(hadoop.exp、hadoop.lib、hadoop.pdb、libwinutils.lib、winutils.pdb)。缺少会报错,我在报错前已经把这俩及其相关的东西都放上了,所以不知会报啥错。

有点扯远了,还说在本地放hadoop程序包的问题。只要解压了程序包,同时在你的环境变量中的系统变量中配置了HADOOP_HOME并且指向hadoop程序包的本目录即可(如我本机就是F:\work\software\linux\hadoop-2.8.0),并且在系统变量的path中附加了%HADOOP_HOME%/bin(这里一定要指向到bin这一级才行)就能在你的windows上运行wordcount程序了。

有的人仅仅配置了上一步还不够,还需要重启一下电脑才行。我就属于这部分的。。。

然后后面可能还会出一些其他jar包找不到的错误,从网上找一下放上就全都ok了。

感想

本地的hadoop其实真的真的没有参与干活儿。因为我连启动都没启动过本地的hadoop。但是在本地的hadoop所属盘符的根目录下生成了一系列的目录。虽然不知是啥原因,但我瞎想可能主要起到一个临时缓存的目的。

生成这个缓存路径的原因应该是hadoop本身系统的相关设置。或者准确来说,是mapreduce本身的设置决定的。要有一个缓存路径。所以在windows上设置hadoop_home的目的就是为了给这个缓存用的。

而且如果是在linux系统上执行wordcount的jar包的时候,应该会在服务器上生成这么一个缓存路径。

  • 5
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
### 回答1: 这个错误提示是因为本地的Spark连接服务器的Hive时,没有设置Hadoop环境变量HADOOP_HOMEHADOOP_HOME_DIR。需要在本地设置这两个环境变量,指向Hadoop的安装目录。具体的处理方法可以参考以下步骤: 1. 打开本地的环境变量设置界面,可以在“控制面板”-“系统和安全”-“系统”-“高级系统设置”-“环境变量”中找到。 2. 在系统变量中添加HADOOP_HOMEHADOOP_HOME_DIR两个变量,变量值分别为Hadoop的安装目录。 3. 重新启动Spark连接服务器的Hive,应该就可以正常连接了。 希望这个回答能够帮到你。 ### 回答2: 在本地使用Spark连接服务器上的Hive进行测试时,如果出现"hadoop_home"和"hadoop.home.dir"未设置的报错,可以按照以下步骤进行处理: 1. 首先,确认本地环境中是否已经配置了Hadoop的安装路径。在系统的环境变量中,设置"HADOOP_HOME"和"hadoop.home.dir"两个变量,分别指向Hadoop的安装目录。 2. 检查服务器上的Hive配置文件。在服务器上的Hive配置文件中,通常会设置"hadoop.home.dir"变量。确认该变量是否已正确设置,如果未设置或设置错误,需要进行修正。 3. 如果以上两个步骤都已经按照要求进行了设置,但问题仍然存在,可以尝试修改本地Spark的配置文件。 4. 找到本地Spark的配置文件(通常为spark-defaults.conf),添加以下配置信息: spark.hadoop.hadoop_home=<服务器上Hadoop的安装路径> spark.hadoop.hadoop.home.dir=<服务器上Hadoop的安装路径> 将上述两个配置项中的"<服务器上Hadoop的安装路径>"替换为服务器上Hadoop实际安装的路径。 5. 若服务器和本地操作系统不同,需要确保本地操作系统的安装路径与服务器上的Hadoop安装路径一致。 6. 保存并重新启动本地Spark,然后尝试连接服务器上的Hive进行测试,查看问题是否得到解决。 通过上述步骤,就可以处理本地Spark连接服务器Hive时出现的"hadoop_home"和"hadoop.home.dir"未设置的报错。 ### 回答3: 当本地Spark连接到服务器上的Hive进行测试时,可能会遇到"hadoop_home"和"hadoop.home.dir"未设置的报错。这是因为Spark需要正确地配置与Hadoop连接。以下是解决此问题的步骤: 1. 确保服务器上已经正确安装并配置了Hadoop。在服务器上设置hadoop_homehadoop.home.dir变量,确保路径正确指向Hadoop的安装位置。 2. 在本地Spark环境中,通过配置文件设置"hadoop_home"和"hadoop.home.dir"变量,使其与服务器上的设置一致。 3. 在Spark的conf目录下,找到spark-env.sh文件。如果找不到,可以复制spark-env.sh.template文件并将其重命名为spark-env.sh。 4. 编辑spark-env.sh文件,在其中添加以下内容,设置"hadoop_home"和"hadoop.home.dir"变量的值: export hadoop_home=<服务器上的Hadoop安装路径> export hadoop.home.dir=<服务器上的Hadoop安装路径> 请确保将"<服务器上的Hadoop安装路径>"替换为准确的Hadoop安装路径。 5. 保存并关闭spark-env.sh文件。 6. 重新启动本地Spark环境,并连接到服务器上的Hive。 通过以上步骤,你应该能够解决报错问题。记住,在设置"hadoop_home"和"hadoop.home.dir"变量时,确保路径正确指向服务器上的Hadoop安装位置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值