




免费预览已结束,剩余22页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
一HADOOP1. hadoop安装配置1) 配置流程初学hadoop,写下一些 学习过程 和 心得体会,希望能帮助到同样学习的兄弟们三台机器:分别为 master(),slave1(),slave2()master即为hadoop的Namenode节点,slave1和slave2为hadoop的Datanode节点注:以下操作均为root用户或root权限用户操作(本文章为root用户操作)1.设置机器名(在这里只要机器名不同就可以,不一定需要后缀域名) (1). hostname分别为:master.localdomain slave1.localdomain slave2.localdomain 分别修改各机器/etc/sysconfig/network文件 ,使 hostname=master.localdomain hostname=slave1.localdomain hostname=slave2.localdomain (2). 各机器/etc/hosts文件配置为 # cat /etc/hosts master.localdomain master slave1.localdomain slave1 slave2.localdomain slave2 注:以上机器各个机器名一定要不同,否则hadoop的raduce过程会出错,之所以各个机器名使用域名方式 ,是因为这样可以使 linux启动时 sendmain和ssclient进程启动更迅速些2.无密码登陆 (1). 本机无密码登陆(master) 从master (Namenode)上无需密码ssh到各slave (Datanode)上,在master上执行如下命令: # ssh-keygen -t dsa -P -f /.ssh/id_dsa 则在 /root/.ssh目录中生成了两个文件为:id_dsa 和id_dsa.pub。这两个是成对出现,类似钥匙和锁。再把id_dsa.pub 追加到授权key 里面(当前并没有authorized_keys文件):$ cat /.ssh/id_dsa.pub /.ssh/authorized_keys。完成后可以实现无密码登录本机:$ ssh localhost。 (2). master (Namenode) 到slavle(DataNode)无密码登陆 把NameNode 上的id_dsa.pub 文件追加到dataNode 的authorized_keys 内( 以 节点为例): a. 拷贝NameNode 的id_dsa.pub 文件: $ scp id_dsa.pub root:/root b. 登录,执行$ cat id_dsa.pub .ssh/authorized_keys 其他的dataNode 执行同样的操作。 注意:如果配置完毕,如果namenode 依然不能访问datanode,可以修改datanode 的authorized_keys:$ chmod 600 authorized_keys。3.关闭linux防火墙,使其永久关闭防火墙# chkconfig iptables off# service iptables stop (如果只运行此一条命令,系统重启后防火墙将继续开启)4.安装JDK,配置JDK环境变量,过程略过 (此需要JDK1.6+版本)5.安装hadoop 下载hadoop安装包,我下载的的为hadoop-0.20.0.tar.gz版本,解压即可(本人解压到/usr目录中) # tar -zxvf hadoop-0.20.0.tar.gz 配置hadoop环境变量,添加如下到/etc/profile中 export HADOOP_HOME=/usr/hadoop-0.20.2 export PATH=$HADOOP_HOME/bin:$PATH6.配置hadoophadoop 的主要配置都在hadoop-0.20.2/conf 下。(1).在conf/hadoop-env.sh 中配置Java 环境(namenode与datanode 的配置相同): $ vi hadoop-env.sh 配置export JAVA_HOME=/usr/java/jdk1.6 (去掉行的#注释且加java路径即可)(2).配置conf/masters 和conf/slaves 文件:(只在namenode 上配置) masters文件内容:(此机器为SecondaryNamenode机器地址) slaves文件内容: (3).配置conf/core-site.xml, conf/hdfs-site.xml 及conf/mapred-site.xml (简单配置,datanode 的配置相同,不同情况说明) A. core-site.xml: hadoop.tmp.dir /root/hadoop/tmp A base for other temporary directories. hdfs:/:9000 B. hdfs-site.xml: .dir /root/hadoopName dfs.data.dir /root/hadoopData dfs.replication 1 C. mapred-site.xml: mapred.job.tracker :9001 (4).运行hadoop 进入hadoop-0.20.1/bin,首先格式化文件系统:$ hadoop namenode format (注意:如果是双机热备的namnode,每个namenode机器都必须 format) 启动Hadoop:$ start-all.sh 用jps 命令查看进程,NameNode 上的结果如下: # jps 3020 JobTracker 2952 SecondaryNameNode 2817 NameNode 3110 Jps DataNode上的结果: # jps 6360 Jps 6222 TaskTracker 6158 DataNode web地址输入 :50070/dfshealth.jsp,如图 点击Browse the filesystem链接进入 :50075/browseDirectory.jsp?namenodeInfoPort=50070&dir=/ ,如图 查看集群状态, rootmaster conf# hadoop dfsadmin -report Configured Capacity: 8110792704 (7.55 GB) Present Capacity: 2848157696 (2.65 GB) DFS Remaining: 2847920128 (2.65 GB) DFS Used: 237568 (232 KB) DFS Used%: 0.01% Under replicated blocks: 0 Blocks with corrupt replicas: 0 Missing blocks: 0 - Datanodes available: 2 (2 total, 0 dead) Name: :50010 Decommission Status : Normal Configured Capacity: 4055396352 (3.78 GB) DFS Used: 126991 (124.01 KB) Non DFS Used: 2631352305 (2.45 GB) DFS Remaining: 1423917056(1.33 GB) DFS Used%: 0% DFS Remaining%: 35.11% Last contact: Wed Mar 23 04:44:25 CST 2011 Name: :50010 Decommission Status : Normal Configured Capacity: 4055396352 (3.78 GB) DFS Used: 110577 (107.99 KB)Non DFS Used: 2631282703 (2.45 GB)DFS Remaining: 1424003072(1.33 GB)DFS Used%: 0%DFS Remaining%: 35.11%Last contact: Wed Mar 23 04:44:27 CST 2011 此时hadoop安装即完成了2) 遇到的问题1.出现错误:Shuffle Error: Exceeded MAX_FAILED_UNIQUE_FETCHES; bailing-out 此问题也和系统 打开文件数限制 有关系,但初装应该不会超限,所以原因如下: (1).对于运行在A节点上的map任务,运行完毕后,将运行结果提交给jobtracker,并将运行结果保存在节点A上. (2).对于运行在B节点上的reduce任务,从jobtracker取得任务信息(假设任务包括对节点A的map的数据).并直接从节点A提取该map的结果. 我的这一问题发生的原因在第二步.当节点B的reduce从jobtracker获得的任务中,包括map的服务器地址,而这个地址是改服务器的名字,而不是IP地址.因此,当在本地解析该服务器名的时候,无法解析出他的ip地址,导致无法从A节点,提去数据.解决办法:1.配置 /etc/hosts A的服务器名 2.配置各个机器的hostname,使其hostname不同 # hostname naster 当前生效,重启失效 或 修改 /etc/sysconfig/network文件 hostname=master 注:不要删除host文件里的 localhost.localdomain问题二:出现如下异常:org.apache.hadoop.ipc.RemoteException: node.SafeModeException: Cannot delete /root/hadoop/tmp/mapred/system. Namenode is in safe mode.解决办法: # hadoop dfs -safemode leave问题三:namenode和Datanode都正常启动,只有进程,也可以建立文件夹,但不能对文件作操作(即:访问不了datanode)解决方法: # chkconfig iptables off # service iptables stop 永久关闭防火墙问题四:namenode和Datanode都正常启动.在导入或大批加载数据的时候,datanode会报 .NoRouteToHostException: No route to host 异常。如下:2011-06-30 01:34:07,643 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: Receiving block blk_4377166569839008114_1018 src: /29:26114 dest: /42:500102011-06-30 01:34:07,645 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: writeBlock blk_4377166569839008114_1018 received exception .NoRouteToHostException: No route to host2011-06-30 01:34:07,645 ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: DatanodeRegistration(42:50010, storageID=DS-1854641129-42-50010-1309366897601, infoPort=50075, ipcPort=50020):DataX.NoRouteToHostException: No route to host at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method) at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:567) at .SocketIOWithTimeout.connect(SocketIOWithTimeout.java:206) at .NetUtils.connect(NetUtils.java:404) at org.apache.hadoop.hdfs.server.datanode.DataXceiver.writeBlock(DataXceiver.java:282) at org.apache.hadoop.hdfs.server.datanode.DataXceiver.run(DataXceiver.java:103) at java.lang.Thread.run(Thread.java:662)2011-06-30 01:34:13,653 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: Receiving block blk_-2962332531827173344_1018 src: /29:26115 dest: /42:50010解决方法:由于datanode防火墙没有关闭,导致namenode在某些端口上无法连到datanode上,如连不上,namenode会自动换端口重试,故namenode会不断的在连datanode,导致写数据性能下降。-3) 过程疑问在hadoop启动的时候,个人关掉了slave2,master却不知道, 怎么让它知道? 你知道Zoo Keeper吗?现象:stop-all.sh 出现如下信息rootmaster root# stop-all.shstopping jobtracker: stopping tasktracker: ssh: connect to host port 22: No route to hoststopping namenode: stopping datanode: ssh: connect to host port 22: No route to host: stopping secondarynamenode2. Haoop增加和停止datanode节点1) 操作过程a .增加datanode有的时候, datanode或者tasktracker crash,或者需要向集群中增加新的机器时又不能重启集群。下面方法也许对你有用。 (1).把新机器的增加到conf/slaves文件中(datanode或者tasktracker crash则可跳过) (2).在新机器上进入hadoop安装目录 $bin/hadoop-daemon.sh start datanode $bin/hadoop-daemon.sh start tasktracker (3).在namenode上 (此一步只为数据平衡过程,到第二步数据节点已经加完) $bin/hadoop balancer 或者 $bin/start-balancer.sh t 10%这个命令中-t参数后面跟的是HDFS达到平衡状态的磁盘使用率偏差值。如果机器与机器之间磁盘使用率偏差小于10%,那么我们就认为HDFS集群已经达到了平衡的状态。b.停止datanode比如我原来有10个节点的集群. 现在我想停掉2个,但数据不能丢失,只能让它们的数据转移到其它8台上.这道过程就是decommission. 我们不能直接把那2台停掉, 要在停掉之前把数据转移出去.首先建立一个dfs.hosts.exclude文件.它是一个文本, 里面每行就是想要停掉的主机名.这里dfs.hosts.exclude 放在 $HADOOP_HOME下 例如:CS03CS04这样就表明要把3台机器给停了.然后在conf/hdfs -site.xml添加这样的属性: dfs.hosts.exclude dfs.hosts.exclude 做完这步, 用bin/hadoop dfsadmin -refreshNodes命令更新结点以及hadoop配置然后你可以通过 bin/hadoop dfsadmin -report 就可以查看到类似这样的信息:Name: 6:50010State : Decommission in progressTotal raw bytes: 30452150272 (28.36 GB)Remaining raw bytes:16.51 GB)Used raw bytes: 6480990208 (6.04 GB)% used: 21.28%Last contact: Thu Nov 27 02:25:40 CST 2008Name: 9:50010State : DecommissionedTotal raw bytes: 0 (0 KB)Remaining raw bytes: 0(0 KB)Used raw bytes: 4703211520 (4.38 GB)% used: %Last contact: Thu Jan 01 08:00:00 CST 1970 可以看到86在停止中, 89已经停止了.在没停止之前, mapreduce会拒绝操作. 会出异常的2) 过程疑问1. 是否datanode与tasktracker可分机器运行,并计算?2. 添加datanode过程2和3略去,直接运行start-all.sh的结果与上诉添加结果有啥区别? 原因?3. hadoop Map/Reduce开发实例1) Eclipse插件配置与程序开发在windows下开发Map/Readuce程序,首先要在windows安装cygwin, 目的是让hadoop在执行过程中可以用到linux下的一些shell命令,sygwin则给window装了一个linux外壳。配置eclipse及运行程序具体步骤如下: 1. 安装cygwin步骤略过(网上安装步骤很多,因为不是此篇文章重点,不再赘述) 但值得注意的在安装过程中一定要安装 以下部分 (1). net下的openssh和openssl,base下的 sed,devel下的subversion (2). 设置环境变量path, 需要 设置Cygwin 的bin 目录 ,具体是否需要设置 Cygwin 的usrbin 目录还不是很确定,但本人设置了 提示:cygwin安装完成后会有cygwin ssd服务在windows服务中,可以启动也可以不启动。 2. 下载并安装hadoop,(本人使用hadoop0.20.2版本) 下载:/dyn/closer.cgi/hadoop/core/ 安装:即将hadoop-0.20.2.tar.gz解压即可 2. 下载并安装 hadoop eclipse插件 (1)下载插件:/jira/browse/MAPREDUCE-1280 (注意:此hadoop-eclipse-plugin-0.20.3-SNAPSHOT.jar插件支持eclipse3.4+, hadoop0.20.2目录hadoop-0.20.2contribeclipse-plugin中的插件只支持到eclipse3.3版本,版本不支持的话,导致插件不能正常使用。) (2). 将插件拷贝到eclipse的plugins目录中(使用其他方法装载插件也可以),启动eclipse (3). 配置插件a. 打开eclipse -window-open prespective,可见并打开“ Map/Reduce ” 视图,如图: b. 打开eclipse -window-show view, 可见并打开 MapReduce tool - Map/Reduce locations,点击新建locations,视图如下: General选项卡各个参数说明: Location name:本地视图的location名称,自己自定义一个名称即可 Map/Reduce Master组内 host和port: 为 Map/Reduce Master的地址与端口号,此地址端口与hadoop服务器安装配置过程中 conf/mapred-site.xml文件中 mapred.job.tracker节点值一致。 DFS Master组内host和port: 此为HDFS服务器Master的地址与端口号, 此地址与hadoop服务器安装配置过程中 conf /core-site.xml文件中 节点值一致。 Username: 远程hadoop服务器登陆用户名。 SOCKS proxy: 如果登陆hadoop服务器需要代理的话,此组填入代理服务器的地址和端口 Advanced parameters选项卡部分参数说明(各个未提及参数请参见hadoop官方文档): hadoop.tmp.dir : HDFS文件存取缓存目录, 此项与hadoop服务器安装配置过程中 conf /core-site.xml文件中 hadoop.tmp.dir节点值一致。需要将hadoop.tmp.dir设置在一个空间相对大些的目录下,否则当map的输出结果比较大的时候,空间就会不足,导致任务失败。 H.dir: HDFS 的namenode 节点 name存储目录,此项与hadoop服务器安装配置过程中 conf /hdfs-site.xml文件中.dir节点值一致。 如此节点未配置,取默认选项 $ hadoop.tmp.dir /dfs/name, 此目录 namenode节点上出现 Hadoop.data.dir : HDFS的datanode节点data存储目录,此项hadoop服务器安装配置过程中 conf /hdfs-site.xml文件中dfs.data.dir节点值一致。如此节点未配置,取默认选项 $ hadoop.tmp.dir /dfs/data,此目录在各 datanode节点上出现 Hadoop.job.ugi: 登陆HDFS用户及用户组,使用格式为: 用户名,用户组 C配置完location后,将会在 project Explorer 中出现 DFS locations ,此时即可看到hadoop数据仓库中的文件夹及文件了,如图: 同时也可以在此界面上做文件新建上传删除操作 等等。 D配置hadoop环境 打开 eclipse - window -Prefereces ,点击Hadoop Map/Reduce ,浏览到hadoop解压的根目录。如图: 3.新建 Map/Reduce工程并运行 新建 Map/Reduce project, 即可在工程中建立 Mapper,Reducer,MapReduce Driver类,如图: 添加hadoop依赖jar包, 添加到 项目-properties - Java build path - libraries, 按需加入hadoop目录下及lib下的jar包。 4. 运行如下示例: Mapper代码如下:package test.map;import java.io.IOException;import java.util.StringTokenizer;import org.apache.hadoop.io.IntWritable;import org.apache.hadoop.io.Text;import org.apache.hadoop.mapreduce.Mapper;public class MapA extends Mapper 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); Deducer代码如下:package test.reduce;import java.io.IOException;import org.apache.hadoop.io.IntWritable;import org.apache.hadoop.io.Text;import org.apache.hadoop.mapreduce.Reducer;public class ReduceA extends Reducer private IntWritable result = new IntWritable(); public void reduce(Text key, Iterable values, Context context ) throws IOException, InterruptedException int sum = 0; for (IntWritable val : values) sum += val.get(); result.set(sum); context.write(key, result); MapReduce Driver代码如下:package test;import java.io.IOException;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.lib.input.FileInputFormat;import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;import org.apache.hadoop.util.GenericOptionsParser;import test.map.MapA;import test.reduce.ReduceA;public class Driver public static void main(String args) throws IOException, InterruptedException, ClassNotFoundException Configuration conf = new Configuration(); Job job = new Job(conf, word count); job.setJarByClass(Driver.class); job.setMapperClass(MapA.class); job.setCombinerClass(ReduceA.class); job.setReducerClass(ReduceA.class); job.setOutputKeyClass(Text.class); job.setOutputValueClass(IntWritable.class); FileInputFormat.addInputPath(job, new Path(ab); FileOutputFormat.setOutputPath(job, new Path(output2); System.exit(job.waitForCompletion(true) ? 0 : 1); System.exit(job.waitForCompletion(true) ? 0 : 1);以上代码例子为hadoop自带wordcount例子, 只是将其内部类才为普通类而已。写完以上代码 点击 Run as run on hadoop即可运行也可以将以上类export为jar包,传到 Map/Reduce Master(本人环境为namenode)上去运行可使用此地址与端口查看job运行情况::50030/jobtracker.jsp2) 遇到的问题问题一: 安装hadoop plugin后,无法运行hadoop程序, 点击 run on hadoop无反应, 解决方法:hadoop-0.20.2-eclipse-plugin.jar版本插件无法支持eclips3.4运行,重新换取hadoop-eclipse-plugin-0.20.3-SNAPSHOT.jar版本插件即可。问题二: 在Hadoop locations视图中,能看到hadoop仓库中文件夹及文件,但无法对其操作 解决方法:配置location的H.dir与hadoop.data.dir的值与hadoop仓库配置或默认配置相同即可。 问题三: 运行得到如下异常:Exception in thread main org.apache.hadoop.mapreduce.lib.input.InvalidInputException: Input path does not exist: hdfs:/:9000/user/administrater/ab 解决方法:配置location中hadoop.job.ugi为正确的登陆用户及用户组即可。问题四: 运行中抛出如下异常:java.lang.OutOfMemoryError: Java heap space 解决方法:Run configuration 中给 类增加运行参数 “Xmx512m”。3) 过程疑问1 Map/Reduce Master与 DFS Master不是同一台机器时,怎样配置及运行Map/Reduce程序。2 程序中的System.out.print语句在eclipse能打印,将类放到namenode上为啥打印不出来呢?4. Hadoop优化 想做好hadoop优化,首先要了解hadoop中map/reduce的工作原理1)map/reduce工作原理(未完)2)各个优化参数配置在编写MapReduce应用程序时,除了最基本的Map模块、Reduce模块和驱动方法之外,用户还可以通过一些技巧优化作业以提高其性能。对用户来说,合理地在MapReduce作业中对程序进行优化,可以极大地提高作业的性能,减少作业执行时间。我们从以下几个方法分析MapReduce作业的优化方法。1选择Mapper的数量Hadoop平台在处理大量小文件时性能比较逊色,主要由于生成的每个分片都是一整个文件,Map操作时只会处理很少的输入数据,但是会产生很多Map任务,每个Map任务的运行都包括产生、调度和结束时间,大量的Map任务会造成一定的性能损失。可以通过任务Java虚拟机(JVM)重用来解决这个问题,默认每JVM只运行一个任务,使用JVM重用后一个JVM可以顺序执行多个任务,减少了启动时间。控制JVM的属性是mapred.job.reuse.jvm.num.tasks,它指定作业每个JVM运行的任务的最大数量,默认为1。可以通过JonConf的setNumTasksToExecutePerJvm()方法设置,若设置为-1则说明统一作业中共享一个JVM任务的数量不受限制。如果输入的文件过大,还可以通过将HDFS上的块大小增大,比如增加到256M或512M,以减少Mapper数量,可以通过运行参数(-Ddfs.block.size = $256*1024*1024)将块大小增大到256M。2选择Reducer的数量在Hadoop中默认是运行一个Reducer,所有的Reduce任务都会放到单一的Reducer去执行,效率非常低下。为了提高性能,可以适当增大Reducer的数量。最优的Reducer数量取决于集群中可用的Reducer任务槽的数目。Reducer任务槽的数目是集群中节点个数与mapred.tasktracker.reduce.tasks.maximum(默认为2)的乘积,也可以通过MapReduce的用户界面获得。一个普遍的做法是将Reducer数量设置为比Reducer任务槽数目稍微小一些,这会给Reducer任务留有余地,同时将使得Reducer能够在同一波中完成任务,并在Reducer阶段充分使用集群。Reducer的数量由mapred.reduce.tasks属性设置,通常在MapReduce作业的驱动方法中通过setNumReduce
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 农发行衡水市深州市2025秋招信息科技岗笔试题及答案
- 农发行石家庄市正定县2025秋招群面模拟题及高分话术
- 农发行邢台市襄都区2025秋招无领导小组面试案例库
- 定安县中储粮2025秋招网申填写模板含开放题范文
- 恭城瑶族自治县中储粮2025秋招笔试粮食政策与企业文化50题速记
- 内科医生个人工作总结(集锦15篇)
- 2025年度周口西华县中医院校园招聘17名考前自测高频考点模拟试题有完整答案详解
- 焦作市中石化2025秋招笔试模拟题含答案炼油设备技术岗
- 县城市供水突发事件应急预案范文(9篇)
- 2025年合肥热电集团社会招聘5人考前自测高频考点模拟试题及答案详解一套
- 煤矿安全规程2025版解读
- 哈里伯顿Sperry定向钻井介绍专题培训课件
- 2021年江苏省徐州市中考生物试卷(附详解)
- JJF 1704-2018 望远镜式测距仪校准规范
- 石油化工设备维护检修规程通用设备12
- 《三角形的面积》教学设计方案
- GB/T 14667.1-1993粉末冶金铁基结构材料第一部分烧结铁、烧结碳钢、烧结铜钢、烧结铜钼钢
- 带状疱疹及带状疱疹后神经痛
- 2022年毕节市农业发展集团有限公司招聘笔试试题及答案解析
- 卒中单元中的护理
- 中药鉴定学习题集全
评论
0/150
提交评论