最近需要配置一个 HDFS 和 HBase 环境,看了网上别人写的博客内容之后发现。很多人写的根本不对,少了步骤,或者根本就是错的,或者配置文件根本写的不对。导致我自己不断出现问题无法搭建出稳定的 HDFS 环境。由于采用伪分布式安装,按照网上的教程安装之后,启动HDFS,有时候Namenode未启动,有时候Datanode未启动,运行HBase后,有时候HMaster未启动,有时候根本进了HBase Shell之后任何命令都报错。非常郁闷。所以必须自己写一篇安装教程。
如果你安装了Hadoop与HBase之后可以正常运行,但是重启电脑之后,出现以下几种状况: 1) Hadoop的Namenode没有运行  2) Hadoop的Datanode没有运行  3) HBase的HMaster没有运行  4) 电脑重启后HBase Shell任何命令都会报错,  那么你的Hadoop和HBase一定存在配置问题。
对于Hadoop与HBase,正常的效果应当是,HBase将数据内容保存在HDFS上(也可以保存在本地),重启电脑之后任然可以取得之前存储的数据(前几天我安装的HBase连这点都做不到....)


1. Hadoop配置
安装的具体细节就不说了。无非就是下载tar包,拷贝至/usr/local/目录,更改文件所有者。ssh-keygen产生公钥密钥,这些都不说了。
配置 hadoop-env.sh , 将 

export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_21

这一句添加上去。路径根据个人情况设置。




配置 core-site.xml, 这一步非常重要,尤其是hadoop.tmp.dir变量,最好配置在本地/home/username/路径下,如果不对其配置,重启电脑后,HDFS上存放的数据将会丢失。hadoop.tmp.dir属性


<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
    <property>
        <name>fs.default.name</name>
        <value>hdfs://localhost:9000</value>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/home/hduser/tmp</value>
    </property>
</configuration>




配置 hdfs-site.xml, 这个文件用来设置冗余块的数量,由于是伪分布式安装,设为1就可以了,全分布式的情况下设为3比较合理。


<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
</configuration>




配置 mapred-site.xml,


<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
    <property>
        <name>mapred.job.tracker</name>
        <value>localhost:9001</value>
    </property>
</configuration>




这样就算配置好了。可以在hadoop目录下使用 ./bin/hadoop namenode -format 命令格式化文件系统了。之后使用 ./bin/start-all.sh 启动HDFS文件系统。访问 http://localhost:50070 如果看到了网页,那么HDFS就算安装完成了。




2. HBase配置


一样的,下载tar包,拷贝至/usr/local/目录,更改文件所有者。

配置 hbase-env.sh, 将 


export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_21

这一句添加上去。路径根据个人情况设置。


配置 hbase-site.xml, 这里将 hbase.rootdir 存放在 HDFS 上,这里端口号一定要和之前设置的 HDFS的 fs.default.name的端口号一致。

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
    <property>
        <name>hbase.rootdir</name>
        <value>hdfs://127.0.0.1:9000/hbase</value>
    </property>
</configuration>

HBase这样就配置好了。




3. 注意点


由于这样的配置,HBase是依赖与HDFS的文件系统的。所以应当先启动HDFS,之后启动HBase。之前出现过几次情况,在未启动HDFS的情况下,先启动了HBase,结果HBase可以正常启动,却无法正常退出,并且所有HBase Shell指令都会报错(由于访问不到HDFS上的HBase文件)。


不知道在不使用 ./bin/stop-all.sh 和 ./bin/stop-hbase.sh 的情况下,直接关闭系统,重启电脑,是否会对文件系统造成破坏。

所以,切记,一定要先启动Hadoop,并且可以通过 http://localhost:50070/dfshealth.jsp 查看HDFS并且可以浏览文件之后再启动HBase。否则 HBase也会出现一切问题,如启动时间过长,Master一直在初始化等等。