apache hadoop 2.6.4 64bit 在windows8.1下直接安装指南(无需虚拟机和cygwin)_Father Abraham的博客-程序员宅基地

技术标签: java SE&java EE&架构  java  apache  操作系统  windows 8  hadoop  javase  windows  64bit  大数据  互联网架构  机器学习&深度学习  

转载链接:官方文档


首先需要下载Apache hadoop 2.6.4的tar.gz包,到本地解压缩到某个盘下,注意路径里不要带空格。否则你配置文件里需要用windows 8.3格式的路径!

第二确保操作系统是64bit,已安装.netframework4.0以上版本,这个你懂的,微软的天下,没有这个怎么混!

第三确保安装了64 bit 版本的JDK1.8,笔者使用的就是JDK1.8.

第四请到github下载hadoop-commin-2.2.zip,官方下载的Apache hadoop 2.4.0的压缩包里,缺少windows下运行的链接库(hadoop.dll,winutils.exe,libwinutils.lib等),这个github的是大佬们编译好的64bit版的链接库包。下载直接解压缩,覆盖掉官方hadoop目录下的bin目录即可。

如果你想在windows下编译安装hadoop,则请直接参考官方原版文档:Hadoop2.X Windows安装指南

接下来进行配置(大部分摘抄自官方文档):

我的Hadoop解压缩目录是D:\tools\hadoop26,以下简称h_home

首先,修改%h_home%\etc\hadoop的hadoop-env.cmd脚本文件,在文件末尾增加环境变量定义。注意找到文件最初的JAVA_HOME设置,改成你的64位JDK路径,这一点一定要注意!比如我的:“set  JAVA_HOME=E:\java\tools1\java”plain

 

set HADOOP_PREFIX=D:\tools\hadoop26  
set HADOOP_CONF_DIR=%HADOOP_PREFIX%\etc\hadoop  
set YARN_CONF_DIR=%HADOOP_CONF_DIR%  
set PATH=%PATH%;%HADOOP_PREFIX%\bin  

附上修改之后的hadoop-env.cmd

@echo off
@rem Licensed to the Apache Software Foundation (ASF) under one or more
@rem contributor license agreements.  See the NOTICE file distributed with
@rem this work for additional information regarding copyright ownership.
@rem The ASF licenses this file to You under the Apache License, Version 2.0
@rem (the "License"); you may not use this file except in compliance with
@rem the License.  You may obtain a copy of the License at
@rem
@rem     http://www.apache.org/licenses/LICENSE-2.0
@rem
@rem Unless required by applicable law or agreed to in writing, software
@rem distributed under the License is distributed on an "AS IS" BASIS,
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@rem See the License for the specific language governing permissions and
@rem limitations under the License.


@rem Set Hadoop-specific environment variables here.


@rem The only required environment variable is JAVA_HOME.  All others are
@rem optional.  When running a distributed configuration it is best to
@rem set JAVA_HOME in this file, so that it is correctly defined on
@rem remote nodes.


@rem The java implementation to use.  Required.
set JAVA_HOME=E:\java\tools1\java


@rem The jsvc implementation to use. Jsvc is required to run secure datanodes.
@rem set JSVC_HOME=%JSVC_HOME%


@rem set HADOOP_CONF_DIR=


@rem Extra Java CLASSPATH elements.  Automatically insert capacity-scheduler.
if exist %HADOOP_HOME%\contrib\capacity-scheduler (
  if not defined HADOOP_CLASSPATH (
    set HADOOP_CLASSPATH=%HADOOP_HOME%\contrib\capacity-scheduler\*.jar
  ) else (
    set HADOOP_CLASSPATH=%HADOOP_CLASSPATH%;%HADOOP_HOME%\contrib\capacity-scheduler\*.jar
  )
)


@rem The maximum amount of heap to use, in MB. Default is 1000.
@rem set HADOOP_HEAPSIZE=
@rem set HADOOP_NAMENODE_INIT_HEAPSIZE=""


@rem Extra Java runtime options.  Empty by default.
@rem set HADOOP_OPTS=%HADOOP_OPTS% -Djava.net.preferIPv4Stack=true


@rem Command specific options appended to HADOOP_OPTS when specified
if not defined HADOOP_SECURITY_LOGGER (
  set HADOOP_SECURITY_LOGGER=INFO,RFAS
)
if not defined HDFS_AUDIT_LOGGER (
  set HDFS_AUDIT_LOGGER=INFO,NullAppender
)


