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停止的时候却一直停不掉,或者很慢很慢,或者你选取其中的如干节点可以,但是选择所有的节点就不可以。。。。反正你遇到了很奇怪的显现,那么看看你每台机器的防火墙吧。关闭你的防火墙可能一下子就好了。

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

你可能感兴趣的:(hadoop)