空间放两个网站,千图素材网站,怎么给网站图片加alt,为企业做好服务保障文章目录 1. HBase安装部署2.HBase服务的启动3.HBase部署高可用#xff08;可选#xff09;4. HBase整合Phoenix4.1 安装Phoenix4.2 **Phoenix Shell** 操作4.3 表的映射4.4 Phoenix二级索引4.4.1 全局索引#xff08;global index#xff09;4.4.2 包含索引(covered index… 文章目录 1. HBase安装部署2.HBase服务的启动3.HBase部署高可用可选4. HBase整合Phoenix4.1 安装Phoenix4.2 **Phoenix Shell** 操作4.3 表的映射4.4 Phoenix二级索引4.4.1 全局索引global index4.4.2 包含索引(covered index)4.4.3 本地索引local index 5. HBase和Hive集成 1. HBase安装部署 集群配置 s1s2s3s4gracalHBaseHMaster HRegionServerHRegionServerHMaster(备用) HRegionServerHRegionServerHRegionServer 保证Zookeeper以及Hadoop处于部署并且正常启动的状态 #脚本启动hadoop
myhadoop.sh start
#脚本启动Zookeeper
zk.sh start解压HBase安装包到/opt/module目录 配置环境变量并分发 [gaochuchus1 module]$ sudo vim /etc/profile.d/my_env.sh
#HBASE_HOME
export HBASE_HOME/opt/module/hbase-2.4.11
export PATH$PATH:$HBASE_HOME/bin修改配置文件hbase-env.sh [gaochuchus1 conf]$ cd /opt/module/hbase-2.4.11/conf
[gaochuchus1 conf]$ vim hbase-env.sh
export HBASE_MANAGES_ZKfalse其最后添加export HBASE_MANAGES_ZKfalse关闭由HBase管理自身的Zookeeper实例 修改base-site.xml内容 [gaochuchus1 conf]$ vim hbase-site.xml
propertynamehbase.zookeeper.quorum/namevalues1,s2,s3,s4,gracal/valuedescriptionThe directory shared by RegionServers./description/property
!-- property--
!-- namehbase.zookeeper.property.dataDir/name--
!-- value/export/zookeeper/value--
!-- description 记得修改 ZK 的配置文件 --
!-- ZK 的信息不能保存到临时文件夹--
!-- /description--
!-- /property--propertynamehbase.rootdir/namevaluehdfs://s1:8020/hbase/valuedescriptionThe directory shared by RegionServers./description/propertypropertynamehbase.cluster.distributed/namevaluetrue/value/property配置RegionServers [gaochuchus1 conf]$ vim regionservers
s1
s2
s3
s4
gracal解决HBase和Hadoop的log4j兼容性问题修改HBase的jar包使用Hadoop的jar包 [gaochuchus1 conf]$ mv /opt/module/hbase-2.4.11/lib/client-facing-thirdparty/slf4j-reload4j-1.7.33.jar /opt/module/hbase-2.4.11/lib/client-facing-thirdparty/slf4j-reload4j-1.7.33.jar.bak分发HBase
2.HBase服务的启动 单点启动和停止 [gaochuchus1 hbase-2.4.11]$ bin/hbase-daemon.sh start master
[gaochuchus1 hbase-2.4.11]$ bin/hbase-daemon.sh start regionserver群启和停止(推荐) [gaochuchus1 hbase-2.4.11]$ bin/start-hbase.sh
[gaochuchus1 hbase-2.4.11]$ bin/stop-hbase.sh 查看HBase的Web页面 启动成功后通过访问http://s1:16010查看HBase的管理页面
3.HBase部署高可用可选 在 HBase 中 HMaster 负责监控 HRegionServer 的生命周期均衡 RegionServer 的负载如果 HMaster 挂掉了那么整个 HBase 集群将陷入不健康的状态并且此时的工作状态并不会维持太久。所以 HBase 支持对 HMaster 的高可用配置。 #conf目录下创建backup-masters文件
[gaochuchus1 hbase-2.4.11]$ touch conf/backup-masters
#在backup-masters文件配置高可用节点
[gaochuchus1 hbase-2.4.11]$ vim conf/backup-masters
s3
#将conf目录分发
[gaochuchus1 conf]$ xsync backup-masters 此时重新启动HBase访问http://s1:16010可以看到多了备用master节点
4. HBase整合Phoenix
Phoenix 是 HBase 的开源 SQL 皮肤。可以使用标准 JDBC API 代替 HBase 客户端 API来创建表插入数据和查询 HBase 数据为什么使用Phoenix 官方给的解释为在 Client 和 HBase 之间放一个 Phoenix 中间层不会减慢速度因为用户编写的数据处理代码和 Phoenix 编写的没有区别不仅如此Phoenix 对于用户输入的 SQL 同样会有大量的优化手段就像 hive 自带 sql 优化器一样。其能将用户编写的SQL语句改写为HBase的API
4.1 安装Phoenix 安装Phoenix #上传并解压Phoenix安装包到/opt/module
[gaochuchus1 softs]$ tar -zxvf phoenix-hbase-2.4-5.1.2-bin.tar.gz -C /opt/module/
#改名为phoenix
[gaochuchus1 module]$ mvphoenix-hbase-2.4-5.1.2-bin/ phoenix
#复制phoenix的server包并且拷贝到各个节点中
[gaochuchus1 phoenix]$ cp phoenix-server-hbase-2.4-5.1.2.jar /opt/module/hbase-2.4.11/lib/
[gaochuchus1 phoenix]$ xsync /opt/module/hbase-2.4.11/lib/phoenix-server-hbase-2.4-5.1.2.jar
#配置环境变量
[gaochuchus1 module]$ sudo vim /etc/profile.d/my_env.sh
#phoenix
export PHOENIX_HOME/opt/module/phoenix
export PHOENIX_CLASSPATH$PHOENIX_HOME
export PATH$PATH:$PHOENIX_HOME/bin
[gaochuchus1 module]$ source /etc/profile
#重启HBase
[gaochuchus1 module]$ stop-hbase.sh
[gaochuchus1 module]$ start-hbase.sh 连接Phoenix [gaochuchus1 phoenix]$ bin/sqlline.py s1,s2,s3,s4,gracal:21814.2 Phoenix Shell 操作 显示表 0: jdbc:phoenix:s1,s2,s3,s4,gracal:2181 !table
0: jdbc:phoenix:s1,s2,s3,s4,gracal:2181 !tables创建表直接指定单个列作为RowKey相当于sql中的主键 CREATE TABLE IF NOT EXISTS student(
id VARCHAR primary key,
name VARCHAR,
age BIGINT,
addr VARCHAR);在 phoenix 中表名等会自动转换为大写若要小写使用双引号如us_population。 执行上述语句查看表发现表名为大写 创建表直接指定多个列的联合为RowKey CREATE TABLE IF NOT EXISTS student1 (
id VARCHAR NOT NULL,
name VARCHAR NOT NULL,
age BIGINT,
addr VARCHAR
CONSTRAINT my_pk PRIMARY KEY (id, name));注Phoenix 中建表会在 HBase 中创建一张对应的表。为了减少数据对磁盘空间的占用Phoenix 默认会对 HBase 中的列名做编码处理。具体规则可参考官网链接https://phoenix.apache.org/columnencoding.html若不想对列名编码可在建表语句末尾加上 COLUMN_ENCODED_BYTES 0; 可以看到这里的列名没有显示对应的string而是做了编码处理 插入数据 upsert into student values(1001,gcc, 23, changsha);查询记录 select * from student;
select * from student where id1001;删除记录 delete from student where id1001;删除表 drop table student;退出命令行 !quit4.3 表的映射 表的关系 默认情况下 HBase 中已存在的表通过 Phoenix 是不可见的。如果要在 Phoenix 中操作 HBase 中已存在的表可以在 Phoenix 中进行表的映射。映射方式有两种视图映射和表映射 在HBase的shell命令行创建test表格 RowKeyinfo1info2IdnameAddress create test,info1,info2put test,1001,info1:name,gccput test,1001,info1:address,changsha视图映射 Phoenix 创建的视图是只读的所以只能用来做查询无法通过视图对数据进行修改等操作,即删除视图对原数据无影响。在 phoenix 中创建关联 test 表的视图 #创建视图
create view test(id varchar primary key,info1.name varchar, info2.address varchar);
#查看视图,小写的表名需要加双引号
select * from test;
#删除视图,小写的表名需要加双引号
drop view test; 表映射 在 Pheonix 创建表去映射 HBase 中已经存在的表是可以修改删除 HBase 中已经存在的数据的。而且删除 Phoenix 中的表那么 HBase 中被映射的表也会被删除。 特别注意进行表映射时不能使用列名编码需将 column_encoded_bytes 设为 0。因为编码会导致Pheonix的表无法和HBase映射 create tabletest(id varchar primary key,info1.name varchar, info2.address varchar)column_encoded_bytes0;关于数字类型说明 HBase 中的数字底层存储为补码而 Phoenix 中的数字底层存储为在补码的基础上将符号位反转。故当在 Phoenix 中建表去映射 HBase 中已存在的表当 HBase 中有数字类型的字段时会出现解析错误的现象。 常见的解决方案 Phoenix 种提供了 unsigned_intunsigned_long 等无符号类型其对数字的编码解码方式和 HBase 是相同的如果无需考虑负数那在 Phoenix 中建表时采用无符号类型是最合适的选择。如需考虑负数的情况则可通过 Phoenix 自定义函数将数字类型的最高位即符号位反转即可自定义函数可参考如下链接https://phoenix.apache.org/udf.html
4.4 Phoenix二级索引 HBase是没有二级索引的概念的利用Phoenix中间层可以为其建立二级索引 需要添加如下配置到HBase的HRegionServer节点的hbase-site.xml [gaochuchus1 hbase-2.4.11]$ vim conf/hbase-site.xml
!-- phoenix regionserver 配置参数--
propertynamehbase.regionserver.wal.codec/name
valueorg.apache.hadoop.hbase.regionserver.wal.IndexedWALEditCodec/value
/property
[gaochuchus1 hbase-2.4.11]$ xsync conf/hbase-site.xml
#Hbase重启
[gaochuchus1 hbase-2.4.11]$ stop-hbase.sh
[gaochuchus1 hbase-2.4.11]$ start-hbase.sh4.4.1 全局索引global index Global Index 是默认的索引格式创建全局索引时会在 HBase 中建立一张新表。也就是说索引数据和数据表是存放在不同的表中的因此全局索引适用于多读少写的业务场景。写数据的时候会消耗大量开销因为索引表也要更新而索引表是分布在不同的数据节点上的跨节点的数据传输带来了较大的性能消耗 在读数据的时候 Phoenix 会选择索引表来降低查询消耗的时间。 创建单个字段的全局索引 CREATE INDEX my_index ON my_table (my_col);举例 create index my_index on student1(age);此时创建了MY_INDEX的单独的索引表,保存相关的索引信息 查看二级索引是否有效:执行explainPlan计划有二级索引会变为范围扫描 explain select id,name from student1 where age 10;注意如果想查询的字段不是索引字段的话索引表不会被使用也就是说不会带来查询速度的提升。 explain select id,name,addr from student1 where age 10; 因为id,name是主键构成的联合索引age是全局索引addr不是索引因此这时候查询是全表扫描 删除索引 DROP INDEX my_index ON my_table举例 drop index my_index on student1;4.4.2 包含索引(covered index) 创建携带其他字段的全局索引本质还是全局索引。 CREATE INDEX my_index ON my_table (v1) INCLUDE (v2);举例 create index my_index on student1(age) include (addr);此时我们仍运行4.4.1中原本走全表扫描的例子 explain select id,name,addr from student1 where age 10;此时走了范围查询因为age为全局索引其携带了addr字段
4.4.3 本地索引local index Local Index 适用于写操作频繁的场景。索引数据和数据表的数据是存放在同一张表中且是同一个 Region避免了在写操作的时候往不同服务器的索引表中写索引带来的额外开销。 CREATE LOCAL INDEX my_index ON my_table (my_column);
#其中my_column可以是多个类似于组合索引本地索引会将所有的信息存在一个影子列族中虽然读取的时候也是范围扫描但是没有全局索引快优点在于不用写多个表了。 举例 0: jdbc:phoenix:s1,s2,s3,s4,gracal:2181 drop index my_index on student1;
CREATE LOCAL INDEX my_index ON student1 (age,addr);此时我们执行执行计划 explain select id,name,addr from student1 where age 10;5. HBase和Hive集成 如果大量的数据已经存放在 HBase 上面需要对已经存在的数据进行数据分析处理那么 Phoenix 并不适合做特别复杂的 SQL 处理此时可以使用 hive 映射 HBase 的表格之后写 HQL 进行分析处理。 在hive-site.xml中添加zookeeper的属性 [gaochuchus1 conf]$ vim hive-site.xml
propertynamehive.zookeeper.quorum/namevalues1,s2,s4,s4,gracal/value
/property
propertynamehive.zookeeper.client.port/namevalue2181/value
/property
#启动Hive客户端
[gaochuchus1 hive-3.1.2]$ hive实例1 目标建立Hive表关联HBase表插入数据到Hive表的同时能够影响HBase表。 在Hive中创建表同时关联HBase CREATE TABLE hive_hbase_emp_table(empno int,ename string,job string,mgr int,hiredate string,sal double,comm double,deptno int
)STORED BY org.apache.hadoop.hive.hbase.HBaseStorageHandler
WITH SERDEPROPERTIES (hbase.columns.mapping
:key,info:ename,info:job,info:mgr,info:hiredate,info:sal,info:comm,info:deptno)
TBLPROPERTIES (hbase.table.name hbase_emp_table);此时在Hive中出现这个表 同时在Hbase中也出现了这个表 在Hive中创建临时中间表用于load文件中的数据 注意不能将数据直接load进Hive所关联HBase的那张表中,因为创建的Hive表格和HBase关联结构比较复杂 CREATE TABLE emp(empno int,ename string,job string,mgr int,hiredate string,sal double,comm double,deptno int
)
row format delimited fields terminated by \t;向Hive临时表中load 数据 hive load data local inpath /opt/softs/emp.txt into table emp;通过insert命令将中间表中的数据导入Hive关联的Hbase的那张表中 hive insert into table hive_hbase_emp_table select * from emp;查看Hive以及相关联的HBase表中是否已经成功同步插入了数据 hive select * from hive_hbase_emp_table;Hbase scan hbase_emp_table实例2 目标在 HBase 中已经存储了某一张表 hbase_emp_table然后在 Hive 中创建一个外部表来关联 HBase 中的 hbase_emp_table 这张表使之可以借助 Hive 来分析 HBase 这张表中的数据。 Hive中创建外部表 CREATE EXTERNAL TABLE relevance_hbase_emp(empno int,ename string,job string,mgr int,hiredate string,sal double,comm double,deptno int
)STORED BY org.apache.hadoop.hive.hbase.HBaseStorageHandler
WITH SERDEPROPERTIES (hbase.columns.mapping :key,info:ename,info:job,info:mgr,info:hiredate,info:sal,info:comm,info:deptno)
TBLPROPERTIES (hbase.table.name hbase_emp_table);关联后就可以使用Hive函数进行一些分析操作如 hive (default) select deptno,avg(sal) monery from relevance_hbase_emp group by deptno ;