Hadoop HBase

来源:互联网 发布:淘宝联盟如何跟聚划算 编辑:程序博客网 时间:2024/05/22 15:49

一.简要介绍 

 Hadoop HBase是Apache Hadoop 项目的一部分,基于Hadoop Distributed FileSystem,是一个开源的,基于列存储模型的分布式数据库。HBase的目标是(原文):the hosting of very largetables -- billions of rows X millions of columns -- atop clusters ofcommodity hardward.   

二.环境部署

  在自己的笔记本和同学的笔记本上部署Hadoop.(Fedora Core 9)

 具体步骤如下:

首先,保证计算机中安装了JDK 和openSSH

JDK可以从Sun的官方网站上下载--------http://java.sun.com/javase/downloads/index.jsp,

openSSH在Linux系统安装的时候一般都一起安装的,如果没有,可以在google search一下,此处不再赘述。

接下来,保证两台计算机中都有一个统一名称的用户hadoop(自己定),本人设置的情况如下:

/home/hadoop

将Hadoop文件解压到/home/hadoop/hadoopinstall文件夹下。

新建目录/home/hadoop/hadoopinstall/hadoopconf,将

/home/hadoop/hadoopinstall/hadoop-0.16.4/conf下的

masters

slaves

hadoop-env.sh

hadoop-site.xml

copy the four files to /home/hadoop/hadoopinstall/hadoopconf and then

set HADOOP_CONF_DIR to /home/hadoop/hadoopinstall/hadoopconf

(/etc/profile)

设置/etc/hosts file 

加上

192.168.1.12(本机IP) hadoop-1 hadoop-1

192.168.1.13(另一台机器IP) hadoop-2 hadoop -2

将hadoop-1作为Namenode and JobTracker

将hadoop-2作为Datanode and TaskTracker

 

SSH设置
在Hadoop启动以后,Namenode是通过SSH(Secure Shell)来启动和停止各个节点上的各种守护进程的,这就需要在节点之间执行指令的时候是不需要输入密码的方式,故我们需要配置SSH使用无密码公钥认证的方式。
首先要保证每台机器上都装了SSH服务器,且都正常启动。实际中我们用的都是OpenSSH,这是SSH协议的一个免费开源实现。

首先,在hadoop-1上生成密钥对:

[hadoop@hadoop:~]# ssh-keygen -t rsa
这个命令将为dbrg-1上的用户dbrg生成其密钥对,询问其保存路径时直接回车采用默认路径,当提示要为生成的密钥输入passphrase的时候,直接回车,也就是将其设定为空密码。生成的密钥对id_rsa,id_rsa.pub,默认存储在/home/hadoop/.ssh目录下。然后将id_rsa.pub的内容复制到每个机器(也包括本机)的/home/hadoop/.ssh/authorized_keys文件中,如果机器上已经有authorized_keys这个文件了,就在文件末尾加上id_rsa.pub中的内容,如果没有authorized_keys这个文件,直接cp或者scp就好了,下面的操作假设各个机器上都没有authorized_keys文件。

对于hadoop-1
[hadoop@hadoop-1:~/.ssh]$cp id_rsa.pub authorized_keys
对于hadoop-2
[hadoop@hadoop-2:~]$mkdir .ssh
[hadoop@hadoop-1:~/.ssh]$scp authorized_keys hadoop-2:/home/hadoop/.ssh/
此处的scp就是通过ssh进行远程copy,此处需要输入远程主机的密码,即hadoop-2机器上hadoop帐户的密码,当然,你也可以用其他方法将authorized_keys文件拷贝到其他机器上
[hadoop@hadoop-2:.ssh]$chmod 644 authorized_keys
这一步非常关键,必须保证authorized_keys只对其所有者有读写权限,其他人不允许有写的权限,否则SSH是不会工作的。

接着,在三台机器上都需要对sshd服务进行配置,在三台机器上修改文件

/etc/ssh/sshd_config

#去除密码认证
PasswordAuthentication no
AuthorizedKeyFile   .ssh/authorized_keys

 

至此各个机器上的SSH配置已经完成。


Hadoop环境变量
hadoop_env.sh中设置Hadoop需要的环境变量,其中JAVA_HOME是必须设定的变量。HADOOP_HOME变量可以设定也可以不设定,如果不设定,HADOOP_HOME默认的是bin目录的父目录。

本人的设置如下:

export HADOOP_HOME=/home/hadoop/hadoopinstall/hadoop-0.16.4
export JAVA_HOME=/usr/java/jdk1.6.0

 

Hadoop配置文件
如前所述,在/home/hadoop/hadoopconf目录下,打开slaves文件,该文件用来指定所有的从节点,一行指定一个主机名。即本文中的hadoop-2,因此slaves文件看起来应该是这样的
hadoop-2


在conf/目录中的hadoop-default.xml中包含了Hadoop的所有配置项,但是不允许直接修改!可以在hadoop-conf/目录下的hadoop-site.xml里面定义我们需要的项,其值会覆盖hadoop-default.xml中的默认值。可以根据自己的实际需要来进行定制。以下是我的配置档:
<?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>hadoop-1:9000</value>
<description>Thename of the default file system. Either the literal string "local" or ahost:port for DFS.</description>
</property>
<property>
<name>mapred.job.tracker</name>
<value>hadoop-1:9001</value>
<description>Thehost and port that the MapReduce job tracker runs at. If "local", thenjobs are run in-process as a single map and reducetask.</description>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/hadoopinstall/hadoop-0.16.4/tmp</value>
<description>A base for other temporary directories.</description>
</property>
<property>
<name>dfs.name.dir</name>
<value>/home/hadoop/hadoopinstall/hadoop-0.16.4/filesystem/name</value>
<description>Determineswhere on the local filesystem the DFS name node should store the nametable. If this is a comma-delimited list of directories then the nametable is replicated in all of the directories, for redundancy.</description>
</property>
<property>
<name>dfs.data.dir</name>
<value>/home/hadoop/hadoopinstall/hadoop-0.16.4/filesystem/data</value>
<description>Determineswhere on the local filesystem an DFS data node should store its blocks.If this is a comma-delimited list of directories, then data will bestored in all named directories, typically on different devices.Directories that do not exist are ignored.</description>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
<description>Defaultblock replication. The actual number of replications can be specifiedwhen the file is created. The default is used if replication is notspecified in create time.</description>
</property>
</configuration>

     
启动hadoop
在bin/下面有很多启动脚本,可以根据自己的需要来启动。
* start-all.sh 启动所有的Hadoop守护。包括namenode, datanode, jobtracker, tasktrack
* stop-all.sh 停止所有的Hadoop
* start-mapred.sh 启动Map/Reduce守护。包括Jobtracker和Tasktrack
* stop-mapred.sh 停止Map/Reduce守护
* start-dfs.sh 启动Hadoop DFS守护.Namenode和Datanode
* stop-dfs.sh 停止DFS守护

 

原创粉丝点击