得到理解:
1.软件框架具备了若干如同但尚不够称为一个完整软件的功能
2.大部分网上的问题不得精要、浮在水面
3.编程可以在Unix,Linux或者Windows的Cygwin中进行,Cygwin的核是Unix的
4.让用Hadoop的方式在Cygwin环境中安全有效操作一个计算机集群上的存储的数据此事成为可能就是Hadoop配置
5.计算一个问题总的运算量一定的快的方法是把不同的计算阶段分配给不同功能体人或者计算机
6.通过设置环境变量将诸多不同应用程序在Dos中切换使用
7.Unix目录使用斜杠/Windows使用反斜杠\
---------------------------------------------------------------------------------------------------------------------------------------------------------
目的:
1.分Map和Reduce两层的好处:简单来看就是做了键值转换(k1,V1)--map--(K2,V2)--reduce--(K3,V3)
2.和别的编程方式不同,令习惯另外编程模型的程序员不习惯的到底是什么:不知道
3.MapReduce除去用在传统的文本处理领域还能怎么用,什么情况下不应该选择用它,为什么
4.熟悉MapReduce编程
=============================================================================
Part 1 :阅读Hadoop的技术文档
1.Map是Java中一个利用(键,值)二元组处理项的接口。Hadoop中的Map和Reduce都继承自MapReduceBase它们都继承自Java基本接口Map。
2.编MapReduce的程序实际上就是编使用它们事先定义好的若干类,并且使用MapReduce的那种模型的程序。
3.MapReduce十分强调文件读入和写出两个部分,因为处理的数据要么来自云要么来自你建立的计算机集群,虽然Hadoop会帮你分摊掉一部分调优的任务,但是你仍然需要根据自己处理的任务的特色从集群上读出大块的数据写出成你需要的源自基础数据的内容。
----------------------------------------------------------------------------------------------------------------------------------------------------------
4.Hadoop2.5.1版本文件夹中的内容。
4.1 bin文件夹,4个命令函数hadoop,hdfs,mapred,yarn,还有3.个不能在命令行下运行container-excutor,rcc,test-container-excutor。基本命令。
4.2 sbin文件夹,7个启动、关闭文件系统的命令hdfs-config,star-all,start-dfs,start-yarn,stop-all,stop-dfs,stop-yarn,以及unix个守护进程、标记文档、更新主节点、关闭均衡器、关闭域名系统的shell命令hadoop-daemons,hadoop-daemon,httpfs,mr-jobhistory-daemon,refresh-namenode,slaves,stop-banlancer,stop-secure-dns,yarn-daemon,yarn-daemons。满足Hadoop管理需求。
4.3 conf文件夹是我自己添加上去的,Pig也需如此,复制自文件夹etc,是不好分类的依然重要的命令。
包含4个环境变量配置文档hadoop-env,httpfs-env,mapred-env,yarn-env;
2个sll例子ssl-server-xml-example,ssl-client-xml-example;
6个配置显示的网页文档capacity-scheduler,core-site,hadoop-policy,hdfs-site,httpfs-site,yarn-site;
2个xml文档中的显表,mapred-queues,mapred-site;
1个流程控制图container-excutor;
4个特性文档hadoop-metrics,hadoop-metrics2,httpfs-log4j,log4j;
1个加密问答httpfs-signature。还有一个slaves不懂。
4.4 include文件夹包含C的一个头文档:hdfs;C++的四个头文档:Pipes,SerialUtils,StringUtils,Templatefactory
4.5 lib文件夹下只有一个文件夹native,包含四个静态库A文档:libhadoop,libhadooppipes,libhadooputils,libhdfs,两个动态库SO文档:libhadoop,libhdfs;一个静态链接o文档:libhdfs.so。是几个Linux库文档。
4.6 share文件夹下两个文件夹doc和hadoop。实战的作者讲到的诸多实用功能就放在这里面。
4.6.1 先说Hadoop下六个模块:common,hdfs,httpfs,mapreduce,tools,yarn。
我在看到6章的时候发现一些对job和task的监控页面。
share\hadoop\hdfs\webapps:这里面有datanode和secondary,里面有监控的页面,可是因为没有配置成功没有显示内容。
发现这里面的文档结构层层叠叠的,非漂亮的。因为计算机文档的话,就同一个文件,就比如Java 就有Java文件,Class文件两层,再加上各种介绍文件就越多了。
share\hadoop\mapreduce\hadoop-mapreduce-examples-2.5.1\org\apache\hadoop\examples这里面装的全是mapreduce的类文件,下面还有三个文件夹dancing,pi,terasort,dancing下面还有我熟悉的sudok,columnconstraint,conlumnname等类我自己简单级别的100个还没有玩完,还有中等级别,高等级别各100个。pi下面主要定义了一些数学函数,求距离,求最值,在一个机器上的,以及多个机器之间的。pi下面有个math文件夹里面放的基本就是Bellard求和之类的。TeraSort下面放的是TeraSort排序算法。
share\hadoop\mapreduce\sources里面包含一些可执行的压缩文档,shuffle的就包含在里面,但是不知道具体执行这些文档会怎样。
share\hadoop\yarn这里包括server端的和client端的测试、节点管理、接口等等。
share\hadoop\tools\sources包含mapreduce作业链接的datajoin和streaming。
4.6.2Doc下面主要是描述文档,对于那一块有疑问就可以读这里面的文档:
/share/doc/hadoop/api/allclasses-frame.html这个页面里面存放了几乎所有会用的Java类定义。包括Mapper,Reducer等一共745个类。
4.7 最后一个Libexec,五类配置文档:hadoop-config,hdfs-config,httpfs-config,mapred-config,yarn-config。
5. 使用Streaming API就可以用Java之外的语言进行Hadoop编程了。
6. 写MapReduce程序(Mapper,Reducer,Partitioner,Combiner)时考虑Hadoop的构造模块 (NameNode,DataNode,
SeconderyNamenode,Jobtracker,TaskTracker)
----------------------------------------------------------------------------------------------------------------------------------------------------------
Part 2:开始Hadoop配置
1.可以修改Cygwin中的字体使之更舒服吗?通过设置环境变量我把Cgywin也放进了cmd下面,这样我就很方便的在一个工作空间中做不同的事情了,免去了切换,这样就节省了时间。
2.常用的shell命令重温:history查看所有操作历史。Cgywin可写程序、可写文档、可执行程序真是方便。大小写敏感。
3.为Cygwin安装SSH,其背后是一系列的加密算法。在这里下载了OpenSSH。安装配置SSH就是保证一个集群的安全通信。Hadoop实战中没有详细讲解。
4.Hadoop的安装配置过程就是搞懂etc或者conf文件夹下的那些文档都是干什么用的。
5. cat 一个jar文件会出现乱码。hadoop-mapreduce-client-common-2.5.1这个文件太大了,估计在跑,这个可执行的文件 有648KB。20分钟过去了Cygwin终端依然显示未响应。关闭终端,这时候依赖Windows操作系统。仔细看各种打包文件的名字其实不一样有zip,gz,rar。这有什么差别。而且我会经常见到dll这个文件,这和cmd文件和exe文件又有什么区别,都想知道。而且就是一样的exe文件,它们的图标会不一样,比如Java/bin文件夹下面javaw和java-rmi.
6.我在下载文档中发现jdk-8u20-windows-i586.exe文件,看别人配环境变量的时候直接指到这个,我怎么在安装Java文件夹下面没有发现这个。打开以下这个文件会发生什么。这是Java JKD的安装程序。现在它开始更新了。Java我已经安装成功了,可以在cmd中进行javac和java命令。如果我要在Eclipse中直接运行一个MapReduce程序可以吗?
7.在Emacs中有个好处,可以编辑Latex,其实在工作中是需要公式推导的,Latex写出来的数学符号漂亮,用它沟通不是很好。我想只要是一个环境总能运行各种不同的程序,我会更喜欢能用Latex的环境,可是,Emacs中能运行Hadoop吗?反正都是Unix的环境。而Emacs呢是个支持lisp语言的环境,还是可以支持多种语言?我这里说到Emacs是因为我的Cgywin中显示的默认目录是c:\emacs,我都不知道是为什么。Emacs中的主菜单有个叫Buffer的。感觉自己在Emacs中编辑器中出不来了。Emacs操作的过程中命令不显示,如果需要组合几个的就会显示,就是命令比较长的时候会显示出来。原来Emacs的两个框,下面的一个会显示命令的不知道叫什么,上面的框就叫做缓冲区。反正我觉得几种语言都是可以同时用的嘛。现在想把Emacs也放进Dos,这样会好吗?
8.当我尝试用Dos代替Cygwin时,在配置hadoop的环境变量时,运行hadoop-env文件时,出现The NTVDM CPU has encountered an illegal instruction.CS:05dc IP:0101 OP:65 63 68 6f 20 Choose 'Close' to terminate the application.然后字就变
得很大很难看。原来我在改的过程中把cmd不小心改成exe了,再改回去,没有报错,但是环境变量生效了吗?还是不对。先不管环境变量,Java安装成功了,Jar可以成功运行了,那么为什么还要依赖Hadoop命令呢,干脆直接运行一个jar文件
好了。我们直接去运行mapreduce中的例子Jar。还有直接是class文档,那我们试一下Java命令好了,选一个懂得名字的函数。我运行了一个WordCount的类文件,显示找不到或无法加载主类。再选出一个比较小的jar文档至classpath文档下,显示非法
选项h,在纯粹的Java中Jar看起来是归并多个类文件用的。Hadoop框架下的Jar应该很不相同。
9.我们在Cygwin环境中已经配置成功了JAVA_HOME,我们看看有哪些功能能用,自己考虑过去不可能有用的,因为SSH没有配置成功,单机模式,伪分布模式都没有配,不会配。全分布模式不可能。Dos中的Bash看起来很顺眼。这时候试一下hadoop
jar怎么样。打算执行出第一个Hadoop程序,但是作者看起来能找到源码,我一直没有找到源码只找到的是class文件。而且他在试运行的过程中还另外建立了目录不知道出于怎样的目的,而且还有文本文档不知道如何被Java程序调用的。
10.区分JAVA_HOME和Window的环境PATH。这时候又遇到问题,Java前面都好好的,现在又说需要1.6的jre而不是1.8的jre。
我决定给它安个新的Jre1.8.但是我在安装JDK的时候已经安装Jre了。删掉了Java1.6相关的注册表值,昨天由于着急把1.6删除
的时候没有按照正常程序来,真是。还是环境变量的问题,jre的环境变量确实没有写对。在JDK\bin下面的jre和JRE是不一样的啊。还是没有理解JDK和JRE。又改了一下Windos的JAVA_HOME.Windows实在是太笨了,感觉投机取巧,我把jre1.6清理干净,帮它找到了java.dll的位置,它傲娇的告诉我需要给java.dll设置默认的程序来打开它,我让它自己显示了一遍jre的文件夹,它终于承认java命令不需要1.6版本。这下windows和bash中都能运行Java程序了。对于Windows和Bash的JAVA_HOME应该一样吗我应该把它们设置成jdk的bin呢还是jre的bin呢还是java包含jdk和jre的目录呢?就顾名思义,JAVA_HOME那应该是包含jdk和jre的java,但是我在想我是在给hadoop或者pig配置环境变量,前面我是在给window配置环境变量,给windows配置环境变量是为了不管在什么目录下java/bin下面的命令都能使用,那么给Hadoop配置环境变量的目的是什么呢?现在连hadoop version都是不能用的。它显示找不到一个错误的路径地址,那个路径里面的斜杠号没有,其实仔细观察发现,windows和bash的路径用的斜杠号倾斜方向不一样。调整下bash环境变量中的JAVA_HOME.可是我要不要把bin放上去呢,现实就变成了在window中的bash的hadoop的java但是不管怎么着是要访问javabin中的命令的,可能会有两种情况(1)这个Javahome就是它直接要去访问的目录(2)它还要访问下jre,就这种情况我看了jre的bin里面的exe文档java有,但是javacpl,jdk中就没有,所以需要jre也是有可能的。其实问题就是Hadoop需要不需要jre。我不知道。看它的错误提示的话,Hadoop自己添加上去的斜杠号后面的bin所以感觉它假设不需要细到bin这一层,那我就不到这一层了,也就是不写bin了。调整了斜杠方向之后,它的输出发生了变化。对于目录中的空格它不能识别,那我就在Program Files的中间m后面加一个斜杠号。JAVA_HOME=C:/Program\ Files/Java/jdk1.8.0_20 加成window的斜杠号。调整成这样之后,它显示又变了,找不到或无法加载主类,难道还需要配置hadoop的home以及其他配置,它直接提示错误。试了几个命令都是一样,找不到或者无法加载主类在org.apache.hadoop下面。但是总归Bash的JAVA_HOME配置成功了。
11.share\doc\hadoop\api\org\apache\hadoop中有上面命令提示的目录,但是下面全是html文件,也没法执行。难道html文件这里被当成源码文件了,我打开它的时候它也就是源码文档。有一个问题是classpath里面没有doc,回看第一部分的4.6.2。
阅读Hadoop环境变量配置文档除了JAVA_HOME之外还有18个环境变量需要配置!如果要高效地进行MapReduce编程的话。而这仅是hadoop.sh一项
JSVC_HOME,不知道jsvc是什么,但是要想安全地运行datanodes就需要这个,揣测是java和c的链接。
HADOOP_CONF_DIR,配置文件目录,估计dos里面老是提示错误我都觉得和这个没有设置有关系。
HADOOP_HOME,
HADOOP_CLASSPATH,运行的classpath里面已经有很多内容了,但是我并没有在这里写的,估计它会把访问过的一些存放文档的目录记下来。
HADOOP_HEAPSIZE,
HADOOP_NAMENODE_INIT_HEAPSIZE,这是堆的大小默认是1000
HADOOP_OPTS=“HADOOP_OPTS -Djava.net.preferIPv4Stack=true”这个hadoop的选项里面存放javanet相关的内容如果ipv4的堆栈就存放在这个目录下面的意思。因为还有ipv6,这里估计就是考虑两个不同的IP协议,估计大部分的都是ipv6的了,那就需要把v4存到另外一个地方。
HADOOP_SECURITY_LOGGER
HDFS_AUIT_LOGGER,
HADOOP_DATANOTE_OPTS="-Dhadoop.security.logger=ERROR,RFA HADOOP_DATANOTE_OPTS"这里表示数据节点要么出错要么是RFA的
HADOOP_SECONDARYNAMEDODE_OPTS=“-XX:-UsePerfData”,这个是二级节点选项啊
HADOOP_NFS3_OPTS="HADOOP_NFS3_OPTS"这个感觉是文件,新文件的选项
HADOOP_PORTMAP_OPTS="-Xmx512m HADOOP_PORTMAP_OPTS"这是一个端口选项
HADOOP_CLIENT_OPTS=“-Xmx512m HADOOP_CLIENT_OPTS”前面是个标示,不知道干嘛的
HADOOP_JAVA_PLATFORM_OPTS,这个就是hadoop-java平台的综合选项
HADOOP_SECURE_DN_USER,
HADOOP_LOG_DIR,日志存放的目录
HADOOP_SECURE_DN_USER,
HADOOP_PID_DIR,这个在hadoop_mapred_pid_dir中也是有的,pid到底是干什么的?
HADOOP_SECURE_DN_PID_DIR,
HADOOP_IDENT_STRING,这个在hadoop_map_string中也有的。
[待续]