Hadoop集群常见错误收集_第1页
Hadoop集群常见错误收集_第2页
Hadoop集群常见错误收集_第3页
Hadoop集群常见错误收集_第4页
Hadoop集群常见错误收集_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、这里将自己在初识hadoop过程中遇到的一些错误做一个简单总结:  (一)启动hadoop集群时易出现的错误:1.   错误现象:.NoRouteToHostException: No route to host.   原因:master服务器上的防火墙没有关闭。   解决方法: 在master上关闭防火墙: chkconfig iptables off.2.    错误现象:org.apache.hadoop.ipc.RPC: Server at JMN/03:90

2、00 not available yet. /* JMN/03 是  hadoop集群当中master的主机名/ip */   原因:/etc/hosts中的文件被自动篡改。   解决方法: 将/etc/hosts 文件按配置文件要求改回来。3.    错误现象:Too many fetch-failures.   原因:结点间的连通不够全面。   解决方法:        1)

3、 检查 /etc/hosts要求本机ip对应服务器名,并且包含所有的服务器ip和服务器名。        2) 检查 .ssh/authorized_keys要求包含所有服务器(包括其自身)的public key。(二)  在hadoop集群的master中用命令运行例子易出现的故障:1. 错误现象:java.lang.OutOfMemoryError: Java heap space.   原因:JVM内存不够。   解决方法:修改mapred-site

4、.xml中mapred.child.java.opts属性的值,其默认值是-Xmx200m 可根据需要适当增大 该值。2. 错误现象:could only be replicated to 0 nodes, instead of 1   解决方法:在NameNode上执行命令:hadoop namenode format重新格式化HDFS,在格式化之前,需要将你  NameNode上所配置的.dir这一namenode用来存放NameNode 持久存储名字空间及事务日志的本地文件系统路径删除,同时将各DataNode上的dfs.data.

5、dir的路径DataNode存放块数据的本地文件系统路径的目录也删除。 3.  错误现象:namenode in safe mode.    原因:hadoop进入安全模式。 解决方法:在shell中执行命令hadoop dfsadmin -safemode leave 使hadoop离开安全模式。(三)在windows下Eclipse中运行例子易出现的错误:1. 错误现象:org.apache.hadoop.security.AccessControlException: Permission denied: user=administrat

6、or, access=EXECUTE, inode="job_201111031322_0003":heipark:supergroup:rwx-. 原因:本地用户administrator(本机windows用户)想要远程操作hadoop系统,没有权限引起的。 解决办法:i、如果是测试环境,可以取消hadoop hdfs的用户权限检查。打开conf/hdfs-site.xml,找到dfs.permissions属性修改为false(默认为true)OK了。ii、修改hadoop location参数,在advanced parameter选项卡中,找到

7、hadoop.job.ugi项,将此项改为启动hadoop的用户名即可。2错误现象:IOException: Cannot run program "chmod": CreateProcess error=2.  原因: 没有安装cygwin或 没有配置环境变量。    解决办法:安装并配置环境变量 bin到 path下 重启 eclipse 问题即可。3.  错误现象: WARN mapred.LocalJobRunner: job_local_0001java.lang.OutOfMemoryError: Java he

8、ap spaceat org.apache.hadoop.mapred.MapTask$MapOutputBuffer.<init>(MapTask.java:781)at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:350).  原因:客户端程序运行时java虚拟机内存分配不够  解决办法:修改run configuration,选择Arguments选项卡,在VM arguments栏中加入-Xmx1024m,保存即可解决问题。这是一位网友收集的hadoop,hbase,zookeep

9、er错误日志及部分解决办法,以备以后遇到问题作为参考之用。hadoop-0.20.2 & hbase-0.90.1集群启动错误问题解决:问题如下:org.apache.hadoop.ipc.RPC$VersionMismatch: Protocol tocol.ClientProtocol version mismatch. (client = 42, server = 41)          at org.apache.hadoop.ipc.RPC.g

10、etProxy(RPC.java:364)        at org.apache.hadoop.hdfs.DFSClient.createRPCNamenode(DFSClient.java:113)        at org.apache.hadoop.hdfs.DFSClient.<init>(DFSClient.java:215)        at org.ap

