一、环境及目标:
- 系统: Ubuntu 12.10
- Hadoop版本:1.0.4
- Hbase 版本:0.94.8(hindex secondaryindex)
- 节点配置 (完全分布式集群) 静态IP
Master (job tracker) | 192.168.0.200 | namenode |
Slave (task tracker/data node) | 192.168.0.201 | Datanode1 |
Slave (task tracker/data node) | 192.168.0.202 | Datanode2 |
- 用户: hadoop
1.1 创建hadoop用户组;
$ sudo addgroup hadoop 记下这里为 hadoop 用户设置的密码,后面使用 hadoop 用户登录时需要用到。
1.2. 创建hadoop用户;
$ sudo adduser -ingroup hadoop hadoop
1.3. 给hadoop用户添加权限,打开/etc/sudoers文件;
$ sudo gedit /etc/sudoers
1.4. 给hadoop用户赋予root用户同样的权限。
在root ALL=(ALL:ALL) ALL下添加如下内容:
hadoop ALL=(ALL:ALL) ALL
二、在Ubuntu下安装JDK
2.1 配置环境变量
$ sudo gedit /etc/profile
在文件的末尾加上如下内容,保存并关闭文件
# for java
export JAVA_HOME=/usr/lib/jvm/jdk1.6.0_45
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin:$PATH
使设置生效:到此部JDK的配置就都完成了
$ source /etc/profile
为保证正确性,进行简单的测试
$ java -version
2.2 修改默认JDK
sudoupdate-alternatives --install /usr/bin/java java /usr/lib/jvm/ jdk1.6.0_45/bin/java 300
sudo update-alternatives --install/usr/bin/javac javac /usr/lib/jvm/ jdk1.6.0_45/bin/javac 300
sudo update-alternatives --install/usr/bin/jar jar /usr/lib/jvm/jdk1.6.0_45/bin/jar 300
以下两句可选(最好执行):
sudo update-alternatives --config java
sudo update-alternatives --config javac
2.3 修改机器名
每当ubuntu安装成功时机器名都默认为:ubuntu ,但为了以后集群中能够容易分辨各台服务器,需要给每台机器取个不同的名字。机器名由 /etc/hostname文件决定。
1. 打开/etc/hostname文件;
$ sudo gedit /etc/hostname
2. 将/etc/hostname文件中的ubuntu改为对应机器,如主节点中,修改为"namenode"。 重启生效。
3.修改/etc/hosts文件
$ sudo gedit /etc/hosts
并且将每台机器的IP设置为固定IP:
三、安装ssh服务
ubuntu一般只是默认安装了 ssh-agent, 可以用如下命令查看:
$ sudo ps -ef | grep ssh
如果只有 ssh-agent 就需要安装openssh-server了。
$ sudo apt-get install ssh openssh-server
3.1 建立ssh无密码登录本机
首先要转换成hadoop用户,执行以下命令:
$ sudo su - hadoop
ssh生成密钥有rsa和dsa两种生成方式,默认情况下采用rsa方式。
1. 创建ssh-key,,这里我们采用rsa方式;
$ ssh-keygen -t rsa -P ""
注意:ssh-kengen是用连字符连着的,千万不要分开。
(注:回车后会在~/.ssh/下生成两个文件:id_rsa和id_rsa.pub这两个文件是成对出现的)
2. 创建授权文件authorized_keys
进入~/.ssh/目录下,发现开始是没有authorized_keys文件的,可以使用以下两种方法:
(1) 将id_rsa.pub追加到authorized_keys授权文件中;
$ cd ~/.ssh
$ cat id_rsa.pub >> authorized_keys
(2) 复制 id_rsa.pub 为 authorized_keys
$ cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
3. 登录localhost;
$ ssh localhost
4. 执行退出命令(exit或CTRL+D);
权限要求:hadoop目录 755,.ssh目录700,authorized_key文件600
四、安装hadoop
解压后修改hadoop/conf/下几个文件:
hadoop-env.sh
增加:exportJAVA_HOME=/usr/lib/jvm/jdk1.6.0_45
core-site.xml
<property>
<name>fs.default.name</name>
<value>hdfs://namenode:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/tmp</value>
</property>
mapred-site.xml
<property>
<name>mapred.job.tracker</name>
<value>hdfs://namenode:9001</value>
</property>
hdfs-site.xml
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>/home/hadoop/tmp/data</value>
</property>
masters :添加作为secondarynamenode的主机名
slaves:添加作为slave的主机名,一行一个
运行hadoop
1. 进入hadoop目录下,格式化hdfs文件系统,初次运行hadoop时一定要有该操作,
$ cd /usr/local/hadoop/
$ bin/hadoop namenode -format
2. 启动bin/start-all.sh
进入bin目录下, $ ./start-all.sh 关闭:同目录下./stop-all.sh
3. 检测hadoop是否启动成功
$jps
4. Web查看
http://localhost:50070/ – web UI of theNameNodedaemon
http://localhost:50030/ – web UI of theJobTrackerdaemon
http://localhost:50060/ – web UI of theTaskTrackerdaemon
五、安装Hbase
需要将hadoop/lib下文件全部复制到hbase/lib目录下。
解压后修改hbase/conf/下几个文件:
hbase-env.sh
export JAVA_HOME=/usr/lib/jvm/jdk1.6.0_45/
exportHBASE_CLASSPATH=/home/hadoop/hadoop-1.0.4/conf:/home/hadoop/hbase-0.94.8/libs
export HBASE_PID_DIR=/home/hadoop/tmp/hbase/pids
export HBASE_OPTS="-ea -XX:+UseConcMarkSweepGC-XX:+CMSIncrementalMode"
export HBASE_MANAGES_ZK=true //true为使用Hbase自带ZK,false为使用独立ZK
hbase-site.xml
<property>
<name>hbase.rootdir</name>
<value>hdfs://namenode:9000/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.master</name>
<value>hdfs://namenode:60000</value>
</property>
<property>
<name>hbase.tmp.dir</name>
<value>/home/hadoop/tmp/data</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>namenode,datanode1,datanode2</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>${hbase.tmp.dir}/zookeeper</value>
</property>
<!-----------------------以下配置为使用二级索引--------------------------!>
<property>
<name>hbase.use.secondary.index</name>
<value>true</value>
</property>
<property>
<name>hbase.coprocessor.master.classes</name>
<value>org.apache.hadoop.hbase.index.coprocessor.master.IndexMasterObserver</value>
</property>
<property>
<name>hbase.coprocessor.region.classes</name>
<value>org.apache.hadoop.hbase.index.coprocessor.regionserver.IndexRegionObserver</value>
</property>
<property>
<name>hbase.coprocessor.wal.classes</name>
<value>org.apache.hadoop.hbase.index.coprocessor.wal.IndexWALObserver</value>
</property>
regionservers: 添加作为RS的主机名,一行一个(实验环境namenode没有添加)
datanode1
datanode2
1. 启动bin/start-hbase.sh
2.进入shell:bin/hbase shell
六、注意事项
6.1权限问题:
.ssh目录权限:700
authorized_key:600
/home/hadoop:755
6.2 格式化HDFS
在bin/hadoop namenode -format 前必须将各节点tmp文件清空!
6.3 source问题
如果每次都需要source profile:
直接在.bashrc文件中加入source /etc/profile 这行语句
6.4 替换Jar包
-将hbase/lib下的hadoop-core 删除,替换为hadoop目录下的core版本
-将hadoop/lib下所有jar包复制到hbase/lib下
-将hbase/lib下所有jar包复制到hadoop/lib下
-将hadoop/lib、hbase/lib、hadoop-core、hbase-0.94.8.jar全部加入Eclipse的Build Path中。
6.5 Kettle出现 unable to connect Hbase Host port:?,无法链接Hadoop与Hbase的问题
将hadoop/lib,hbase/lib下的jar包,放入/data-integration/plugins/pentaho-big-data-plugin/hadoop-configurations/hadoop-20/lib/client 目录下 ,并且替换对应的hadoop-core.jar包。
七、文件配置
/etc/hosts
127.0.0.1 localhost
192.168.0.200 namenode
192.168.0.201 datanode1
192.168.0.202 datanode2
/etc/profile
# for hadoop
export HADOOP_HOME=/home/hadoop/hadoop-1.0.4
export HBASE_HOME=/home/hadoop/hbase-0.94.8
# for java
export JAVA_HOME=/usr/lib/jvm/jdk1.6.0_45
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
exportPATH=${JAVA_HOME}/bin:${JRE_HOME}/bin:${HADOOP_HOME}/bin:${HBASE_HOME}/bin: $PATH:
/etc/sudoers
# User privilege specification
root ALL=(ALL:ALL) ALL
hadoop ALL=(ALL:ALL) ALL