Hadoop- Zookeeper-Hbase搭建
1 Hadoop集群搭建
1.1免密码设置
通过客户端连接到linux集群(2台以上)后分别进行如下操作:
ssh-keygen -t rsa 生成密钥对
缺省目录
两次enter
ls -a 可以看到.ssh进入.ssh目录后可以看到id_rsa id_rsa.pub文件
把公钥文件拷贝到另一台机器
--在192.168.160.128操作
scp ./id_rsa.pub root@192.168.160.129:/root/.ssh/authorized_keys
登陆到129机器上进行如下操作:
cd
cd .ssh
cat id_rsa.pub
copy id_rsa.pub addto authorized_keys
或
cat~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
将本机(129)的公钥添加进authorized_keys中,这样允许本机通过ssh的形式免密码登录注意使用>>,而不是>,因为如果其它主机(如A)也采用免登陆的形式登录,也可以把主机A的公钥添加到authorized_keys文件中。这样主机A就可以免登陆ssh到本机了。
执行chmod 600authorized_keys(否则ssh localhost可能报错)
最终结果:机器中每台机器的authorized_keys文件中含有机器其他机器的公钥。
1.2 hadoop集群搭建配置文件修改
背景:两台机器192.168.160.128(hd1) 、192.168.160.129(hd2)机器部署目录相同,jdk环境已具备且目录路径都相同。
1. 修改hadoop-env.sh配置文件
修改java环境的路径
grep -v "^#" ./hadoop-env.sh | grep -v "^$"
2.修改core-site.xml配置文件
指定hadoop临时路径
3.修改hdfs-site.xml配置文件
4.修改mapred-site.xml配置文件
5.修改masters文件
6.修改slaves文件
7.查看防火墙状态
chkconfig iptables off
8. 拷贝到其他各个节点上
9.格式化分布式文件系统
bin/hadoop namenode -format
10.启动守护进程
bin/start-all.sh
1.3 hadoop操作
cd /home/robinjun/hadoop-1.1.2/bin
1.创建文件夹的方法
./hadoop fs -mkdir testDir
bin/hadoop fs -put /home/robinjun/input in
bin/hadoop jar hadoop-examples-1.1.2.jar wordcount in out
bin/hadoop fs -ls ./out/*
bin/hadoop fs -cat ./out/part-r-00000
http://192.168.160.128:50030/jobtracker.jsp
http://192.168.160.128:50070/dfshealth.jsp
安全模式实验
bin/hadoop dfsadmin -safemode enter
bin/hadoop fs -put ../xxx ./in 上传文件到HDFS
bin/hadoop fs -ls ./in
bin/hadoop fs -rmr ./in/test1.txt
bin/hadoop fs -ls ./in
bin/hadoop dfsadmin -safemode leave
bin/hadoop fs -put ../xxx ./in
bin/hadoop fs -ls ./in
bin/hadoop fs -rmr ./in/xxx
bin/hadoop fs -ls ./in
/home/robinjun/input
验证回收站功能实验
在conf/core-site.xml添加配置:
重启集群
bin/hadoop fs -ls
bin/hadoop fs -rmr ./out
bin/hadoop fs -ls
bin/hadoop fs -ls ./.Trash
bin/hadoop fs -ls ./.Trash/Current
bin/hadoop fs -ls ./.Trash/Current/user
bin/hadoop fs -ls ./.Trash/Current/user/root
bin/hadoop fs -ls ./.Trash/Current/user/root/out
恢复及清空
bin/hadoop fs -mv ./.Trash/Current/user/root/out ./
bin/hadoop fs -ls
bin/hadoop fs -ls ./out/*
bin/hadoop fs -expunge
bin/hadoop fs -ls ./.Trash/Current/user/
.....
将HDFS的文件复制到本地
bin/hadoop fs -get ./in/xxxx ../tmp
删除HDFS下的文档
bin/hadoop fs -rmr ./in/xxx
查看HDFS下某个文件的内容
bin/hadoop fs -ls ./in
bin/hadoop fs -cat ./in/test1.txt
查看HDFS基本统计信息
bin/hadoop dfsadmin -report
怎样添加节点?
在新节点安装好hadoop
把namenode的有关配置文件复制到该节点
修改masters和slaves文件,增加该节点
设置ssh免密码进出该节点
单独启动该节点上的datanode和tasktracker(hadoop-daemon.sh start datanode/tasktracker)
运行start-balancer.sh进行数据负载均衡
是否要重启集群?
负载均衡
作用:当节点出现故障,或新增加节点时,数据块分布可能不均匀,负载均衡可以重新平衡各个datanode上数据块的分布
./start-balancer.sh
1.4 HDFS的命令行操作
将本地的一个文件复制到HDFS中
hdoop fs -copyFormLocal testInput/hello.txthdfs://localhost/user/admin/In/hello.txt
注:使用fs命令可以省略URL中的访问协议和主机名,而直接使用配置文件core-site.xml中默认属性
值hdfs://localhost
hadoop fs -copyFromLocaltestInput/hello.txt /user/amdin/In/hello.txt
其次,看如何将HDFS中的文件拷贝到本地
hadoop fs -copyToLocal/user/admin/In/hello.txt testInput/hello.copy.txt
创建文件夹的方法
hdoop fs -mkdir testDir
上传文件到HDFS
将HDFS的文件复制到本地
2 Zookeeper
1.单机安装
单机安装非常简单,只要获取到 Zookeeper 的压缩包并解压到某个目录如:/home/zookeeper-3.2.2 下,Zookeeper 的启动脚本在 bin 目录下,Linux 下的启动脚本是 zkServer.sh
2.配置
tickTime=2000
dataDir=D:/devtools/zookeeper-3.2.2/build
clientPort=2181
tickTime:这个时间是作为 Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。
dataDir:顾名思义就是 Zookeeper 保存数据的目录,默认情况下,Zookeeper 将写数据的日志文件也保存在这个目录里。
clientPort:这个端口就是客户端连接Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。
3.安装:集群模式
集群模式除了上面的三个配置项还要增加下面几个配置项:
initLimit=5
syncLimit=2
server.1=192.168.211.1:2888:3888
server.2=192.168.211.2:2888:3888
4.配置
initLimit:这个配置项是用来配置 Zookeeper接受客户端(这里所说的客户端不是用户连接 Zookeeper 服务器的客户端,而是 Zookeeper 服务器集群中连接到 Leader 的 Follower 服务器)初始化连接时最长能忍受多少个心跳时间间隔数。当已经超过 10 个心跳的时间(也就是 tickTime)长度后 Zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 5*2000=10 秒
syncLimit:这个配置项标识 Leader 与 Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime 的时间长度,总的时间长度就是 2*2000=4 秒
server.A=B:C:D:其中 A 是一个数字,表示这个是第几号服务器;B 是这个服务器的 ip 地址;C 表示的是这个服务器与集群中的 Leader 服务器交换信息的端口;D 表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通信的端口。如果是伪集群的配置方式,由于 B 都是一样,所以不同的 Zookeeper 实例通信端口号不能一样,所以要给它们分配不同的端口号。
除了修改 zoo.cfg 配置文件,集群模式下还要配置一个文件 myid,这个文件在 dataDir 目录下,这个文件里面就有一个数据就是 A 的值,Zookeeper 启动时会读取这个文件,拿到里面的数据与 zoo.cfg 里面的配置信息比较从而判断到底是那个 server。
5.zoo.cfg
3 Hbase的安装
1.Hbase安装:单机模式
下载及解压hbase安装包
修改conf/hbase-env.sh脚本,设置环境变量
编辑hbase-site.xml进行配置
启动Hbase
验证Hmaster已经启动
进入shell
1.修改hbase-env.sh
修改内容: #java安装目录
export JAVA_HOME=/usr/java/jdk1.6.0_24
#Hbase日志目录
exportHBASE_LOG_DIR=/root/hadoop/hbase-0.94.6.1/logs
#如果使用HBase自带的Zookeeper值设成true 如果使用自己安装的Zookeeper需要将该值设为false
export HBASE_MANAGES_ZK=true
2.修改hbase-site.xml
hbase.rootdir指定Hbase数据存储目录
hbase.cluster.distributed 指定是否是完全分布式模式,单机模式和伪分布式模式需要将该值设为false
hbase.master指定Master的位
hbase.zookeeper.quorum 指定zooke的集群,多台机器以逗号分隔
3.修改conf下的regionservers文件
4. Hadoop hdfs-site.xml
<property>
<name>dfs.datanode.max.xcievers</name>
<value>4096</value>
</property>
该参数限制了datanode所允许同时执行的发送和接受任务的数量,缺省为256,hadoop-defaults.xml中通常不设置这个参数。
这个限制看来实际有些偏小,高 负载
5.拷贝hbase到所有的节点
6.启动命令
bin/start-hbase.sh
4 Hbase Shell
查询数据库状态
hbase(main):024:0>status
3 servers, 0 dead,1.0000 average load
查询数据库版本
hbase(main):025:0>version
0.90.4, r1150278,Sun Jul 24 15:53:29 PDT2011
创建表
hbase(main):011:0>create'member','member_id','address','info'
0 row(s) in 1.2210seconds
查看表信息
hbase(main):012:0>list
TABLE
member
1 row(s) in 0.0160seconds
hbase(main):006:0>describe 'member'
DESCRIPTION ENABLED
{NAME => 'member', FAMILIES =>[{NAME=> 'address', BLOOMFILTER => 'NONE', REPLICATION_SCOPE => '0',true
VERSIONS => '3', COMPRESSION =>'NONE',TTL => '2147483647', BLOCKSIZE => '65536', IN_MEMORY =>'false', BLOCKCACHE => 'true'}, {NAME =>'info', BLOOMFILTER => 'NONE',REPLICATION_SCOPE => '0', VERSI
ONS => '3', COMPRESSION => 'NONE',TTL=> '2147483647', BLOCKSIZE => '65536', IN_MEMORY => 'false',
BLOCKCACHE => 'true'}]}
1 row(s) in 0.0230seconds
删除列族:alter、disable、enable命令
hbase(main):003:0>alter 'member',{NAME=>'member_id',METHOD=>'delete'}
ERROR: Table memberis enabled. Disable itfirst before altering.
hbase(main):004:0>disable 'member'
0 row(s) in 2.0390seconds
hbase(main):005:0>alter'member',{NAME=>'member_id',METHOD=>'delete'}
0 row(s) in 0.0560seconds
hbase(main):008:0> enable 'member'
0 row(s) in 2.0420seconds
列出所有的表
hbase(main):028:0>list
TABLE
member
temp_table
2 row(s) in 0.0150seconds
删除表
hbase(main):029:0>disable 'temp_table'
0 row(s) in 2.0590seconds
hbase(main):030:0>drop 'temp_table'
0 row(s) in 1.1070seconds
查询一个表是否存在
hbase(main):021:0>exists 'member'
Table member doesexist
0 row(s) in 0.1610seconds
判断表是否enable或disable
hbase(main):034:0>is_enabled 'member'
true
0 row(s) in 0.0110seconds
hbase(main):032:0>is_disabled 'member'
false
0 row(s) in 0.0110seconds
插入记录
put'member','scutshuxue','info:age','24'
put'member','scutshuxue','info:birthday','1987-06-17'
put'member','scutshuxue','info:company','alibaba'
put'member','scutshuxue','address:contry','china'
put'member','scutshuxue','address:province','zhejiang'
put'member','scutshuxue','address:city','hangzhou'
put'member','xiaofeng','info:birthday','1987-4-17'
put'member','xiaofeng','info:favorite','movie'
put'member','xiaofeng','info:company','alibaba'
put'member','xiaofeng','address:contry','china'
put'member','xiaofeng','address:province','guangdong'
put'member','xiaofeng','address:city','jieyang'
put'member','xiaofeng','address:town','xianqiao'
获取一个行健的所有数据
hbase(main):001:0>get'member','scutshuxue'
COLUMN CELL
address:citytimestamp=1321586240244,value=hangzhou
address:contrytimestamp=1321586239126,value=china
address:provincetimestamp=1321586239197,value=zhejiang
info:age timestamp=1321586238965,value=24
info:birthday timestamp=1321586239015,value=1987-06-17
info:companytimestamp=1321586239071,value=alibaba
6 row(s) in 0.4720seconds
获取一个行键,一个列族的所有数据
hbase(main):002:0>get'member','scutshuxue','info'
COLUMN CELL
info:age timestamp=1321586238965,value=24
info:birthday timestamp=1321586239015,value=1987-06-17
info:companytimestamp=1321586239071,value=alibaba
3 row(s) in 0.0210seconds
获取一个行键,一个列族中一个列的所有数据
hbase(main):002:0>get'member','scutshuxue','info:age'
COLUMN CELL
info:age timestamp=1321586238965,value=24
1 row(s) in 0.0320seconds
更新一条记录
hbase(main):004:0>put'member','scutshuxue','info:age' ,'99'
0 row(s) in 0.0210seconds
hbase(main):005:0>get'member','scutshuxue','info:age'
COLUMN CELL
info:age timestamp=1321586571843,value=99
1 row(s) in 0.0180seconds
通过timestamp来获取数据
hbase(main):010:0>get'member','scutshuxue',{COLUMN=>'info:age',TIMESTAMP=>1321586238965}
COLUMN CELL
info:age timestamp=1321586238965,value=24
1 row(s) in 0.0140seconds
hbase(main):011:0>get'member','scutshuxue',{COLUMN=>'info:age',TIMESTAMP=>1321586571843}
COLUMN CELL
info:age timestamp=1321586571843,value=99
1 row(s) in 0.0180seconds
全表扫描
hbase(main):013:0>scan 'member'
结果略
删除指定行键的字段
hbase(main):016:0>delete'member','temp','info:age'
0 row(s) in 0.0150seconds
hbase(main):018:0>get 'member','temp'
COLUMN CELL
0 row(s) in 0.0150seconds
删除整行
hbase(main):001:0>deleteall'member','xiaofeng'
0 row(s) in 0.3990seconds
查询表中有多少行
hbase(main):019:0>count 'member'
2 row(s) in 0.0160seconds
清空表
hbase(main):035:0>truncate 'member'
Truncating 'member'table (it may take awhile):
- Disabling table...
- Dropping table...
- Creating table...
0 row(s) in 4.3430seconds