一、hbase Java client
添加maven依赖
<dependency> <groupId>org.apache.hbase</groupId> <artifactId>hbase-server</artifactId> <version>0.98.6-hadoop2</version> </dependency> <dependency> <groupId>org.apache.hbase</groupId> <artifactId>hbase-client</artifactId> <version>0.98.6-hadoop2</version> </dependency>
添加配置
- 第一种:configuration实例中添加
第二种:将配置文件放到classpath
新建一个source folder,将下面5个文件放入 在/opt/modules/hbase-0.98.6-hadoop2/conf下 hbase-site regionservers log4j 在/opt/modules/hadoop-2.5.0/etc/hadoop下 hdfs-site core-site
client 操作:增删改查
- 查:可以是按表查,可以按列簇查,也可以按列查
- 增:必须是按列添加
- 删:删除列
- 查scan
- 查scan范围查询
- rowkey前缀过滤
插入一条16号的数据
rowkey前缀过滤
特殊配置
//设置是否开启缓存 scan.setCacheBlocks(true); //缓存的条数 scan.setCaching(100); //设置每次取多少条 scan.setBatch(10); //这两个参数共同决定了RPC请求次数
- 查:可以是按表查,可以按列簇查,也可以按列查
二、hbase与mapreduce集成
- hbase是一个数据库,用于数据存储
- mapreduce是一个计算框架,用于数据处理
- 集成的模型(3种情况)
- hbase作为mapreduce的输入
- hbase作为mapreduce的输出
- hbase作为输入和输出
官方提供了一些mapreduce的方法
- lib/hbase-server-0.98.6-hadoop2.jar
运行jar ,查看其中有哪些方法
/opt/modules/hadoop-2.5.0/bin/yarn jar lib/hbase-server-0.98.6-hadoop2.jar
报错:Exception in thread “main” java.lang.NoClassDefFoundError: org/apache/hadoop/hbase/filter/Filter
at java.lang.Class.getDeclaredMethods0(Native Method)
原因:hadoop中缺少hbase的相关jar包
-》方法一:将hbase的jar包拷贝到hadoop的lib(不推荐)
-》方法二:配置临时环境变量,只在当前shell回话有效export HBASE_HOME=/opt/modules/hbase-0.98.6-hadoop2 export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:`${HBASE_HOME}/bin/hbase mapredcp`
- 再次运行
- 测试rowcounter命令
/opt/modules/hadoop-2.5.0/bin/yarn jar lib/hbase-server-0.98.6-hadoop2.jar rowcounter student:stu_info
- 自定义实现hbase的mapreduce
- 明确需求(将A表中的某些字段存进B表中):
- 将student:stu_info表中info列簇中的name列,导入到t5表中
先创建t5表
- 实现需求:map-》reduce-》driver
-》input-》map -》shuffle-》reduce-》output - hbase作为输入
- -》key:rowkey
-》value:result(每一个rowkey包含的cell)
-》maptask个数:一个region一个maptask - 运行jar
/opt/modules/hadoop-2.5.0/bin/yarn jar /opt/datas/hbaseMR.jar org.apache.hadoop.hbase.HMr
importtsv
查看参数
/opt/modules/hadoop-2.5.0/bin/yarn jar lib/hbase-server-0.98.6-hadoop2.jar importtsv Usage: importtsv -Dimporttsv.columns=a,b,c <tablename> <inputdir>
实现的注意事项:
1-rowkey必须在文件中
2-列簇必须加上
3-文件路径指得是hdfs第一种方式:直接将数据导入到hbase表中
/opt/modules/hadoop-2.5.0/bin/yarn jar lib/hbase-server-0.98.6-hadoop2.jar importtsv -Dimporttsv.columns=HBASE_ROW_KEY,info:name,info:age,info:sex t5 /input/import.tsv
- 第二种方式
第一步:将数据文件转换成Hfile
-Dimporttsv.bulk.output=/path/for/output
第二步:将hfile导入到hbase表中
- 第一步
/opt/modules/hadoop-2.5.0/bin/yarn jar lib/hbase-server-0.98.6-hadoop2.jar importtsv -Dimporttsv.bulk.output=/imp_output -Dimporttsv.columns=HBASE_ROW_KEY,info:name,info:age,info:sex t5 /input/import.tsv
- 第二步:运行的只是一个Java类
查看参数:/opt/modules/hadoop-2.5.0/bin/yarn jar lib/hbase-server-0.98.6-hadoop2.jar completebulkload
提示:usage: completebulkload /path/to/hfileoutputformat-output tablename
运行命令:/opt/modules/hadoop-2.5.0/bin/yarn jar lib/hbase-server-0.98.6-hadoop2.jar completebulkload /imp_output student:stu_info
- 第一步
三、hbase的完全分布式及多master的配置
- Linux
-》环境同步
-》时间同步
-》本地路由 etc/host
-》SSH
-》防火墙/selinux
-》jdk
hadoop
删除所有的log和数据
rm -rf logs/* rm -rf data/*
修改配置
-》hadoop-env
-》core-site
-》hdfs-site
-》mapred-site
-》yarn-site
-》slaves(只有这个需要修改)
hadoop-senior01.ibeifeng.com
hadoop-senior02.ibeifeng.com
hadoop-senior03.ibeifeng.com
-》yarn-env- 分发到集群
scp -r hadoop-2.5.0/ hadoop-senior02.ibeifeng.com:/opt/modules/
scp -r hadoop-2.5.0/ hadoop-senior03.ibeifeng.com:/opt/modules/
- 格式化(第一台机器)
bin/hdfs namenode -format
- zookeeper
- 删除所有的log和数据
rm -rf data/*
- 修改配置:vim conf/zoo.cfg
server.1=hadoop-senior01.ibeifeng.com:2888:3888
server.2=hadoop-senior02.ibeifeng.com:2888:3888
server.3=hadoop-senior03.ibeifeng.com:2888:3888
- 分发
scp -r zookeeper-3.4.5/ hadoop-senior02.ibeifeng.com:/opt/modules/
scp -r zookeeper-3.4.5/ hadoop-senior03.ibeifeng.com:/opt/modules/
- 创建id:vim data/myid
第一台写1, 第二台写2, 第三台写3。 - 启动
- 删除所有的log和数据
hbase
删除所有的log和数据
rm -rf datas/*
rm -rf logs/*修改配置
- zookeeper地址: vim conf/hbase-site.xml
- regionserver: vim conf/regionservers
- zookeeper地址: vim conf/hbase-site.xml
- 分发
scp -r hbase-0.98.6-hadoop2 hadoop-senior02.ibeifeng.com:/opt/modules/
scp -r hbase-0.98.6-hadoop2 hadoop-senior03.ibeifeng.com:/opt/modules/
启动
- 启动hadoop(第一台):sbin/start-dfs.sh
- zookeeper(每一台):bin/zkServer.sh status
- hbase(第一台):bin/start-hbase.sh
实现多master
- 启动:hbase-daemons.sh master-backup
其它两台点到启动hbase的HMaster进程后,刷新页面显示Backup Masters
直接在相应节点上启动进程即可
如果是较老的版本:
在conf目录下创建一个masters-backup
写入主机名,一行一个- 启动:hbase-daemons.sh master-backup