暂且隐去具体什么项目,需要处理存储海量数据,一次存储多次读取,数据用作建模分析以及检索。
本人比较倒霉,部署时基本能遇到的问题都遇到了。。好吧,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停止的时候却一直停不掉,或者很慢很慢,或者你选取其中的如干节点可以,但是选择所有的节点就不可以。。。。反正你遇到了很奇怪的显现,那么看看你每台机器的防火墙吧。关闭你的防火墙可能一下子就好了。
之后把每个环节的详细步骤整理成文档吧。困了