set HADOOP_NAMENODE_OPTS=-Dhadoop.security.logger=%HADOOP_SECURITY_LOGGER% -Dhdfs.audit.logger=%HDFS_AUDIT_LOGGER% %HADOOP_NAMENODE_OPTS%
set HADOOP_DATANODE_OPTS=-Dhadoop.security.logger=ERROR,RFAS %HADOOP_DATANODE_OPTS%
set HADOOP_SECONDARYNAMENODE_OPTS=-Dhadoop.security.logger=%HADOOP_SECURITY_LOGGER% -Dhdfs.audit.logger=%HDFS_AUDIT_LOGGER% %HADOOP_SECONDARYNAMENODE_OPTS%


@rem The following applies to multiple commands (fs, dfs, fsck, distcp etc)
set HADOOP_CLIENT_OPTS=-Xmx512m %HADOOP_CLIENT_OPTS%
@rem set HADOOP_JAVA_PLATFORM_OPTS="-XX:-UsePerfData %HADOOP_JAVA_PLATFORM_OPTS%"


@rem On secure datanodes, user to run the datanode as after dropping privileges
set HADOOP_SECURE_DN_USER=%HADOOP_SECURE_DN_USER%


@rem Where log files are stored.  %HADOOP_HOME%/logs by default.
@rem set HADOOP_LOG_DIR=%HADOOP_LOG_DIR%\%USERNAME%


@rem Where log files are stored in the secure data environment.
set HADOOP_SECURE_DN_LOG_DIR=%HADOOP_LOG_DIR%\%HADOOP_HDFS_USER%


@rem The directory where pid files are stored. /tmp by default.
@rem NOTE: this should be set to a directory that can only be written to by 
@rem       the user that will run the hadoop daemons.  Otherwise there is the
@rem       potential for a symlink attack.
set HADOOP_PID_DIR=%HADOOP_PID_DIR%
set HADOOP_SECURE_DN_PID_DIR=%HADOOP_PID_DIR%


@rem A string representing this instance of hadoop. %USERNAME% by default.
set HADOOP_IDENT_STRING=%USERNAME%





之后在该路径下找到或创建core-site.xml文件,修改内容如下:

<configuration>  
  <property>  
    <name>fs.default.name</name>  
    <value>hdfs://0.0.0.0:9000</value>  
  </property>  
</configuration>  




接下来是 hdfs-site.xml 文件,一样的修改内容如下。配置文件默认使用\tmp目录作为hdfs文件的存储位置,比如我解压hadoop在E:\下,则它就会创建E:\tmp来存放HDFS文件系统。
<configuration>  
  <property>  
    <name>dfs.replication</name>  
    <value>1</value>  
  </property>  
</configuration>  





基本配置ok。
接下来我们配置一个YARN示例:
还是在该配置文件路径下,修改或者创建一个mapred-site.xml文件,路径下有个同名的模板文件,可以直接复制,然后修改其中的内容。注意替换配置文件中%USERNAME% 为你windows的用户名。默认是Administrator.
<configuration>  
  
   <property>  
     <name>mapreduce.job.user.name</name>  
     <value>%USERNAME%</value>  
   </property>  
  
   <property>  
     <name>mapreduce.framework.name</name>  
     <value>yarn</value>  
   </property>  
  
  <property>  
    <name>yarn.apps.stagingDir</name>  
    <value>/user/%USERNAME%/staging</value>  
  </property>  
  
  <property>  
    <name>mapreduce.jobtracker.address</name>  
    <value>local</value>  
  </property>  
  
</configuration>  