11、ache.hadoop.hdfs.DFSClient.<init>(DFSClient.java:177) 2011-01-21 00:14:41,550 INFO org.apache.hadoop.hbase.master.HMaster: Aborting初步认为是hadoop-0.20.2 & hbase-0.90.1版本问题造成的,hbase-0.90.1/lib中hadoop-core-0.20-append- r1056497.jar使用的hadoop-core-0.20,因此将其替换为hadoop-0.20.2-core.jar即可Hbase重启之后就无法启

12、动的现象:当我们使用Hbase 0.20.2的时候,遇到了2个奇怪的问题。我们使用了数台机器构建了一个集群,并且按照Hadoop/Hbase的"Getting Started"安装配置了Hadoop和Hbase。之后能够正常启动Hadoop和Hbase,并且创建table和插入数据。不过,当我们访问Master的页面时: 52:60010/master.jsp ,我们发现了第一个问题:在regionserver区域,出现了2个的regionserver,但是我们并没有在conf/regionservers将master设置为

13、regionserver:Region ServersAddress Start Code Load:60030 1263383321075 requests=0, regions=0, usedHeap=0, maxHeap=0:60030 1263383321096 requests=0, regions=0, usedHeap=0, maxHeap=0 但是,虽然出现了以上的怪现象,但是hbase似乎仍然能够正常工作。只是,当我们打算重启hbase的时候,我们发现了第二个问题:我们尝试运行bin/stop-hbase.sh,之后,又运行启动hbase的

14、脚本:bin/ start-hbase.sh,这一次,当我们访问master页面的时候52:60010/master.jsp,出现了如下的错误:HTTP ERROR: 500Trying to contact region server null for region , row ", but failed after 3 attempts.Exceptions:org.apache.hadoop.hbase.client.RetriesExhaustedException: Failed setting up proxy to /

15、48:60020 after attempts=1此时,Hbase能够进入shell,但是无法执行任何操作。于是再次试图关闭hbase的时候,却发现无法停止master,那个"stop master"后面的“.”出现了许许多多,仍然无法停止master节点。于是我们不得不强制kill掉master。Hbase就这样挂掉了。Hbase重启之后就无法启动的原因分析:经过多方排查,最后我在尝试使用netstat -an查看端口占用情况的时候发现:在WAMDM1节点上,regionserver占用的60020端口占用为::60020而在WAMDM2节点上, reg

16、ionserver占用的60020端口占用为:49:60020我感觉颇为蹊跷,之后便检查/etc/hosts文件,果然发现在WAMDM1和WAMDM2下的hosts文件不同。在WAMDM1的hosts文件中的内容为: WAMDM1 localhost.localdomain localhost48 WAMDM WAMDM49 WAMDM WAMDM50 WAMDM WAMDM351 WAMDM WAMDM452 WAMDM WAMDM5大家注意第一行。我

17、们在使用配置Hadoop/Hbase的时候,常常使用主机名来代替IP使用,但是在WAMDM1的机器上,WAMDM1被映射为,于是master和regionserver之间的通信就出错。这也就是为什么我们经常在日志中以及错误提示中看到如下信息:Server at /48:60020 could not be reached after 1 tries, giving .apache.hadoop.hbase.client.RetriesExhaustedException: Failed setting up proxy to /10.37.17

18、.248:60020 after attempts=1  at org.apache.hadoop.hbase.ipc.HBaseRPC.waitForProxy(HBaseRPC.java:424)Hbase重启之后就无法启动的解决办法:于是,我将所有机器的/etc/hosts文件,都改为了如下配置: localhost48 WAMDM WAMDM49 WAMDM WAMDM50 WAMDM WAMDM351 WAMDM WAMDM452 WAMDM WAMDM

19、5# The following lines are desirable for IPv6 capable hosts:1 localhost ip6-localhost ip6-loopbackfe00:0 ip6-localnetff00:0 ip6-mcastprefixff02:1 ip6-allnodesff02:2 ip6-allroutersff02:3 ip6-allhosts同时,为了保险起见,我在stop-hbase.sh中,也加入停止regionservers的命令(虽然在网上查不到停止regionservers的必要性,以及这个脚本存在bug的证据,但是这样改经过测试是

