废话不多说,直接进去主题。(本人亲自验证过,可行)
1、准备:
Hadoop2.6+hbase0.98.1+jdk1.7
Linux centos6.5
Linux系统:centos 6.5 32位
1)修改主机名(非必要)
vi/etc/sysconfig/network
HOSTNAME=master
重启后生效。
2)/etc/hosts是ip地址和其对应主机名文件,使机器知道ip和主机名对应关系,格式如下:
#IPAddressHostName
10.16.156.164 master
10.16.156.52 slave1
10.16.156.55 slave2
1)生成密钥:在root@master根目录下执行如下语句:
ssh-keygen -tdsa -P '' -f ~/.ssh/id_dsa
以上是两个单引号。
2)将id_dsa.pub(公钥)追加到授权的key中:
cat ~/.ssh/id_dsa.pub >>~/.ssh/authorized_keys
3)将认证文件复制到其它节点上:
scp ~/.ssh/authorized_keys 用户@主机名:~/.ssh/
例如:scp ~/.ssh/authorized_keys root@slave1:~/.ssh/
4)测试:
ssh 主机名(如:ssh slave1)
第一次要确认连接,输入yes即可。
注:(如果已经安装jdk请跳过)
1)选择的版本是jdk-7u71-linux-i586.tar.gz
2)上传到root用户目录下,
3)解压:tarvxf jdk-7u71-linux-i586.tar.gz–C/usr/ (解压到usr目录下)
4)配置环境变量:vi/etc/profile加入以下三行
#set javaenvironment
JAVA_HOME=/usr/jdk1.7.0_71
CLASSPATH=.:$JAVA_HOME/lib.tools.jar
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME CLASSPATH PATH
5)执行source/etc/profile使环境变量的配置生效
6)执行java –version查看jdk版本,验证是否成功。
成功会显示如下:
每台节点都要安装hadoop。上传hadoop-2.6.0.tar.gz到用户root目录下。
1)解压
tar -zvxfhadoop-2.6.0.tar.gz –C/usr/hadoop/
(注:如果目录不存在可以手动创建:mkdir /usr/hadoop)
2)添加环境变量:vi/etc/profile,尾部添加如下
exportHADOOP_HOME= /usr/hadoop/hadoop-2.6.0
exportHADOOP_COMMON_HOME=$HADOOP_HOME
exportHADOOP_HDFS_HOME=$HADOOP_HOME
exportHADOOP_MAPRED_HOME=$HADOOP_HOME
exportHADOOP_YARN_HOME=$HADOOP_HOME
exportHADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
exportPATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HADOOP_HOME/lib
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
exportHADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
设置立即生效:
source/etc/profile
查看Hadoop是否安装成功:hadoopversion 如图:
3)修改Hadoop配置文件(在Hadoop目录下的/etc/hadoop目录下)
(1)core-site.xml
(2)hdfs-site.xml
(3)mapred-site.xml
(4)
1、slaves中添加
slave1
slave2
2、masters中添加
slave1
slave2
(6)分别在etc/Hadoop/下的hadoop-env.sh和yarn-env.sh中添加JAVA_HOME
export JAVA_HOME= /usr/jdk1.7.0_71/
配置文件解释:
hadoop-env.sh:用于定义hadoop运行环境相关的配置信息,比如配置JAVA_HOME环境变量、为hadoop的JVM指定特定的选项、指定日志文件所在的目录路径以及master和slave文件的位置等;
core-site.xml: 用于定义系统级别的参数,它作用于全部进程及客户端,如HDFS URL、Hadoop的临时目录以及用于rack-aware集群中的配置文件的配置等,此中的参数定义会覆盖core-default.xml文件中的默认配置;
hdfs-site.xml: HDFS的相关设定,如文件副本的个数、块大小及是否使用强制权限等,此中的参数定义会覆盖hdfs-default.xml文件中的默认配置;
mapred-site.xml:mapreduce的相关设定,如reduce任务的默认个数、任务所能够使用内存的默认上下限等,此中的参数定义会覆盖mapred-default.xml文件中的默认配置;
masters: hadoop的secondary-masters主机列表,当启动Hadoop时,其会在当前主机上启动NameNode和JobTracker,然后通过SSH连接此文件中的主机以作为备用NameNode;
slaves:Hadoop集群的slave(datanode)和tasktracker的主机列表,master启动时会通过SSH连接至此列表中的所有主机并为其启动DataNode和taskTracker进程;
Hadoop-metrics2.properties:控制metrics在hadoop上如何发布属性
Log4j.properties:系统日志文件、namenode审计日志、tarsktracker子进程的任务日志属性
1)格式化。到bin目录下执行
hdfs namenode –format
2)启动Hadoop 。在sbin目录下执行
start-dfs.sh
start-yarn.sh
也可以用一条命令:
start-all.sh
3)jps查看进程 ,可以看到最少如下几个线程:
访问http://master:50070
4)停止Hadoop。在sbin目录下执行
stop-all.sh
为了和hadoop-2.6.0匹配,选择的hbase版本为0.98.9
环境说明
· JDK1.7+
· Hadoop 2.6.0
· CentOS 6.5+
· HBase-0.98.9
Hadoop集群机器对应于HBase用途如下:
hostname |
IP |
Hadoop用途 |
HBase用途 |
master |
10.16.156.164 |
NameNode/ResouceManager |
master |
slave1 |
10.16.156.52 |
DataNode/NodeManager |
RegionServer |
slave2 |
10.16.156.55 |
DataNode/NodeManager |
RegionServer |
安装配置
1、下载发布包
到HBase官方下载最新的版本 hbase-0.98.9-hadoop2-bin.tar.gz
(支持hadoop2)为例:
$ tar vxf hbase-0.98.9-hadoop2-bin.tar.gz –C/usr/
注意:(当版本不一致时执行以下操作,该文档所用的版本不需要执行该操作。)由于 HBase 依赖 Hadoop,在分布式模式下,Hadoop版本必须和HBase下的版本一致。用你运行的分布式Hadoop版本jar文件替换HBase lib目录下的Hadoop jar文件,以避免版本不匹配问题,也可以根据情况自己编译发布包。
2、配置系统环境
vi /etc/profile加入以下内容:
#HBase micmiu.com
export HBASE_HOME="/usr/hbase-0.98.9-hadoop2"
export PATH=$HBASE_HOME/bin:$PATH
$ source/etc/profile 使更改的配置立即生效
3、配置HBase参数
1)修改配置文件:<HBASE_HOME>/conf/hbase-env.sh
export JAVA_HOME = /usr/jdk1.7.0_71
2)修改配置文件:<HBASE_HOME>/conf/hbase-site.xml
在上面的配置文件中,第一个属性指定本机的hbase的存储目录;第二个属性指定hbase的运行模式,true代表全分布模式;第三和第四个属性是关于Zookeeper集群的配置。我的Zookeeper安装在master,slave1和slave2上(Zookeeper个数必须是奇数个)。
说明:全分布式的HBase集群需要Zookeeper实例运行,并且需要所有的HBase节点能够与Zookeeper实例通信。默认情况下Hbase自身维护着一组默认的Zookeeper实例。不过用户可以配置独立的Zookeeper实例,这样能使HBase系统更加健壮。
要使用独立的Zookeeper实例,需要修改conf/hbase-env.sh配置文件,修改其中的
exportHBASE_MANAGES_ZK=false
默认值为true,如将其修改为false,表示不使用默认的Zookeeper实例。
4、修改配置文件:
slave1
slave2
这就意味着,HBaseRegionServer运行在slave1和slave2上面。
regionservers文件列出了所有运行hbase的机器(即HRegionServer)。此文件的配置和Hadoop中的slaves文件十分相似,每行指定一台机器的主机名。当HBase启动的时候,会将此文件中列出的所有机器启动。关闭时亦如此。
注意:在HBase集群的所有机器上都需要执行上面的所有安装配置过程。
5、向其它3个结点复制Hbase相关配置
scp -r hbase/slave1:/usr/
scp -r hbase/slave2:/usr/
6、启动HBase:
cd
./start-hbase.sh
查看slave1的进程:
· 打开 http://master:60010 主界面,可以查看Master运行状态。
7、shell演示建表、插入数据
8、停止HBase:./stop-hbase.sh
java客户端连接hbase
修改Windows的如下文件C:\Windows\System32\drivers\etc中的hosts添加
10.16.156.78 master
10.16.156.81 slave1
10.16.156.70 slave2
1、 启动hbase和zookeeper时:
java.net.BindException:Address already in use
at sun.nio.ch.Net.bind0(Native Method)
at sun.nio.ch.Net.bind(Net.java:444)
解决方案:
修改"hbase.zookeeper.property.clientPort","2181"的端口号。如2181改成21811等
2、Eclipse中执行Hbase程序时出现java.lang.NoClassDefFoundError:org/cloudera/htrace/Trace
解决方案:
<dependency>
<groupId>org.cloudera.htracegroupId>
<artifactId>htrace-coreartifactId>
<version>2.04version>
dependency>
3、配置免密码登陆SSH
遇到的错误:
但我的仍要求输入密码,原因是.ssh和authorized_keys权限不对,具体见:http://blog.csdn.net/hwwn2009/article/details/39852457
用root用户登陆查看系统的日志文件:$tail/var/log/secure -n 20
…………
Oct 710:26:43 MasterServer sshd[2734]: Authentication refused: bad ownership ormodes for file /home/hadooper/.ssh/authorized_keys
Oct 7 10:26:48 MasterServer sshd[2734]: Accepted password for hadooperfrom ::1 port 37456 ssh2
Oct 7 10:26:48 MasterServer sshd[2734]: pam_unix(sshd:session): sessionopened for user hadooper by (uid=0)
Oct 7 10:36:30 MasterServer sshd[2809]: Accepted password for hadooperfrom 192.168.1.241 port 36257 ssh2
Oct 7 10:36:30 MasterServer sshd[2809]: pam_unix(sshd:session): sessionopened for user hadooper by (uid=0)
Oct 7 10:38:28 MasterServer sshd[2857]: Authentication refused: badownership or modes for directory /home/hadooper/.ssh
…………
提示/home/hadooper/.ssh和 /home/hadooper/.ssh/authorized_keys权限不对,修改如下:
Shell代码
1. chmod 700 ~/.ssh
2. chmod 600 ~/.ssh/authorized_keys
4、启动Hadoop时:
(1)
slave2: Error: JAVA_HOME is not set and could not be found.
slave1: Error: JAVA_HOME is not set and could notbe found.
解决方案:
分别在etc/Hadoop/下的hadoop-env.sh和yarn-env.sh中添加JAVA_HOME
exportJAVA_HOME= /usr/jdk1.7.0_71/
(2)You have loaded library /usr/hadoop/hadoop-2.6.0/lib/native/libhadoop.so.1.0.0which might have disabled stack guard. The VM will try to fix the stack guardnow.
解决方案:
在etc/profile中添加:
exportHADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
exportHADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
(3)进程中看不到seconaryNameNode进程时。
解决方案:
在hadoop2.6.0/etc/hadoop下的masters文件中添加对应的主机名(类似slaves文件)
5、 启动hbase时:
1)
2015-01-26 13:05:36,664 ERROR [main]zookeeper.RecoverableZooKeeper: ZooKeeper create failed after 4 attempts
2015-01-26 13:05:36,666 ERROR [main]master.HMasterCommandLine: Master exiting
java.lang.RuntimeException: Failed constructionof Master: class org.apache.hadoop.hbase.master.HMaster
atorg.apache.hadoop.hbase.master.HMaster.constructMaster(HMaster.java:3017)
atorg.apache.hadoop.hbase.master.HMasterCommandLine.startMaster(HMasterCommandLine.java:186)
atorg.apache.hadoop.hbase.master.HMasterCommandLine.run(HMasterCommandLine.java:135)
atorg.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
atorg.apache.hadoop.hbase.util.ServerCommandLine.doMain(ServerCommandLine.java:126)
解决方案:
查看/etc/hosts中配置是否正确
6、 Caused by: java.net.ConnectException: Call Fromslave1/127.0.0.1 to master:8031 failed on connection exception:
解决方案:
vi /etc/hosts检查如下配置的
7、
如果启动时出现sshd的连接错误,执行如下操作:
防火墙:serviceiptables stop
启动服务,servicesshd start
让其开机启动:chkconfig --level 35 sshd on
关闭防火墙:
1. 重启后永久性生效:
开启:chkconfigiptables on
关闭:chkconfigiptables off
2. 即时生效,重启后失效:
开启:serviceiptables start
关闭:serviceiptables stop