hbase-JAVA API
jar包
hdfs
hbase-client
DDL操作基本流程梳理
- 建立连接
Connection conn = ConnectionFactory.createConnection(conf); 得到admin(org.apache.hadoop.hbase.client.Admin);
Admin admin = conn.getAdmin();HTableDescriptor 组装元信息
HTableDescriptor tableDesc = new HTableDescriptor(TableName.valueOf(tablename));
tableDesc.addFamily(new HColumnDescriptor(columnFamily));- admin 结合HTableDescriptor 进行DDL操作
admin.createTable(tableDesc); - 释放资源
admin.close();
conn.close();12345678910111213141516public static void createTable(String tablename, String columnFamily) throws Exception{Connection conn = ConnectionFactory.createConnection(conf);Admin admin = conn.getAdmin();TableName tableNameObj = TableName.valueOf(tablename);if (admin.tableExists(tableNameObj)) {System.out.println("Table exists!");System.exit(0);} else {HTableDescriptor tableDesc = new HTableDescriptor(TableName.valueOf(tablename));tableDesc.addFamily(new HColumnDescriptor(columnFamily));admin.createTable(tableDesc);System.out.println("create table success!");}admin.close();conn.close();}
DML 操作基本流程梳理
- 建立连接
Connection conn = ConnectionFactory.createConnection(conf); - 得到table(org.apache.hadoop.hbase.client.Table);
Table table = connection.getTable(TableName.valueOf(tableName)); - 组装put或者get对象
Put put = new Put(Bytes.toBytes(rowKey));
put.addColumn(Bytes.toBytes(family), Bytes.toBytes(qualifier), Bytes.toBytes(value));
put.addColumn(Bytes.toBytes(family), Bytes.toBytes(qualifier), Bytes.toBytes(value)); - table+put(get)执行
table.put(put); - 释放资源
table.close();
connection.close();123456789101112131415public static void addRecord(String tableName, String rowKey, String family, String qualifier, String value){try {Connection connection = ConnectionFactory.createConnection(conf);Table table = connection.getTable(TableName.valueOf(tableName));Put put = new Put(Bytes.toBytes(rowKey));put.addColumn(Bytes.toBytes(family), Bytes.toBytes(qualifier), Bytes.toBytes(value));put.addColumn(Bytes.toBytes(family), Bytes.toBytes(qualifier), Bytes.toBytes(value));table.put(put);table.close();connection.close();System.out.println("insert recored " + rowKey + " to table " + tableName + " ok.");} catch (IOException e) {e.printStackTrace();}}
资源列表
[Windows+Eclipse+Maven+HBase 1.2.4开发环境搭建](0http://blog.csdn.net/chengyuqiang/article/details/69568496)
java操作hive
版本
hadoop 2.7.4
hive 1.2.2
启动hive远程服务
hiveserver2 默认开启10000端口
依赖的jar包
java.lang.ClassNotFoundException: org.apache.hive.jdbc.HiveDriver
缺少hive-jdbc依赖
java.lang.NoClassDefFoundError: org/apache/hadoop/conf/Configuration
原因:缺少hadoop-common依赖
jdbc工具类
|
|
hive-jdbc-demo测试类
|
|
hive学习笔记-udf-udaf
依賴 jar包 hive-exec
|
|
udfDemo
|
|
hive被翻译成map-reduce ,Text类型必须是hadoop里面的,hadoop里面 String是无法识别的
use udfDemo
|
|
udf使用场景扩充
网上的例子大多数都是字符串连接,没什么实际意义
将查询结果封装成json格式
封装为json
|
|
获取表的列名信息
|
|
udaf 学习案例-求平均数
(数据模型+Evaluator)继承(extends) UDAF
Evaluator 实现 UDAFEvaluator接口
- init
- iterate
- terminatePartial
- merge
- terminate
|
|
udaf 学习案例-max_minNUtil
|
|
hadoop安装snappy压缩
hadoop检查是否支持snappy
|
|
hbase检查是否支持snappy
参考hbase官方-压缩
压缩算法简要介绍
hadoop中常用的压缩算法有bzip2、gzip、lzo、snappy,
其中lzo、snappy需要操作系统安装native库才可以支持
下面这张表,是比较官方一点的统计,不同的场合用不同的压缩算法。bzip2和GZIP是比较消耗CPU的,压缩比最高,GZIP不能被分块并行的处理;Snappy和LZO差不多,稍微胜出一点,cpu消耗的比GZIP少。
通常情况下,想在CPU和IO之间取得平衡的话,用Snappy和lzo比较常见一些
编译安装snappy
版本号: snappy 1.1.7
编译安装protobuf
查看hadoop 2.7.4源码包的building.txt可知 要求 protobuf为 2.5
下载源码包
https://github.com/google/protobuf/releases
源码编译安装hadoop 2.7.4并添加snappy 支持
参考Hadoop源码学习-编译源码
编译好之后,将原来的$HADOOP_HOME/lib/native替换为编译好的新的native库
hbase学习笔记-基本操作
开启hbase
start-hbase.sh
hbase shell
|
|
DDL
创建数据库表
语法:create
显示数据库表
list
查看表结构描述
describe
describe ‘product’
修改表
修改表结构必须先disable,再修改表,修改完成后,再enable表
删除表
|
|
DML
插入数据
put
scan:扫描表
get:查询数据
count:查询表中的数据行数
delete:删除行中的某个列值
deleteall:删除行中的某个列值
truncate:删除表中的所有数据
面试经验-xx技术面试
hive用到哪些技术点
数据迁移(oracle 到 hive)
sql脚本
udf udaf举例(hive)
udf 继承extends 重写 evaluate
udf的输入参数一般对应数据表的列,以行为单位
hive/sparkSql实现udaf 需要继承什么,自己需要实现哪部分逻辑
hbase随机热点问题
自己入坑,加了随机前缀,加随机前缀的话怎么查询rowkey
如果随机前缀的话,怎么查询rowkey?随机前缀的话会破坏rowkey,使得rowkey没有意义。可以加随机后缀的方式,这样可以再通过前缀过滤器来查询
rowkey 简短性
rowkey 唯一性
rowkey 散列性
rowkey 设计举例:
userid|timestamp|hashCode
kafka+sparkStreaming中断时,如何保证消息只消费一次
消息中断时采用checkpoint恢复,恢复的原理是什么?sparkStreaming 如何维护offset
spark streaming读取kakfka数据手动维护offset
hbase压缩算法问题
hadoop | hbase算法 | 表示 |
---|---|---|
‘none’ | ||
zlib | gzip | ‘GZ’ |
lz4 | LZ4 | ‘LZ4’ |
snappy | Snappy | ‘SNAPPY’ |
bzip2 | ||
LZO | ‘LZO’ |
Enabling Compression on a ColumnFamily of an Existing Table using HBaseShell
修改已经存在的表
Creating a New Table with Compression On a ColumnFamily
创建表时采用压缩算法
Verifying a ColumnFamily’s Compression Settings
查看列簇的压缩方式
hbase查询(filter)
接触大数据后,最大的收获是什么
#(我一系列懵逼之后)你擅长哪部分
#
面试经验-凌志软件
基本形式 ,面试人,面试次数
电话 技术经理 初面
介绍一下自己的工作经历
最好包含自己的技术点
大学
介绍一下在项目中的负责哪些工作
写一些ETL过程
数据采集+数据过滤+报表开发
数据采集 用的什么架构 flume
说一下报表开发这块
时间维度报表: 日报,周报,月报,季报,年报
成交清算表
占比分析(topN)
非关系型数据库的数据关联
把相同的字段整理成key,进行join
集群是你管理的吗,用的什么管理软件
是的,用的clouderaManager(CM)
(集群管理指的是什么?管理、监控、诊断、集成)
spark 优化
你有什么要问我的
团队情况(人数),出差,工作地点,是否外包性质
薪资期望
根据平常的工作量