最后,创建yarn-site.xml文件,变更内容如下:
<configuration>  
  <property>  
    <name>yarn.server.resourcemanager.address</name>  
    <value>0.0.0.0:8020</value>  
  </property>  
  
  <property>  
    <name>yarn.server.resourcemanager.application.expiry.interval</name>  
    <value>60000</value>  
  </property>  
  
  <property>  
    <name>yarn.server.nodemanager.address</name>  
    <value>0.0.0.0:45454</value>  
  </property>  
  
  <property>  
    <name>yarn.nodemanager.aux-services</name>  
    <value>mapreduce_shuffle</value>  
  </property>  
  
  <property>  
    <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>  
    <value>org.apache.hadoop.mapred.ShuffleHandler</value>  
  </property>  
  
  <property>  
    <name>yarn.server.nodemanager.remote-app-log-dir</name>  
    <value>/app-logs</value>  
  </property>  
  
  <property>  
    <name>yarn.nodemanager.log-dirs</name>  
    <value>/dep/logs/userlogs</value>  
  </property>  
  
  <property>  
    <name>yarn.server.mapreduce-appmanager.attempt-listener.bindAddress</name>  
    <value>0.0.0.0</value>  
  </property>  
  
  <property>  
    <name>yarn.server.mapreduce-appmanager.client-service.bindAddress</name>  
    <value>0.0.0.0</value>  
  </property>  
  
  <property>  
    <name>yarn.log-aggregation-enable</name>  
    <value>true</value>  
  </property>  
  
  <property>  
    <name>yarn.log-aggregation.retain-seconds</name>  
    <value>-1</value>  
  </property>  
  
  <property>  
    <name>yarn.application.classpath</name>  
    <value>%HADOOP_CONF_DIR%,%HADOOP_COMMON_HOME%/share/hadoop/common/*,%HADOOP_COMMON_HOME%/share/hadoop/common/lib/*,%HADOOP_HDFS_HOME%/share/hadoop/hdfs/*,%HADOOP_HDFS_HOME%/share/hadoop/hdfs/lib/*,%HADOOP_MAPRED_HOME%/share/hadoop/mapreduce/*,%HADOOP_MAPRED_HOME%/share/hadoop/mapreduce/lib/*,%HADOOP_YARN_HOME%/share/hadoop/yarn/*,%HADOOP_YARN_HOME%/share/hadoop/yarn/lib/*</value>  
  </property>  
</configuration>  





ok,全部配置都改完了。点击命令提示符(管理员)运行命令提示符,切换到hadoop的安装目录。进行以下操作
1、切换到etc/hadoop目录,运行hadoop-env.cmd脚本,设置当前命令窗口执行环境变量。
2、格式化HDFS文件系统(建议切换到bin目录然后执行命令):

%HADOOP_PREFIX%\bin\hdfs namenode -format  

3、运行HDFS示例:  

%HADOOP_PREFIX%\sbin\start-all.cmd  
运行结果:






检查进程,会有一个显示不出名字,正常情况:



安装如下的插件winutils.exe和hadoop.dll到D:\tools\hadoop26\bin 这个目录下面:


打开eclipse ,前提要安装可视化插件,如下配置eclipse




新建一个mapreduce项目,将如下的代码复制到项目当中:

import java.io.IOException;
import java.util.StringTokenizer;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Mapper.Context;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

public class mywc {
	
	
	//mapper类  
	  public static class TokenizerMapper   
	       extends Mapper<Object, Text, Text, IntWritable>{  
	      
	    private final static IntWritable one = new IntWritable(1);  
	    private Text word = new Text();  
	        
	    public void map(Object key, Text value, Context context  
	                    ) throws IOException, InterruptedException {  
	      StringTokenizer itr = new StringTokenizer(value.toString());  
	      while (itr.hasMoreTokens()) {  
	        word.set(itr.nextToken());  
	        context.write(word, one);  
	      }  
	    }  
	  }  
	    
	//reducer类  
	  public static class IntSumReducer   
	       extends Reducer<Text,IntWritable,Text,IntWritable> {  
	    private IntWritable result = new IntWritable();  
	  
	    public void reduce(Text key, Iterable<IntWritable> values,   
	                       Context context  
	                       ) throws IOException, InterruptedException {  
	      int sum = 0;  
	      for (IntWritable val : values) {  
	        sum += val.get();  
	      }  
	      result.set(sum);  
	      context.write(key, result);  
	    }  
	  }  
	   public static void main(String[] args) throws Exception {  
	    Configuration conf = new Configuration();  
	    if (args.length<2) {
			System.out.println("sb,请您输入两个路径,一个是为了文件输入的路径,一个是程序运行结果的路径。");
		}
	    Job job = new Job(conf, "word count");  
	    job.setJarByClass(mywc.class);  
	    job.setMapperClass(TokenizerMapper.class);  
	    job.setCombinerClass(IntSumReducer.class);  
	    job.setReducerClass(IntSumReducer.class);  
	    job.setOutputKeyClass(Text.class);  
	    job.setOutputValueClass(IntWritable.class);  
	    FileInputFormat.addInputPath(job, new Path(args[0]));
	    FileOutputFormat.setOutputPath(job, new Path(args[1]));
	      
	    System.exit(job.waitForCompletion(true) ? 0 : 1);  
	    
	     }  

}

得到如下的结果:


水完收工。


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u014028392/article/details/76923980

智能推荐

[jenkins]-jenkins通过curl参数化构建job_爷来辣的博客-程序员宅基地

由于公司模块有20几个,每次发布都要手工发布,发一排,还有选项参数,先编译后发布,比较浪费时间,还容易漏掉.来来回回发两遍,代码有问题还要再来一次.打算用shell 写个for循环通过curl去批量构建服务.插件官网地址 没有找到相关的信息 就自己琢磨了下https://wiki.jenkins.io/display/JENKINS/Build+Token+Root+Plugin...

红米4A全版本通刷_2016111 2016112_官方线刷包_救砖包_解账户锁_13428282441的博客-程序员宅基地_红米4a救砖包

红米4A线刷包解账户锁下载地址:https://pan.baidu.com/s/1PCZRx_Gsrhyr59AAkRWBhw刷机包+平台+驱动+教程,全部打包在一起下载解压后,按照刷机教程进行刷机

符号转型_qq_35751236的博客-程序员宅基地

unsigned a = 1; int b = -1; a * b = 2^(32)-1; //由有符号数转换为带符号的整数-1的的补码形式为:1111 1111 1111 1111 1111 1111 1111 1111 原码:1000 0000 0000 0000 0000 0000 0000 0001

python安装_windows fbprophet安装(pystan)_Alex.Deng的博客-程序员宅基地_pystan安装

1. pystan安装参照官网一步步使用conda安装即可,主要命令如下:# 管理员打开ananconda prompt# 1.安装MingW-w64编译器类型:conda install libpython m2w64-toolchain -c msys2# 检查你的虚拟环境路径下\Lib\distutils中是否有distutils.cfg文件,如果没有就手动创建一个# 2. conda install numpy cython -c conda-forge# 3.cond

一键刷入twrp_小米/红米手机到手了该怎么解锁和刷 twrp_weixin_39914975的博客-程序员宅基地

资源准备:1.百度搜索小米解锁申请,进行申请解锁并下载解锁工具。如图。文件夹里有对应的驱动,要安装好。2.对应机型的 twrp。在 w大的微博下找(wzsx150)或者在酷安找或者去twrp官网。3.edxp相关的包(两个)(不需要框架的可以忽略)4.手(第一步:用各种方法备份手机所有数据(重要!!!)解锁会清除手机所有数据!!!第二步:开发者模式里打开 oem解锁,解锁状态里绑定账号(必须是解锁...

史上最全的Java从入门到精通,播放最多的Java视频教程_ZZZAILE的博客-程序员宅基地

“Java Planform Standard Edition”是Java语言的标准平台技术,是所有Java开发的语言基础,更是大数据、分布式开发思想建模的初期,此阶段的Java语义、语法,会充斥在大型企业级架构中的各个环节,是Java开发的核心内容。怎么学JavaJava是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。JavaSE编程基础DOS常用命令 安装JDK、设置环境变..

随便推点

c#数据类型转换,BYTE,float,double,char类型间的转换方_lionzl的博客-程序员宅基地

  c#数据类型转换,BYTE,float,double,char类型间的转换方<br /><br />原文地址:http://blog.csdn.net/jiaao/archive/2008/06/25/2585710.aspx<br />最近由于编程的需要,对 C# 的类型转换做了一些研究,其内容涉及 C# 的装箱/拆箱/别名、数值类型间相互转换、字符的 ASCII 码和 Unicode 码、数值字符串和数值之间的转换、字符串和字符数组/字节数组之间的转换、各种数值类型和字节数组之间

python中导入包中的__init__文件夹的一个重要作用(去年对文件名的导入)_Takoony的博客-程序员宅基地_init文件夹

问题来源:使用bayes包时,发现可以直接导入包名然后跳过文件名,直接引入文件中定义类;假如说包名为bayes_opt,该文件夹目录下,存在一个文件名为bayesian_optimization;该文件中定义一个类名为BayesionOptimization; 在应用程序中可以直接导入from bayes_opt import BayesianOptimization可以看到直接跃...

Spring RedisTemplate 执行lua脚本时报错, 如下异常信息栈, 主要原因是没有设置对应的lua执行结果类型导致的_一个有梦想的男人的博客-程序员宅基地

Spring RedisTemplate 执行lua脚本时报错, 如下异常信息栈, 主要原因是没有设置对应的lua执行结果类型导致的,做个笔记吧 script = new DefaultRedisScript&lt;&gt;(); // script.setResultType(Boolean.class); 这个设置很重要的哦 script...

java两个等于号表示_javaScript中两个等于号和三个等于号之间的区别介绍_1391377967的博客-程序员宅基地

一言以蔽之:==先转换类型再比较,===先判断类型,如果不是同一类型直接为false。===表示恒等于,比较的两边要绝对的相同alert(0 == ""); // truealert(0 == false); // truealert("" == false); // truealert(0 === ""); // falsealert(0 === false); // falsealert(""...

C++&nbsp;STL之vector详解_腊肉炖萝卜的博客-程序员宅基地

很详细原文地址:STL之vector详解">C++ STL之vector详解作者:naxiaoli2012Vectors   vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。为了可以使用

海伦公式的证明——杨子曰数学_杨子曰的博客-程序员宅基地

海伦公式的证明S△ABC=12absincS△ABC=12absin⁡cS_{△ABC}=\frac{1}{2}ab \sin c S△ABC=12ab1−cos2c−−−−−−−−√S△ABC=12ab1−cos2⁡cS_{△ABC}=\frac{1}{2}ab\sqrt{1-\cos^2 c} S△ABC=12ab1−(a2+b2−c2)24a2b2−−−−−−−−−−−−−−−√S...

推荐文章

热门文章

相关标签