20、没有问题的):"$bin"/hbase-daemons.sh -config "$HBASE_CONF_DIR" -hosts "$HBASE_REGIONSERVERS" stop regionserver 这个命令需要加在stop master之前。至于不加入这个停止regionservers的命令是否可行,在未来我会进一步测试。通过以上修改,出现两个的Regionserver的问题,以及Hbase重启就挂的问题得到彻底解决!Hbase重启之后就无法启动的问题解决之后的反思:从这次问题解决中吸取如下教训

21、:在配置分布式系统的时候,一定要注意各个机器之间配置的统一性,包括主机名(hosts文件)、用户名、Hadoop/Hbase各种配置文件等,对于不一致的情况,一定要特别仔细的检查,然后统一起来。已经不止一次在这方面吃亏了,希望大家切记!转自:在重新启动HBase服务的时候可能会出现如下的错误:INFO ipc.HbaseRPC: Server at /00:60020 could not be reached after 1 tries, giving up.出现这个错误的原因可能会有很多,比如各个配置文件中的地址不一致等,但我这里给出的一个可能原因是端口号被其他某一进程

22、占用,或者还是HBase进程使用着,但此服务(或说此端口)已经不再可用,解决的方式为:通过此端口查找到对应的进程,然后杀死对应的进程,再重启HBase服务,你会发现上面出现的错误将消失,服务启动正常。具体步骤为:1、  lsof -i:60020                  2、  kill -9 PID(进程ID)       &

23、#160;              3、  重启HBase服务。 FAILED: Error in metadata: MetaException(message:org.apache.hadoop.hbase.MasterNotRunningException: :60000最近在做数据挖掘方面的事情,需要hive+hbase表,但是使用hive链接hbase现有的数据库时,总是抛异常。FAILED: Error in metadata: MetaEx

