zoukankan      html  css  js  c++  java
  • Hadoop集群配置【一、各种悲催的错误】

    暂且隐去具体什么项目,需要处理存储海量数据,一次存储多次读取,数据用作建模分析以及检索。

    本人比较倒霉,部署时基本能遇到的问题都遇到了。。好吧,Hadoop配置的教程基本网上写烂了都,我就当时小记一下,留个纪念。

    今天头给我五个服务器,让我挑选一台作为master,其他作为slave。原则是:配置好的优先,如果配置相差不大,那么地址最高或者最低的当作master。

    好,我接到的五台都是turbolinux系统。地址是内网互联的,彼此通过公网连不上的(虽然在一个网段),有防火墙。

    公网(内网)IP:

    128.0.0.1(192.168.0.1)

    128.0.0.2(192.168.0.2)

    128.0.0.3(192.168.0.3)

    128.0.0.4(192.168.0.4)

    128.0.0.5(192.168.0.5)

    好了,这回大家看看我是如何悲催的遇到各种问题的

    零.开部署账户

    开账户,这个不是我开的,但是头儿强调了,必须开独立账户,比如,服务器上本来有oracle的DBA,那么你部署Hbase就给Hbase开个独立账户,然后分配下来,这样权限分明,便于操作和管理。而且,开账户密码和用户名最好一样。

    一.hosts是神马?

    头儿说了,修改hosts,在配置中使用hostname代替配置文件中的IP地址。我傻眼了,hosts是什么?原来在/etc/hosts这个文件中,你可以做IP与及其名称的映射。也就是说,在这个文件中你写了这样的内容:

    192.168.0.1     hmaster      [此处你可以添加别名]

    192.168.0.1     hslave1

    192.168.0.2     hslave2

    ......                ......

    192.168.0.5     hslave5

    如果在这五台机器的hosts文件都做了修改,那么右边的名称就会被解释为IP地址,也可以说是IP的代称。这样配置文件中就不需要再有IP地址了,因为这些字符串被做了映射。但前提是,这五台的hosts映射都一样,另外,一个IP可以映射成多个,但是一个名称不能对应多个IP。

    应该注意的是,Hadoop配置不支持下划线,所以建议还是使用'-'代替‘_’。

    二.免密码登录

    其实这一步很容易,把生成的公钥cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys这样追加进去就行了,但是,authorized_keys的权限应该是644。我照着做了,可是不行,为什么,因为我忽略了.ssh目录的权限,需要是700,弄好了就搞定!

    三.DataNode起不来

    之前我老格式化Hdfs,这样如果你格式化之前没有清空上一次tmp中的内容(其实不用清空,待会再说,tmp就是你core-site.xml配置文件中的hadoop.tmp.dir,默认是/tmp。)那么就会出现namenode namespaceID 不一致的错误,你可以在logs文件夹中的datanode日志看到它。你先停止一切Hadoop服务,再如果清空一下目录,然后在格式化就没事了。

    其实清空目录这个办法最简单,但是太暴力了,你可以去看看<dfs.data.dir>/current/version这个文件里面的内容,尝试的改一下就OK了。

    四.wordcount程序卡掉了

    这个不知道为何,reduce到了16%就会卡掉了,我当时把hadoop.tmp.dir配成了/tmp,就这样了,然后改了个其他的目录就好了。。现在也不清楚为啥。

    五.hadoop is in safe mode

    如果遇到Hadoop报错:hadoop is in safe mode 请先运行命令: hadoop dfsadmin -safemode leave来解除安全模式。

    六.多硬盘配置

    说白了提高一下你硬盘的利用率,怎么搞,用df -lh命令看看你挂载的硬盘都挂在什么目录下了,然后分别在这些目录中建立你要使用的目录,你建立好之后,把这些目录按照如下方法配置下去:

    修改mapred-site.xml,处在不同硬盘上的目录用逗号隔开

    <property> 

    <name>mapred.local.dir</name> 

    <value>$HDATA1, $HDATA2, …</value>

    </property> 

    修改hdfs-site.xml的dfs.data.dir

    <property>

    <name>dfs.data.dir</name>

    <value>$HDATA1, $HDATA2, …</value>

    </property>

    七.Hbase的Regionserver连接不上master

    部署好Hbase打开60010主页查看只有一个regionserver,去regionserver查看日志,发现regionserver一直尝试连接master的hosts文件中127.0.0.1所映射的主机名,恰好,我的服务器的这个主机名对应的是公网Ip,有防火墙。所以就连不上了,具体错误如下:

    WARN org.apache.hadoop.hbase.regionserver.HRegionServer: Unable to connect to master. Retrying

    . Error was:
    java.net.ConnectException: Connection refused

    这样你只需要去master的hosts文件中看看127.0.0.1对应这什么,然后把它删掉,比如:

    127.0.0.1    a1     localhost.localdomain localhost

    把a1删除。

    原因在于,master告诉slave,127对应的名称就是localhost,所以regionserver们在尝试连接master的时候都会通过127对应的名称去连接,如果这个名称恰好连不上那就出问题了。

    出现了错误,一定要去看日志,日志里面写的很清楚。

    八.防火墙

    如果你觉得那里都弄好了,HBase也可以启动,但是再HBase停止的时候却一直停不掉,或者很慢很慢,或者你选取其中的如干节点可以,但是选择所有的节点就不可以。。。。反正你遇到了很奇怪的显现,那么看看你每台机器的防火墙吧。关闭你的防火墙可能一下子就好了。

    之后把每个环节的详细步骤整理成文档吧。困了

  • 相关阅读:
    Unity 小笔记
    UE4 Pure函数的特点
    C++ const总结
    配色问题lingo实现
    选址问题lingo求解
    迷宫问题python实现(靠右手摸墙)
    环形队列C++实现
    排队论的C实现
    递归实现全排列序列C语言实现
    双人贪吃蛇小游戏C++原创
  • 原文地址:https://www.cnblogs.com/colorfulkoala/p/2583841.html
Copyright © 2011-2022 走看看