hadoop 可否android 使用openjdkk

当开始着手实践 Hadoop 时,安装 Hadoop 往往会成为新手的一道门槛。尽管安装其实很简单,书上有写到,官方网站也有 Hadoop 安装配置教程,但由于对 Linux 环境不熟悉,书上跟官网上简略的安装步骤新手往往 Hold 不住。加上网上不少教程也甚是坑,导致新手折腾老几天愣是没装好,很是打击学习热情。
本教程适合于原生 Hadoop 2,包括 Hadoop 2.6.0, Hadoop 2.7.1 等版本,主要参考了,步骤详细,辅以适当说明,相信按照步骤来,都能顺利安装并运行Hadoop。另外有方便有基础的读者快速完成安装。此外,希望读者们能多去了解一些
Linux 的知识,以后出现问题时才能自行解决。本教程由出品,转载请注明。
本教程使用&Ubuntu 14.04 64位&作为系统环境(Ubuntu 12.04 也行,32位、64位均可),请自行安装系统(可参考)。
如果用的是 CentOS/RedHat 系统,请查看相应的。
本教程基于原生 Hadoop 2,在&Hadoop 2.6.0 (stable)&版本下验证通过,可适合任何 Hadoop 2.x.y 版本,例如 Hadoop 2.4.1。
装好了 Ubuntu 系统之后,在安装 Hadoop 前还需要做一些必备工作。
创建hadoop用户
如果你安装 Ubuntu 的时候不是用的 “hadoop” 用户,那么需要增加一个名为 hadoop 的用户。
首先按&ctrl+alt+t&打开终端窗口,输入如下命令创建新用户 :
这条命令创建了可以登陆的 hadoop 用户,并使用 /bin/bash 作为 shell。
Ubuntu终端复制粘贴快捷键
在Ubuntu终端窗口中,复制粘贴的快捷键需要加上 shift,即粘贴是 ctrl+shift+v。
接着使用如下命令设置密码,可简单设置为 hadoop,按提示输入两次密码:
可为 hadoop 用户增加管理员权限,方便部署,避免一些对新手来说比较棘手的权限问题:
最后注销当前用户(点击屏幕右上角的齿轮,选择注销),在登陆界面使用刚创建的 hadoop 用户进行登陆。
用 hadoop 用户登录后,我们先更新一下 apt,后续我们使用 apt 安装软件,如果没更新可能有一些软件安装不了。按 ctrl+alt+t 打开终端窗口,执行如下命令:
若出现如下 “Hash校验和不符” 的提示,可通过更改软件源来解决。若没有该问题,则不需要更改。
Ubuntu更新软件源时遇到Hash校验和不符的问题
点击查看:如何更改软件源
后续需要更改一些配置文件,我比较喜欢用的是 vim(vi增强版,基本用法相同),建议安装一下(如果你实在还不会用 vi/vim 的,请将后面用到 vim 的地方改为 gedit,这样可以使用文本编辑器进行修改,并且每次文件更改完成后请关闭整个 gedit 程序,否则会占用终端):
安装软件时若需要确认,在提示处输入 y 即可。
通过命令行安装软件
安装SSH、配置SSH无密码登陆
集群、单节点模式都需要用到 SSH 登陆(类似于远程登陆,你可以登录某台 Linux 主机,并且在上面运行命令),Ubuntu 默认已安装了 SSH client,此外还需要安装 SSH server:
安装后,可以使用如下命令登陆本机:
此时会有如下提示(SSH首次登陆提示),输入 yes 。然后按提示输入密码 hadoop,这样就登陆到本机了。
SSH首次登陆提示
但这样登陆是需要每次输入密码的,我们需要配置成SSH无密码登陆比较方便。
首先退出刚才的 ssh,就回到了我们原先的终端窗口,然后利用 ssh-keygen 生成密钥,并将密钥加入到授权中:
在 Linux 系统中,~ 代表的是用户的主文件夹,即 “/home/用户名” 这个目录,如你的用户名为 hadoop,则 ~ 就代表 “/home/hadoop/”。 此外,命令中的 # 后面的文字是注释。
此时再用&ssh localhost&命令,无需输入密码就可以直接登陆了,如下图所示。
SSH无密码登录
安装Java环境
Java环境可选择 Oracle 的 JDK,或是 OpenJDK,按中说的,新版本在
OpenJDK 1.7 下是没问题的。为图方便,这边直接通过命令安装 OpenJDK 7。
JRE和JDK的区别
JRE(Java Runtime Environment,Java运行环境),是运行 Java 所需的环境。JDK(Java Development Kit,Java软件开发工具包)即包括 JRE,还包括开发 Java 程序所需的工具和类库。
安装好 OpenJDK 后,需要找到相应的安装路径,这个路径是用于配置 JAVA_HOME 环境变量的。执行如下命令:
该命令会输出一个路径,除去路径末尾的 “/bin/javac”,剩下的就是正确的路径了。如输出路径为 /usr/lib/jvm/java-7-openjdk-amd64/bin/javac,则我们需要的路径为 /usr/lib/jvm/java-7-openjdk-amd64。
接着配置 JAVA_HOME 环境变量,为方便,我们在 ~/.bashrc 中进行设置(扩展阅读:&):
在文件最前面添加如下单独一行(注意 = 号前后不能有空格),将“JDK安装路径”改为上述命令得到的路径,并保存:
如下图所示(该文件原本可能不存在,内容为空,这不影响):
配置JAVA_HOME变量
接着还需要让该环境变量生效,执行如下代码:
设置好后我们来检验一下是否设置正确:
如果设置正确的话,$JAVA_HOME/bin/java -version&会输出 java 的版本信息,且和&java
-version&的输出结果一样,如下图所示:
成功配置JAVA_HOME变量
这样,Hadoop 所需的 Java 运行环境就安装好了。
安装 Hadoop 2
Hadoop 2 可以通过&&或者&下载,一般选择下载最新的稳定版本,即下载
“stable” 下的&hadoop-2.x.y.tar.gz&这个格式的文件,这是编译好的,另一个包含 src 的则是 Hadoop 源代码,需要进行编译才可使用。
下载时强烈建议也下载&hadoop-2.x.y.tar.gz.mds&这个文件,该文件包含了检验值可用于检查 hadoop-2.x.y.tar.gz 的完整性,否则若文件发生了损坏或下载不完整,Hadoop 将无法正常运行。
本文涉及的文件均通过浏览器下载,默认保存在 “下载” 目录中(若不是请自行更改 tar 命令的相应目录)。另外,本教程选择的是 2.6.0 版本,如果你用的不是 2.6.0 版本,则将所有命令中出现的 2.6.0 更改为你所使用的版本。
若文件不完整则这两个值一般差别很大,可以简单对比下前几个字符跟后几个字符是否相等即可,如下图所示,如果两个值不一样,请务必重新下载。
检验文件完整性
我们选择将 Hadoop 安装至 /usr/local/ 中:
Hadoop 解压后即可使用。输入如下命令来检查 Hadoop 是否可用,成功则会显示 Hadoop 版本信息:
相对路径与绝对路径的区别
请务必注意命令中的相对路径与绝对路径,本文后续出现的&./bin/...,./etc/...&等包含
./ 的路径,均为相对路径,以 /usr/local/hadoop 为当前目录。例如在 /usr/local/hadoop 目录中执行&./bin/hadoop version&等同于执行&/usr/local/hadoop/bin/hadoop
version。可以将相对路径改成绝对路径来执行,但如果你是在主文件夹 ~ 中执行&./bin/hadoop version,执行的会是&/home/hadoop/bin/hadoop
version,就不是我们所想要的了。
Hadoop单机配置(非分布式)
Hadoop 默认模式为非分布式模式,无需进行其他配置即可运行。非分布式即单 Java 进程,方便进行调试。
现在我们可以执行例子来感受下 Hadoop 的运行。Hadoop 附带了丰富的例子(运行&./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar&可以看到所有例子),包括
wordcount、terasort、join、grep 等。
在此我们选择运行 grep 例子,我们将 input 文件夹中的所有文件作为输入,筛选当中符合正则表达式 dfs[a-z.]+ 的单词并统计出现的次数,最后输出结果到 output 文件夹中。
执行成功后如下所示,输出了作业的相关信息,输出的结果是符合正则的单词 dfsadmin 出现了1次
Hadoop单机模式运行grep的输出结果
注意,Hadoop 默认不会覆盖结果文件,因此再次运行上面实例会提示出错,需要先将&./output&删除。
Hadoop伪分布式配置
Hadoop 可以在单节点上以伪分布式的方式运行,Hadoop 进程以分离的 Java 进程来运行,节点既作为 NameNode 也作为 DataNode,同时,读取的是 HDFS 中的文件。
Hadoop 的配置文件位于 /usr/local/hadoop/etc/hadoop/ 中,伪分布式需要修改2个配置文件&core-site.xml&和&hdfs-site.xml&。Hadoop的配置文件是 xml 格式,每个配置以声明 property 的 name 和 value 的方式来实现。
修改配置文件&core-site.xml&(通过 gedit 编辑会比较方便:&gedit ./etc/hadoop/core-site.xml),将当中的
修改为下面配置:
同样的,修改配置文件&hdfs-site.xml:
Hadoop配置文件说明
Hadoop 的运行方式是由配置文件决定的(运行 Hadoop 时会读取配置文件),因此如果需要从伪分布式模式切换回非分布式模式,需要删除 core-site.xml 中的配置项。
此外,伪分布式虽然只需要配置 fs.defaultFS 和 dfs.replication 就可以运行(官方教程如此),不过若没有配置 hadoop.tmp.dir 参数,则默认使用的临时目录为 /tmp/hadoo-hadoop,而这个目录在重启时有可能被系统清理掉,导致必须重新执行 format 才行。所以我们进行了设置,同时也指定 dfs.namenode.name.dir 和 dfs.datanode.data.dir,否则在接下来的步骤中可能会出错。
配置完成后,执行 NameNode 的格式化:
成功的话,会看到 “successfully formatted” 和 “Exitting with status 0” 的提示,若为 “Exitting with status 1” 则是出错。
执行namenode格式化
如果在这一步时提示&Error: JAVA_HOME is not set and could not be found.&的错误,则说明之前设置 JAVA_HOME 环境变量那边就没设置好,请按教程先设置好 JAVA_HOME 变量,否则后面的过程都是进行不下去的。
接着开启 NameNode 和 DataNode 守护进程。
若出现如下SSH提示,输入yes即可。
启动Hadoop时的SSH提示
启动时可能会出现如下 WARN 提示:WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable。该 WARN 提示可以忽略,并不会影响正常使用(该 WARN 可以通过编译 Hadoop 源码解决)。
启动 Hadoop 时提示 Could not resolve hostname
如果启动 Hadoop 时遇到输出非常多“ssh: Could not resolve hostname xxx”的异常情况,如下图所示:
启动Hadoop时的异常提示
这个并不是 ssh 的问题,可通过设置 Hadoop 环境变量来解决。首先按键盘的&ctrl + c&中断启动,然后在 ~/.bashrc 中,增加如下两行内容(设置过程与 JAVA_HOME 变量一样,其中 HADOOP_HOME 为 Hadoop 的安装目录):
保存后,务必执行&source ~/.bashrc&使变量设置生效,然后再次执行&./sbin/start-dfs.sh&启动
启动完成后,可以通过命令&jps&来判断是否成功启动,若成功启动则会列出如下进程: “NameNode”、”DataNode” 和 “SecondaryNameNode”(如果
SecondaryNameNode 没有启动,请运行 sbin/stop-dfs.sh 关闭进程,然后再次尝试启动尝试)。如果没有 NameNode 或 DataNode ,那就是配置不成功,请仔细检查之前步骤,或通过查看启动日志排查原因。
通过jps查看启动的Hadoop进程
Hadoop无法正常启动的解决方法
一般可以查看启动日志来排查原因,注意几点:
启动时会提示形如 “DBLab-XMU: starting namenode, logging to /usr/local/hadoop/logs/hadoop-hadoop-namenode-DBLab-XMU.out”,其中 DBLab-XMU 对应你的机器名,但其实启动日志信息是记录在 /usr/local/hadoop/logs/hadoop-hadoop-namenode-DBLab-XMU.log
中,所以应该查看这个后缀为&.log&的文件;每一次的启动日志都是追加在日志文件之后,所以得拉到最后面看,对比下记录的时间就知道了。一般出错的提示在最后面,通常是写着 Fatal、Error、Warning 或者 Java Exception 的地方。可以在网上搜索一下出错信息,看能否找到一些相关的解决方法。
此外,若是 DataNode 没有启动,可尝试如下的方法(注意这会删除 HDFS 中原有的所有数据,如果原有的数据很重要请不要这样做):
成功启动后,可以访问 Web 界面&&查看 NameNode 和 Datanode 信息,还可以在线查看 HDFS 中的文件。
Hadoop的Web界面
运行Hadoop伪分布式实例
上面的单机模式,grep 例子读取的是本地数据,伪分布式读取的则是 HDFS 上的数据。要使用 HDFS,首先需要在 HDFS 中创建用户目录:
接着将 ./etc/hadoop 中的 xml 文件作为输入文件复制到分布式文件系统中,即将 /usr/local/hadoop/etc/hadoop 复制到分布式文件系统中的 /user/hadoop/input 中。我们使用的是 hadoop 用户,并且已创建相应的用户目录 /user/hadoop ,因此在命令中就可以使用相对路径如 input,其对应的绝对路径就是 /user/hadoop/input:
复制完成后,可以通过如下命令查看文件列表:
伪分布式运行 MapReduce 作业的方式跟单机模式相同,区别在于伪分布式读取的是HDFS中的文件(可以将单机步骤中创建的本地 input 文件夹,输出结果 output 文件夹都删掉来验证这一点)。
查看运行结果的命令(查看的是位于 HDFS 中的输出结果):
结果如下,注意到刚才我们已经更改了配置文件,所以运行结果不同。
Hadoop伪分布式运行grep结果
我们也可以将运行结果取回到本地:
Hadoop 运行程序时,输出目录不能存在,否则会提示错误 “org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory hdfs://localhost:9000/user/hadoop/output already exists” ,因此若要再次执行,需要执行如下命令删除 output 文件夹:
运行程序时,输出目录不能存在
运行 Hadoop 程序时,为了防止覆盖结果,程序指定的输出目录(如 output)不能存在,否则会提示错误,因此运行前需要先删除输出目录。在实际开发应用程序时,可考虑在程序中加上如下代码,能在每次运行时自动删除输出目录,避免繁琐的命令行操作:
若要关闭 Hadoop,则运行
下次启动 hadoop 时,无需进行 NameNode 的初始化,只需要运行&./sbin/start-dfs.sh&就可以!
(伪分布式不启动 YARN 也可以,一般不会影响程序执行)
有的读者可能会疑惑,怎么启动 Hadoop 后,见不到书上所说的 JobTracker 和 TaskTracker,这是因为新版的 Hadoop 使用了新的 MapReduce 框架(MapReduce V2,也称为 YARN,Yet Another Resource Negotiator)。
YARN 是从 MapReduce 中分离出来的,负责资源管理与任务调度。YARN 运行于 MapReduce 之上,提供了高可用性、高扩展性,YARN 的更多介绍在此不展开,有兴趣的可查阅相关资料。
上述通过&./sbin/start-dfs.sh&启动 Hadoop,仅仅是启动了 MapReduce 环境,我们可以启动 YARN ,让 YARN 来负责资源管理与任务调度。
首先修改配置文件&mapred-site.xml,这边需要先进行重命名:
然后再进行编辑,同样使用 gedit 编辑会比较方便些&gedit ./etc/hadoop/mapred-site.xml&:
接着修改配置文件&yarn-site.xml:
然后就可以启动 YARN 了(需要先执行过&./sbin/start-dfs.sh):
开启后通过&jps&查看,可以看到多了 NodeManager 和 ResourceManager 两个后台进程,如下图所示。
启动 YARN 之后,运行实例的方法还是一样的,仅仅是资源管理方式、任务调度不同。观察日志信息可以发现,不启用 YARN 时,是 “mapred.LocalJobRunner” 在跑任务,启用 YARN 之后,是 “mapred.YARNRunner” 在跑任务。启动 YARN 有个好处是可以通过 Web 界面查看任务的运行情况:,如下图所示。
开启YARN后可以查看任务运行信息
但 YARN 主要是为集群提供更好的资源管理与任务调度,然而这在单机上体现不出价值,反而会使程序跑得稍慢些。因此在单机上是否开启 YARN 就看实际情况了。
不启动 YARN 需重命名 mapred-site.xml
如果不想启动 YARN,务必把配置文件&mapred-site.xml&重命名,改成 mapred-site.xml.template,需要用时改回来就行。否则在该配置文件存在,而未开启 YARN 的情况下,运行程序会提示 “Retrying connect to server: 0.0.0.0/0.0.0.0:8032” 的错误,这也是为何该配置文件初始文件名为 mapred-site.xml.template。
同样的,关闭 YARN 的脚本如下:
自此,你已经掌握 Hadoop 的配置和基本使用了。
附加教程: 配置PATH环境变量
在这里额外讲一下 PATH 这个环境变量(可执行&echo $PATH&查看,当中包含了多个目录)。例如我们在主文件夹 ~ 中执行&ls&这个命令时,实际执行的是&/bin/ls&这个程序,而不是&~/ls&这个程序。系统是根据
PATH 这个环境变量中包含的目录位置,逐一进行查找,直至在这些目录位置下找到匹配的程序(若没有匹配的则提示该命令不存在)。
上面的教程中,我们都是先进入到 /usr/local/hadoop 目录中,再执行&sbin/hadoop,实际上等同于运行/usr/local/hadoop/sbin/hadoop。我们可以将
Hadoop 命令的相关目录加入到 PATH 环境变量中,这样就可以直接通过&start-dfs.sh&开启 Hadoop,也可以直接通过&hdfs&访问
HDFS 的内容,方便平时的操作。
同样我们选择在 ~/.bashrc 中进行设置(vim ~/.bashrc,与 JAVA_HOME 的设置相似),在文件最前面加入如下单独一行:
export PATH=$PATH:/usr/local/hadoop/sbin:/usr/local/hadoop/bin
添加后执行&source ~/.bashrc&使设置生效,生效后,在任意目录中,都可以直接使用&hdfs&等命令了,读者不妨现在就执行&hdfs
dfs -ls input&查看 HDFS 文件试试看。
安装Hadoop集群
在平时的学习中,我们使用伪分布式就足够了。如果需要安装 Hadoop 集群,请查看。
使用 Eclipse 可以方便的开发、运行 MapReduce 程序,还可以直接管理 HDFS 中的文件。: 有时候需要直接通过命令来编译、打包
MapReduce 程序。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:22858次
排名:千里之外
转载:14篇
(4)(5)(1)(10)(4)作者:杨鑫奇
PS:文章有部分参考资料来自网上,并经过实践后写出,有什么问题欢迎大家联系我。
大家可以尝试下Ambari来配置Hadoop的相关环境
快速的部署Hadoop,Hbase和Hive等并提供Ganglia和Nagios的监控功能,强烈推荐使用.
Hadoop 2.0集群配置详细教程
Hadoop2.0介绍
是 apache 的开源 项目,开发的主要目的是为了构建可靠,可拓展 scalable ,分布式的系 统, hadoop 是一系列的子工程的 总和,其中包含1. hadoop common : 为其他项目提供基础设施2. HDFS :分布式的文件系 统3. MapReduce : A software framework for distributed processing of large data sets on compute clusters 。一个 简化分布式编程的框架。4. 其他工程包含: Avro( 序列化系 统 ) , Cassandra( 数据 库项目 ) 等 &
Hadoop,以 Hadoop 分布式文件系统( HDFS ,Hadoop Distributed Filesystem )和 MapReduce ( Google MapReduce 的开源实现)为核心的 Hadoop 为用户提供了系统底层细节透明的分布式基础架构。   对于 Hadoop 的集群来讲,可以分成两大类角色: Master 和 Salve 。一个 HDFS 集群是由一个 NameNode 和若干个 DataNode 组成的。其中 NameNode 作为主服务器,管理文件系统的命名空间和客户端对文件系统的访问操作;集群中的 DataNode 管理存 储的数据。 MapReduce 框架是由一个 单独运行在主节点上的 JobTracker 和 运行在每个集群从节点的 TaskTracker 共同 组成的。主节点负责调度构成一个作业的所有任务,这些任务分布在不同的从节点上。主节点监控它们的执行情况,并且重新执行之前的失败任务;从节点仅负责由主节点指派的任务。当一个 Job 被提交 时, JobTracker 接收到提交作 业和配置信息之后,就会将配置信息等分发给从节点,同时调度任务并监控 TaskTracker 的 执行。  从上面的介 绍可以看出, HDFS 和 MapReduce 共同 组成了 Hadoop 分布式系 统体系结构的核心。 HDFS 在集群上 实现分布式文件系统, MapReduce 在集群上 实现了分布式计算和任务处理。 HDFS 在 MapReduce 任 务处理过程中提供了文件操作和存储等支持, MapReduce 在 HDFS 的基 础上实现了任务的分发、跟踪、执行等工作,并收集结果,二者相互作用,完成了 Hadoop 分布式集群的主要任 务。
为什么要使用2.0版本(来自董的博客)
该版本提供了一些新的、重要的功能,包括:
& HDFS HA ,当前只能 实现人工切换。Hadoop HA 分支 merge 进了该版本,并支持热切,主要特性包括:( 1 ) &&&& NN 配置文件有改变,使得配置更加简单( 2 ) &&&& NameNode 分 为两种角色: active NN 与 standby NN , active NN 对外提供读写服务,一旦出现故障,便切换到 standby NN 。( 3 ) &&&& 支持 Client 端重定向,也就是 说,当 active NN 切 换到 standby NN 过程中, Client 端所有的 进行时操作都可以无缝透明重定向到 standby NN 上, Client 自己感 觉不到切换过程。( 4 ) &&&& DN 同 时向 active NN 和 standby NN 汇报 block 信息。具体 设计文档参考: https://issues.apache.org/jira/browse/HDFS-1623当前 Hadoop HA 只能 实现人工切换,该功能在某些情况下非常有用,比如,对 NN 进行升级时,先将 NN 切 换到 standby NN ,并 对之前的 active NN 进行升级,升级完成后,再将 NN 切 换至升级后的 NN 上,然后 对 standby NN 进行升级。
& YARN ,下一代 MapReduce 这是一套资源统一管理和调度平台,可管理各种计算框架,包括 MapReduce 、 Spark 、 MPI 等。YARN 是一套 资源统一管理和调度平台,可管理各种计算框架,包括 MapReduce , Spark , MPI 等。尽管它是完全重写而成,但其思想是从 MapReduce 衍化而来的,并克服了它在 扩展性和容错性等方面的众多不足。具体参考:http://hadoop.apache.org/common/docs/r0.23.0/hadoop-yarn/hadoop-yarn-site/YARN.html & HDFS Federation ,允 许 HDFS 中存在多个 NameNode ,且每个 NameNode 分管一部分目 录,而 DataNode 不 变,进而缩小了故障带来的影响范围,并起到一定的隔离作用。传统 HDFS 是 master/slave 结构,其中, master (也就是 NameNode )需要存 储所有文件系统的元数据信息,且所有文件存储操作均需要访问多次 NameNode ,因而 NameNode 成 为制约扩展性的主要瓶颈所在。为了解决该问题,引入了 HDFS Federation ,允 许 HDFS 中存在多个 NameNode ,且每个 NameNode 分管一部分目 录,而 DataNode 不 变,也就是 & 从中央集权 专政变为各个地方自治 & , 进而缩小了故障带来的影响范围,并起到一定的隔离作用。具体参考:http://dongxicheng.org/mapreduce-nextgen/nextgen-mapreduce-introduction/ & 基准性能测试该版本中为 HDFS 和 YARN 添加了性能的基准 测试集,其中 HDFS 测试包括:( 1 ) &&&& dfsio 基准 测试 HDFS I/O 读写性能( 2 ) slive 基准 测试 NameNode 内部操作的性能( 3 ) scan 基准 测试 MapReduce 作 业访问 HDFS 的 I/O 性能( 4 ) &&&& shuffle 基准 测试 shuffle 阶段性能( 5 ) &&&& compression 基准 测试 MapReduce 作 业中间结果和最终结果的压缩性能( 6 ) &&&& gridmix-V3 基准 测试集群吞吐率YARN&&&& 测试包括 :( 1 ) &&&& ApplicationMaster 扩展性基准测试主要 测试调度 task/container 的性能。与 1.0 版本比 较,大约快 2 倍。( 2 ) &&&& ApplicationMaster 恢复性基准 测试测试 YARN 重 启后,作业恢复速度。稍微解释一下 ApplicationMaster 恢复作 业的功能:在作业执行过程中, Application Master 会不断地将作 业运行状态保存到磁盘上,比如哪些任务运行完成,哪些未完成等,这样,一旦集群重启或者 master 挂掉,重 启后,可复原各个作业的状态,并只需重新运行未运行完成的哪些任务。( 3 ) &&&& ResourceManager 扩展性基准测试通 过不断向 Hadoop 集群中添加 节点测试 RM 的 扩展性。( 4 ) &&&& 小作 业基准测试专门测试批量小作业的吞吐率具体参考:/blog/delivering-on-hadoop-next-benchmarking-performance/ & 通过 protobufs 来提供HDFS 和YARN 的兼容性Wire-compatibility for both HDFS & YARNHadoop RPC采用了Hadoop自己的一套序列化框架 对 各种 对 象 进 行序列化反序列,但存在一个 问题 : 扩 展性差,很 难 添加新的数据类型同 时 保 证 版本兼容性。 为 此,Hadoop 2.0将数据类型模 块 从RPC中独立出来,成 为 一个独立的可插拔模 块 , 这样 允 许 用 户 根据个人 爱 好使用各种序列化/反序列化框架,比如thrift,arvo,protocal Buffer等,默 认 情况采用Protocal Buffer。/blog/rpc-improvements-and-wire-compatibility-in-apache-hadoop/除了以上五个特性外, 还 有两个非常重要的特性正在研 发 中,分别是: & HDFS快照用 户 可在任意 时间对 HDFS做快照, 这样 ,在HDFS出 现 故障 时 ,可将数据恢复到某个 时间 点的状 态 。具体参考:/blog/snapshots-for-hdfs/ & HDFS HA自动 切换前面介 绍 的第一个功能&HDFS HA&当前只能 实现 人工切 换 ,也就是 说 ,管理 员运 行某个命令,使得acitve NN切 换 到standby NN上。以后将支持自 动 切 换 ,也就是 说 , 监 控模 块 可 检测 出active NN何 时 出 现 故障,并自 动 将之切 换 到standby NN上, 这样 可大大 较 小Hadoop集群 运维 人 员 的工作量。具体参考:http://s.apache.org/hdfs-autofailover
物理机器 总 共4台,想配置基于物理机的hadoop集群中包括 4 个 节点: 1 个 Master , 3 个 Salve , 节点之间局域网连接,可以相互 ping 通Ip分布 为192.168.1.201 hadoop1192.168.1.202 hadoop2192.168.1.203 hadoop3192.168.1.204 hadoop4
操作系 统为 CentOS 5.6 64bitMaster机器主要配置NameNode和JobTracker的角色, 负责总 管分布式数据和分解任 务 的 执 行;3个Salve机器配置DataNode和TaskTracker的角色, 负责 分布式数据存 储 以及任 务 的 执 行。其 实应该还应该 有1个Master机器,用来作 为备 用,以防止Master服 务 器宕机, 还 有一个 备 用 马 上 启 用。后 续经验积 累一定 阶 段后 补 上一台 备 用Master机器。
使用root登 陆 所有机器后,所有的机器都 创建 hadoop 用 户useradd hadooppasswd hadoop
此 时 在 /home/ 下就会生成一个 hadoop 目 录 ,目 录 路径 为 /home/hadoop
创建相关的目录
定 义 需要数据及目 录 的存放路径
定 义 代 码及工具 存放的路径mkdir -p /home/hadoop/sourcemkdir -p /home/hadoop/tools
定 义 数据 节 点存放的路径到跟目 录 下的hadoop文件夹, 这 里是数据 节 点存放目 录 需要有足够的空 间 存放mkdir -p /hadoop/hdfsmkdir -p /hadoop/tmpmkdir -p /hadoop/log设 置可写权限chmod -R 777 /hadoop
定 义 java安装程序路径mkdir -p /usr/java
/technetwork/java/javase/downloads/jdk-6u32-downloads-1594644.html在以上 连接 下 载 linux 64 下的 jdk 的安装文件: &jdk-6u32-linux-x64.bin1 ,将下 载好的 jdk-6u32-linux-x64.bin 通 过 SSH 上 传到 /usr/java 下scp -r ./jdk-6u32-linux-x64.bin
root@hadoop1:/usr/java2 , 进入 JDK 安装目 录 cd /usr/java 并且 执行 chmod +x&jdk-6u32-linux-x64.bin3 , 执行 ./jdk-6u32-linux-x64.bin4 ,配置 环境变量,执行 cd /etc 命令后 执行 vi profile ,在行末尾添加export JAVA_HOME=/usr/java/jdk1.6.0_32export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:/lib/dt.jarexport PATH=$JAVA_HOME/bin:$PATH5 , 执行 chmod +x profile 将其 变成可执行文件6 , 执行 source profile 使其配置立即生效source /etc/profile7 , 执行 java -version 查看是否安装成功
这个步骤所有机器都必须安装
[root@hadoop1 bin]# java -versionjava version "1.6.0_32"Java(TM) SE Runtime Environment (build 1.6.0_32-b05)Java HotSpot(TM) 64-Bit Server VM (build 20.7-b02, mixed mode)
修改主机名
修改主机名,所有 节点均一样配置1 , 连接到主节点 192.168.1.201 ,修改 network , 执行 vim /etc/sysconfig/network ,修改 HOSTNAME=hadoop12 ,修改 hosts 文件, 执行 cd /etc 命令后 执行 vi hosts ,在行末尾添加 :
192.168.1.201&& hadoop1192.168.1.202&& hadoop2192.168.1.203&& hadoop3192.168.1.204&& hadoop4
3 , 执行 hostname hadoop14 , 执行 exit 后重新 连接可看到主机名以修改 OK
其他 节点 也修改主机名后添加 Host, 或者 host 文件可以在后面 执行 scp 覆盖操作
配置SSH无密码登陆
SSH 无密 码原理简介 :首先在 hadoop1 上生成一个密 钥对,包括一个公钥和一个私钥,并将公钥复制到所有的 slave(hadoop2-hadoop4) 上。然后当 master 通 过 SSH 连接 slave 时, slave 就会生成一个随机数并用 master 的公 钥对随机数进行加密,并发送给 master 。最后 master 收到加密数之后再用私 钥解密,并将解密数回传给 slave , slave 确 认解密数无误之后就允许 master 不 输入密码进行连接了
2 ,具体步 骤(在root用户和hadoop用户登陆情况下执行)1 、 执行命令 ssh-keygen -t rsa 之后一路回 车,查看刚生成的无密码钥对: cd .ssh 后 执行 ll2 、把 id_rsa.pub 追加到授权的 key 里面去。 执行命令 cat ~/.ssh/id_rsa.pub &&~/.ssh/authorized_keys3 、修改权限: 执行 chmod 600 ~/.ssh/authorized_keys4 、确保 cat /etc/ssh/sshd_config 中存在如下内容
RSAAuthentication yesPubkeyAuthentication yesAuthorizedKeysFile&&&&& .ssh/authorized_keys如需修改, 则在修改后执行重启 SSH 服 务命令使其生效 :service sshd restart
5 、将公 钥复制到所有的 slave 机器上 :scp ~/.ssh/id_rsa.pub 192.168.1.203 : ~/&&& 然后 输入 yes ,最后 输入 slave 机器的密 码6 、在 slave 机器上 创建 .ssh 文件夹 :mkdir ~/.ssh 然后 执行 chmod 700 ~/.ssh (若文件夹以存在 则不需要创建)7 、追加到授权文件 authorized_keys 执行命令 :cat ~/id_rsa.pub && ~/.ssh/authorized_keys 然后 执行 chmod 600 ~/.ssh/authorized_keys8 、重复第 4 步9 、 验证命令 : 在 master 机器上 执行 ssh 192.168.1.203 发现主机名由 hadoop1 变成 hadoop3 即成功,最后 删除 id_rsa.pub 文件 :rm -r id_rsa.pub按照以上步 骤分别配置 hadoop1,hadoop2,hadoop3,hadoop4 ,要求每个都可以无密 码登录
HADOOP 版本最新版本 hadoop-2.0.0-alpha& 安装包 为 hadoop-2.0.0-alpha.tar.gz下 载官网地址 :下 载到 /home/hadoop/source 目录下wget
http://ftp.riken.jp/net/apache/hadoop/common/hadoop-2.0.0-alpha/hadoop-2.0.0-alpha.tar.gz解压目录tar zxvf hadoop-2.0.0-alpha.tar.gz
创建软连接cd /home/hadoopln -s
/home/hadoop/source/hadoop-2.0.0-alpha/
源码配置修改
/etc/profile
配置 环境变量: vim /etc/profile添加export HADOOP_DEV_HOME=/home/hadoop/hadoopexport PATH=$PATH:$HADOOP_DEV_HOME/binexport PATH=$PATH:$HADOOP_DEV_HOME/sbinexport HADOOP_MAPARED_HOME=${HADOOP_DEV_HOME}export HADOOP_COMMON_HOME=${HADOOP_DEV_HOME}export HADOOP_HDFS_HOME=${HADOOP_DEV_HOME}export YARN_HOME=${HADOOP_DEV_HOME}export HADOOP_CONF_DIR=${HADOOP_DEV_HOME}/etc/hadoopexport HDFS_CONF_DIR=${HADOOP_DEV_HOME}/etc/hadoopexport YARN_CONF_DIR=${HADOOP_DEV_HOME}/etc/hadoop
创建并配置hadoop-env.sh
vim /usr/hadoop/hadoop-2.0.0-alpha/etc/hadoop/hadoop-env.sh 在末尾添加 export JAVA_HOME=/usr/java/jdk1.6.0_27
&core-site.xml
在 configuration 节点 里面添加属性
&property&
&name&hadoop.tmp.dir&/name&
&value&/hadoop/tmp&/value&
&description&A base for other temporary directories.&/description&
&/property&
&property&
&name&fs.default.name&/name&
&value&hdfs://192.168.1.201:9000&/value&
&/property&
添加 httpfs 的 选项&property&
&name&hadoop.proxyuser.root.hosts&/name&
&value&192.168.1.201&/value&
&/property&
&property&
&name&hadoop.proxyuser.root.groups&/name&
&value&*&/value&
&/property&
vim /home/hadoop/hadoop/etc/hadoop/slaves 添加 slave 的 IP192.168.1.202192.168.1.203192.168.1.204
配置hdfs-site.xml
vim /home/hadoop/hadoop/etc/hadoop/hdfs-site.xml添加 节点
&property&
&name&dfs.replication&/name&
&value&3&/value&&/property&
&property&
&name&dfs.namenode.name.dir&/name&
&value&file:/hadoop/hdfs/name&/value&
&final&true&/final&&/property&
&property&
&name&dfs.federation.nameservice.id&/name&
&value&ns1&/value&&/property&
&property&
&name&dfs.namenode.backup.address.ns1&/name&
&value&192.168.1.201:50100&/value&&/property&
&property&
&name&dfs.namenode.backup.http-address.ns1&/name&
&value&192.168.1.201:50105&/value&&/property&
&property&
&name&dfs.federation.nameservices&/name&
&value&ns1&/value&&/property&
&property&
&name&dfs.namenode.rpc-address.ns1&/name&
&value&192.168.1.201:9000&/value&&/property&&property&
&name&dfs.namenode.rpc-address.ns2&/name&
&value&192.168.1.201:9000&/value&&/property&
&property&
&name&dfs.namenode.http-address.ns1&/name&
&value&192.168.1.201:23001&/value&&/property&
&property&
&name&dfs.namenode.http-address.ns2&/name&
&value&192.168.1.201:13001&/value&&/property&
&property&
&name&dfs.dataname.data.dir&/name&
&value&file:/hadoop/hdfs/data&/value&
&final&true&/final&&/property&
&property&
&name&dfs.namenode.secondary.http-address.ns1&/name&
&value&192.168.1.201:23002&/value&&/property&
&property&
&name&dfs.namenode.secondary.http-address.ns2&/name&
&value&192.168.1.201:23002&/value&&/property&
&property&
&name&dfs.namenode.secondary.http-address.ns1&/name&
&value&192.168.1.201:23003&/value&&/property&
&property&
&name&dfs.namenode.secondary.http-address.ns2&/name&
&value&192.168.1.201:23003&/value&&/property&
配置yarn-site.xml
&property&
&name&yarn.resourcemanager.address&/name&
&value&192.168.1.201:18040&/value&&/property&
&property&
&name&yarn.resourcemanager.scheduler.address&/name&
&value&192.168.1.201:18030&/value&&/property&
&property&
&name&yarn.resourcemanager.webapp.address&/name&
&value&192.168.1.201:18088&/value&&/property&
&property&
&name&yarn.resourcemanager.resource-tracker.address&/name&
&value&192.168.1.201:18025&/value&&/property&
&property&
&name&yarn.resourcemanager.admin.address&/name&
&value&192.168.1.201:18141&/value&&/property&
&property&
&name&yarn.nodemanager.aux-services&/name&
&value&mapreduce.shuffle&/value&&/property&
配置httpfs-site.xml
同步代码到其他机器
1.同步配置代 码先在 slaves 的机器上也 创 建mkdir -p /home/hadoop/source部署hadoop代 码 , 创 建 软连接 ,然后只要同步修改 过 的etc/hadoop下的配置文件即可2.同步
/etc/profile3.同步 /etc/hosts scp -r /etc/profile
root@hadoop2:/etc/profilescp -r /etc/hosts
root@hadoop2:/etc/hosts
其他机器以此操作
Hadoop启动
格式化集群
hadoop namenode -format -clusterid clustername
执行start-dfs.sh
开 启 hadoop dfs服 务 &&&&
开 启 yarn 资 源管理服 务start-yarn.sh
启动httpfs
开 启 httpfs 服 务httpfs.sh start使得 对外 可以提高 http 的restful接口服 务
安装结果验证
在各台机器 执行 jps 看 进程 是否都已 经启动 了
[root@hadoop1 hadoop]# jps7396 NameNode24834 Bootstrap7594 SecondaryNameNode7681 ResourceManager32261 Jps
[root@hadoop2 ~]# jps8966 Jps31822 DataNode31935 NodeManager
进程启动 正常
验证 是否可以登 陆hadoop fs -ls hdfs://192.168.1.201:9000/
hadoop fs -mkdir hdfs://192.168.1.201:9000/testfolder
hadoop fs -copyFromLocal
hdfs://192.168.1.201:9000/testfolder
hadoop fs -ls hdfs://192.168.1.201:9000/ testfolder
看以上 执行 是否正常
验证map/reduce
在 master1 上, 创建输入目录 :hadoop fs -mkdir hdfs://192.168.1.201:9000/input将 /usr/hadoop/hadoop-2.0.1-alpha/ 目 录下的所有 txt 文件复制到 hdfs 分布式文件系 统的目录里,执行以下命令hadoop fs -put /usr/hadoop/hadoop-2.0.1-alpha/*.txt hdfs://192.168.1.201:9000/input
在 hadoop1 上, 执行 HADOOP 自 带的例子, wordcount 包,命令如下cd /usr/hadoop/hadoop-2.0.1-alpha/share/hadoop/mapreducehadoop jar hadoop-mapreduce-examples-2.0.1-alpha.jar wordcount hdfs://192.168.1.201:9000/input hdfs://192.168.1.201:9000/output
hadoop fs -put /usr/hadoop/hadoop-2.0.1-alpha/*.txt hdfs://192.168.1.201:9000/input
在 hadoop1 上, 查看结果命令如下 :[root@master1 hadoop]# hadoop fs -ls hdfs://192.168.1.201:9000/outputFound 2 items-rw-r--r--&& 2 root supergroup&&&&&&&&& 0
22:59 hdfs://192.168.1.201:9000/output/_SUCCESS-rw-r--r--&& 2 root supergroup&&&&&& -29 22:59 hdfs://192.168.1.201:9000/output/part-r-00000
[root@hadoop1 hadoop]# hadoop fs -cat& hdfs://192.168.1.201:9000/output/part-r-00000 即可看到每个 单词的数量
验证httpfs
HTTPFS操作:
OPEN,GETFILESTATUS,LISTSTATUS,GETHOMEDIRECTORY,GETCONTENTSUMMARY,GETFILECHECKSUM,GETDELEGATIONTOKEN,GETFILEBLOCKLOCATIONS,INSTRUMENTATION
GETHOMEDIRECTORY 路径无关,返回根 节点路径http://192.168.1.201:14000/webhdfs/v1/yxq?op=GETHOMEDIRECTORY&user.name=root
Path: "/user/root"
http://192.168.1.201:14000/webhdfs/v1/yxq/bitfoldersub0/bitwaretestfile0.bt?op=GETHOMEDIRECTORY&user.name=root
打开 / 下 载一个文件http://192.168.1.201:14000/webhdfs/v1/yxq/bitfoldersub0/bitwaretestfile0.bt?op=open&user.name=root
LISTSTATUS 现实目录状态
http://192.168.1.201:14000/webhdfs/v1/yxq/bitfoldersub0?op=LISTSTATUS&user.name=roothttp://192.168.1.201:14000/webhdfs/v1/yxq/bitfoldersub0/bitwaretestfile0.bt?op=LISTSTATUS&user.name=root
GETFILESTATUS 显示文件的状态http://192.168.1.201:14000/webhdfs/v1/yxq/bitfoldersub0/bitwaretestfile0.bt?op=GETFILESTATUS&user.name=root
如果是路径 则现实路径信息http://192.168.1.201:14000/webhdfs/v1/yxq/bitfoldersub0/?op=GETFILESTATUS&user.name=roothttp://192.168.1.201:14000/webhdfs/v1/yxq/bitfoldersub0/bitwaretestfile0.bt?op=GETFILESTATUS&user.name=root
GETCONTENTSUMMARY 获取路径下的信息http://192.168.1.201:14000/webhdfs/v1/yxq?op=GETCONTENTSUMMARY&user.name=root
GETFILECHECKSUM 获取文件的校验值http://192.168.1.201:14000/webhdfs/v1/yxq/bitfoldersub0/bitwaretestfile0.bt?op=GETFILECHECKSUM&user.name=root
以下 实现 方法 还 有 错误现 在:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
GETDELEGATIONTOKEN ERROR
http://192.168.1.201:14000/webhdfs/v1/yxq/bitfoldersub0/bitwaretestfile0.bt?op=GETDELEGATIONTOKEN&user.name=root
GETFILEBLOCKLOCATIONS error
http://192.168.1.201:14000/webhdfs/v1/yxq/bitfoldersub0/bitwaretestfile0.bt?op=GETFILEBLOCKLOCATIONS&user.name=root
INSTRUMENTATION error
http://192.168.1.201:14000/webhdfs/v1/yxq/bitfoldersub0/bitwaretestfile0.bt?op=INSTRUMENTATION&user.name=root
使用内部的 benchmark 测试 不同文件大小及不同append大小的写入情况hadoop jar /home/hadoop/hadoop/bin/BitwareHadoopBenchmark.jar BitwareHadoopBenchmark hdfs://192.168.1.201:9000 /bitwaretest01/ 0 20 200 4 0
&/blog/1612323
http://dongxicheng.org/mapreduce-nextgen/apache-hadoop-2-0-alpha/
hadoop 的配置及使用在不断的更新中
阅读(...) 评论()}

我要回帖

更多关于 hadoop openjdk 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信