24、ception(message:org.apache.hadoop.hbase.MasterNotRunningExceptio n: :60000        at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.getMaster(HConnectionManager.java:394)        at org.apache.hadoop.hb

25、ase.client.HBaseAdmin.<init>(HBaseAdmin.java:83)        at org.apache.hadoop.hive.hbase.HBaseStorageHandler.getHBaseAdmin(HBaseStorageHandler.java:74)FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask下面是我的hiveql语句hive> creat

26、e EXTERNAL table hbase_table_log(key string, label bigint) stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'              > with SERDEPROPERTIES ("hbase.columns.mapping"=":key, b:label") &

27、#160;                                                 &

28、#160;    > TBLPROPERTIES("" = "log");     解决方案:这个问题基本就是hive+hbase版本的问题,你需要将你所使用的hbase的jar包拷贝到hive的lib目录下进行替换,这还不算结束,你需要将hbase-site.xml拷贝到conf目录下面。在不重启hive的情况下,重新建立external table,恭喜,运行成功!这里需要注意的地方是with下面的mapping,它对应的值"

29、;:key,b:label",不能出现空格,否则它会告诉你FAILED: Error in metadata: MetaException(message:Column Family  b is not defined in hbase table log)FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask希望大家日后遇到这个问题的时候,可以顺利解决!FAILED: Error in metadata: MetaExcep

30、tion(message:org.apache.hadoop.hbase.MasterNotRunningException: CNC-JN-R-541:60000 出现这个错误的原因是我引入的hbase包和hive自带的hive包冲突,删除hive/lib下的 hbase-0.89.0-SNAPSHOT.jar, OK了。FAILED: Error in metadata: MetaException(message:Column Family department is not defined in hbase table hello)当使用hive相关管理已

31、经存在的hbase 多列table时,出现上面错误,而且列族“department ”的确存在,最终发现原因是:在hive中使用CREATE EXTERNAL TABLE 创建表的时候,"hbase.columns.mapping"的值中不能包含空格hdfs中,提示权限错误:代码如下:public class Loadup public static void main(String args) throws Exceptionfinal int piece=10;String localSrc=args0;String Dst=args1;Configuration co

32、nf=new Configuration();InputStream in=new BufferedInputStream(new FileInputStream(localSrc);FileSystem fs=FileSystem.get(URI.create(Dst),conf);OutputStream out=fs.create(new Path(Dst),new Progressable()public void progress()System.out.println("copy:."););IOUtils.copyBytes(in, out, 4096,tru

33、e);System.out.println("success");报错情况如下:Exception in thread "main" org.apache.hadoop.security.AccessControlException:org.apache.hadoop.security.AccessControlException: Permission denied: user=lenovo-pclenovo, access=WRITE, inode="hadoopnode":hadoopnode:supergroup:rwxr-x

34、r-xat sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)解决办法如下:hadoop fs -chmod 777 /user/inputhadoop fs -chmod 777 /user/outputhadoo

35、p fs -chmod 777 /user/hadoopHadoop】集群之外的机器如何连接到集群并与HDFS交互,提交作业给Hadoop集群转自:集群以外的机器如何访问Hadoop集群,并像集群中提交作业和传送数据(1)首先,在机器上安装nutch或者hadoop(2)配置两个文件hadoop-site.xml:<configuration><property> <name></name> <value>hdfs:/gc04vm12:9000</value> &

36、lt;description> </description></property><property>     <name>mapred.job.tracker</name> <value>gc04vm12:9001</value> <description> </description></property></configuration>(3)这样便能执行命令,查看集群状态,向集群提交作业(4)

37、hdfs中的用户使用root登陆而hadoop中没有创建root用户时,使用如下命令时,查看到的就不是nutch用户主目录 /user/root了rootgc03vm12 nutch-1.0# bin/hadoop dfs -ls   执行此命令时,即是列出/user/root(root用户主目录)目录下的文件或目录ls: Cannot access .: No such file or directory.  没有此目录rootgc03vm12 nutch-1.0# bin/hadoop dfs -ls /Found 3 itemsdrwxr-xr-x 

38、;  - nutch supergroup          0 2010-05-21 00:42 /tmpdrwxr-xr-x   - nutch supergroup          0 2010-05-21 00:53 /userdrwxr-xr-x   - nutch supergroup      

39、;    0 2010-05-21 00:55 /usr    这个是什么?rootgc03vm12 nutch-1.0# bin/hadoop dfs -mkdir x  主目录(/user/root)中创建x目录,提示以下信息mkdir: org.apache.hadoop.security.AccessControlException: Permission denied: user=root, access=WRITE, inode="user":nutch:supergroup:rwxr-xr-

40、x这是因为root用户对/user/目录没有写权限(drwxr-xr-x   - nutch supergroup          0 2010-05-21 00:53 /user)hdfs中的nutch用户是启动hadoop集群的这个用户,当客户机中也存在nutch用户时,登陆后访问hdfs时,进入的是home目录(/user/nutch)。hdfs中文件和目录的权限类似linux,可以修改其权限,改变其所属组nutch用户格式化namenode,启动hadoop集群(会用到nut

41、ch用户的公钥信息,ssh配置)后,执行命令,nutchgc03vm12 nutch-1.0# bin/hadoop dfs -ls   执行此命令时,即是列出/user/nutch(nutch用户主目录)目录下的文件或目录ls: Cannot access .: No such file or directory.因为没有/user/nutch目录,所以不能访问,而此时若创建一个文件,如使用以下命令nutchgc03vm12 nutch-1.0# bin/hadoop dfs -mkdir x  则可以顺利执行,此时它将创建/user/nutch/x目录。而使用

42、root用户不行,是因为 root用户对/user/目录没有写权限。 那么如何创建一个root用户呢,可以这样做超级用户nutch在hdfs中创建目录/user/root,即 bin/hadoop dfs -mkdir /user/root更改/user/root目录所属用户和组, bin/hadoop dfs -chown -R root:root /user/root (若此处没有指定组,则默认root属于supergroup组, bin/hadoop dfs -chown -R root /user/root)这样就相当于在hdfs中创建了用户root,组root;用户权限和Linux类

43、似,nutch是超级用户。例如nutch在root的home目录下创建目录s,则s的权限如下,属于nutch,组是rootdrwxr-xr-x   - nutch root          0 2010-05-21 04:41 /user/root/sroot用户此时就不能写s目录了rootgc04vm14 nutch-1.0# bin/hadoop dfs -mkdir s/xmkdir: org.apache.hadoop.security.AccessControlExcept

44、ion: Permission denied: user=root, access=WRITE, inode="s":nutch:root:rwxr-xr-xroot用户属于root组,并且执行作业,会提示错误,如下rootgc03vm12 nutch-1.0# bin/nutch crawl  /user/nutch/urls -dir data2 -depth 5 -topN 8提示如下错误org.apache.hadoop.security.AccessControlException: org.apache.hadoop.security.AccessCo

45、ntrolException: Permission denied: user=root, access=WRITE, inode="tmp":nutch:supergroup:rwxr-xr-x这是因为root用户对/tmp目录(hdfs目录)没有写权限,因为作业执行时,会在/tmp目录下生成相应的job文件,/tmp的权限如下:drwxr-xr-x   - nutch supergroup          0 2010-05-21 00:42 /tmp因此非超

46、级用户提交作业时,用户问题是一个很麻烦的问题注:hadoop有些命令只能在namenode上执行  在windows eclipse开发环境提交job到远处linux hadoop集群,运行mapred报错“IOException: Cannotrunprogram "chmod": CreateProcess error=2” 原因:安装cygwin,而且需要设置"cygwinbin"到环境变量PATH中,使用eclipse-plugin提交mapreduce程序,必须在window端安装cygwin,并将cyg

47、winbin"到环境变量PATH中,否则不行。 如果eclipse-plugin提交任务遇到这个错误:org.apache.hadoop.security.AccessControlException: Permission denied: user=cyg_server, access=EXECUTE, inode="job_201010161322_0003":heipark:supergroup:rwx- 解决:1、刚开始还使用“./bin/hadoop dfs -chmod 777 ”,后来发现老是这样设置麻烦。可以取消had

48、oop hdfs的用户权限检查。打开conf/hdfs-site.xml,找到dfs.permissions属性修改为false(默认为true)OK了。注意生产环境处于安全考虑不要这么搞。2、修改hadoop location参数,在advanced parameter选项卡中,找到hadoop.job.ugi项,将此项改为“你的hadoop用户名”,Tardis,这样就不会出现那个错误了如果运行简单的hadoop mapreduce wordcount程序,点击run on hadoop出现以下错误:11/08/16 10:31:39 WARN mapred.LocalJobRunner:

49、 job_local_0001java.lang.OutOfMemoryError: Java heap space at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.<init>(MapTask.java:781) at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:350) at org.apache.hadoop.mapred.MapTask.run(MapTask.java:307) at org.apache

50、.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:177)11/08/16 10:31:39 INFO mapred.JobClient:  map 0% reduce 0%11/08/16 10:31:39 INFO mapred.JobClient: Job complete: job_local_000111/08/16 10:31:39 INFO mapred.JobClient: Counters: 0Exception in thread "main" java.io.IOEx

51、ception: Job failed! at org.apache.hadoop.mapred.JobClient.runJob(JobClient.java:1252) at mapred.WordCount.main(WordCount.java:110) 原因:客户端程序运行时java虚拟机内存分配不够 解决:修改run configuration(右键要执行的程序,run as >run configurations),弹出窗口中左侧选择要执行的程序,右边选择Arguments选项卡,在VM arguments栏中加入-Xmx1024m,

52、保存后执行没有问题(即将执行时虚拟机内存调大)12/04/24 15:32:44 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform. using builtin-java classes where applicable12/04/24 15:32:44 ERROR security.UserGroupInformation: PriviledgedActionException as:Administrator cause:java.io.IOException: Failed to set permissions of path: tmphadoop-AdministratormapredstagingAdministrator-519341271.staging to 0700Exception in thread "main" java.io.IOException: Failed to set permissions of path: tmphado

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论