1. 背景 2.hbase查询的确是不太方便,除了指定rowkey,或者通过指定startkey stopkey进行scan之外,没有更有效的查询方式 如果想通过列值过滤,只能全表扫描了 如果要搞什么group by或者order by(除非你的rowkey做了相应设计) 更是没法弄 在传统的mysql/or
1. 背景
2.hbase查询的确是不太方便,除了指定rowkey,或者通过指定startkey stopkey进行scan之外,没有更有效的查询方式 如果想通过列值过滤,只能全表扫描了 如果要搞什么group by或者order by(除非你的rowkey做了相应设计) 更是没法弄 在传统的mysql/oracle得心应手的查询在hbase上就是束手束脚
3.当然可以通过写hadoop job解决问题,但为了查询去写job,代价未免有点高 于是hive出现了
4.有两个方法可以集成hive和hbase
1.使用HBaseStorageHandler,这个会直接操作HBase,可能会对线上产生影响
2.将HBase定期导入到HDFS,再通过hive访问HDFS
下面将详述第二种方法
HDFS导入
1.使用datax将HBase表导入到HDFS上,比如/group/wireless-arctic/task/arctic_task
2.hive产生外部表,从而避免导入数据
CREATE EXTERNAL TABLE task_history (
biz_type string,
cid string,
content string,
ctime string,
gmt_create string,
hostName string,
item string,
mtime string,
otags string,
priority string,
retry string,
result string,
srcImages string,
src_url string,
status string,
summary string,
task_type string,
title string,
userId string,
userNick string,
utags string,
writer string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\001'
LOCATION '/group/wireless-arctic/task';location是云梯文件的目录
3.测试
select cid,result from task_history limit 10;
Total MapReduce jobs = 1
Launching Job 1 out of 1
Number of reduce tasks is set to 0 since there's no reduce operator
Selecting distributed mode: Input Size (= 2578823293 = 2 gigabytes 411 megabytes 366 kilobytes 125 bytes) is larger than hive.exec.mode.local.auto.inputbytes.max (= 134217728 = 128 megabytes 0 kilobytes 0 bytes)
Starting Job = job_201311281255_6734353, Tracking URL = http://hdpjt2.alibaba-inc.com/jobdetails.jsp?jobid=job_201311281255_6734353
Kill Command = /home/hadoop/hadoop-current/bin/../bin/hadoop job -Dmapred.job.tracker=hdpjt:9001 -kill job_201311281255_6734353
Hadoop job information for Stage-1: number of mappers: 10; number of reducers: 0
2013-12-19 18:53:02,891 Stage-1 map = 0%, reduce = 0%
2013-12-19 18:53:11,017 Stage-1 map = 50%, reduce = 0%
2013-12-19 18:53:12,033 Stage-1 map = 90%, reduce = 0%
2013-12-19 18:53:19,394 Stage-1 map = 100%, reduce = 100%
Ended Job = job_201311281255_6734353
OK
200011928538 success
200011928538 success
200011909281 success
200011928474 success
200011909281 success
200011928474 success
110010569498 failure:userId:1782836127,contentId:110010569498 ImageFlow,call error and ret:1
110010523403 success
110010523921 success
110010524299 success
Time taken: 23.137 seconds = 23 seconds 137 milliseconds添加分区及自动化
1.完成了上面的步骤,你就可以查询数据了,但面临一个问题,数据更新怎么办?
一个比较通用的做法就是每天跑一个定时任务将HBase表dump到HDFS,即每天一个快照每天的快照可以存放在以日期命名的目录中,这样可以保存多份快照,出了问题也好追踪2.hive如何利用这每天的快照?
那就是hive分区
分区的本意是数据量大了切分数据,但目前我们并未如此使用,而是利用分区来区分快照删除之前的表
drop table task_history;产生一张分区表
CREATE EXTERNAL TABLE task_history (
biz_type string,
cid string,
content string,
ctime string,
gmt_create string,
hostName string,
item string,
mtime string,
otags string,
priority string,
retry string,
result string,
srcImages string,
src_url string,
status string,
summary string,
task_type string,
title string,
userId string,
userNick string,
utags string,
writer string
)
PARTITIONED BY (dt string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\001'
LOCATION '/group/wireless-arctic/task';其实就是在之前的建表语句中加了一行PARTITIONED BY (dt string)
添加分区
ALTER TABLE task_history ADD PARTITION(dt='20131223') LOCATION '/group/wireless-arctic/task/20131223';3.如何自动化
通过工具比如datax或者其他导出工具将HBase表导出到HDFS,正如前面提到的每天一个目录(以日期命名)
将每天的数据目录挂载到hive分区
hive -e "ALTER TABLE task_history ADD PARTITION(dt=`date -d yesterday +%Y%m%d`) LOCATION '/group/wireless-arctic/task/`date -d yesterday +%Y%m%d`';"将前面2个步骤的脚本整合到crontab 中就可以做到自动化了
最后如何通过分区查询
select * from task_history where dt='20131223' limit 10;即加上分区查询条件dt='20131223'

웹 응용 프로그램에서 MySQL의 주요 역할은 데이터를 저장하고 관리하는 것입니다. 1. MySQL은 사용자 정보, 제품 카탈로그, 트랜잭션 레코드 및 기타 데이터를 효율적으로 처리합니다. 2. SQL 쿼리를 통해 개발자는 데이터베이스에서 정보를 추출하여 동적 컨텐츠를 생성 할 수 있습니다. 3.mysql은 클라이언트-서버 모델을 기반으로 작동하여 허용 가능한 쿼리 속도를 보장합니다.

MySQL 데이터베이스를 구축하는 단계에는 다음이 포함됩니다. 1. 데이터베이스 및 테이블 작성, 2. 데이터 삽입 및 3. 쿼리를 수행하십시오. 먼저 CreateAbase 및 CreateTable 문을 사용하여 데이터베이스 및 테이블을 작성한 다음 InsertInto 문을 사용하여 데이터를 삽입 한 다음 최종적으로 SELECT 문을 사용하여 데이터를 쿼리하십시오.

MySQL은 사용하기 쉽고 강력하기 때문에 초보자에게 적합합니다. 1.MySQL은 관계형 데이터베이스이며 CRUD 작업에 SQL을 사용합니다. 2. 설치가 간단하고 루트 사용자 비밀번호를 구성해야합니다. 3. 삽입, 업데이트, 삭제 및 선택하여 데이터 작업을 수행하십시오. 4. Orderby, Where and Join은 복잡한 쿼리에 사용될 수 있습니다. 5. 디버깅은 구문을 확인하고 쿼리를 분석하기 위해 설명을 사용해야합니다. 6. 최적화 제안에는 인덱스 사용, 올바른 데이터 유형 선택 및 우수한 프로그래밍 습관이 포함됩니다.

MySQL은 다음과 같은 초보자에게 적합합니다. 1) 설치 및 구성이 쉽고, 2) 풍부한 학습 리소스, 3) 직관적 인 SQL 구문, 4) 강력한 도구 지원. 그럼에도 불구하고 초보자는 데이터베이스 디자인, 쿼리 최적화, 보안 관리 및 데이터 백업과 같은 과제를 극복해야합니다.

예, sqlisaprogramminglanguages-pecializedfordatamanagement.1) 그것은 초점을 맞추고, 초점을 맞추고, 초점을 맞추고, sqlisessentialforquerying, 삽입, 업데이트 및 adletingdataindataindationaldatabase.3) weburer infriendly, itrequires-quirestoamtoavase

산성 속성에는 원자력, 일관성, 분리 및 내구성이 포함되며 데이터베이스 설계의 초석입니다. 1. 원자력은 거래가 완전히 성공적이거나 완전히 실패하도록합니다. 2. 일관성은 거래 전후에 데이터베이스가 일관성을 유지하도록합니다. 3. 격리는 거래가 서로를 방해하지 않도록합니다. 4. 지속성은 거래 제출 후 데이터가 영구적으로 저장되도록합니다.

MySQL은 데이터베이스 관리 시스템 (DBMS) 일뿐 만 아니라 프로그래밍 언어와 밀접한 관련이 있습니다. 1) DBMS로서 MySQL은 데이터를 저장, 구성 및 검색하는 데 사용되며 인덱스 최적화는 쿼리 성능을 향상시킬 수 있습니다. 2) SQL과 같은 ORM 도구를 사용하여 Python에 내장 된 SQL과 프로그래밍 언어를 결합하면 작업을 단순화 할 수 있습니다. 3) 성능 최적화에는 인덱싱, 쿼리, 캐싱, 라이브러리 및 테이블 부서 및 거래 관리가 포함됩니다.

MySQL은 SQL 명령을 사용하여 데이터를 관리합니다. 1. 기본 명령에는 선택, 삽입, 업데이트 및 삭제가 포함됩니다. 2. 고급 사용에는 조인, 하위 쿼리 및 집계 함수가 포함됩니다. 3. 일반적인 오류에는 구문, 논리 및 성능 문제가 포함됩니다. 4. 최적화 팁에는 인덱스 사용, 선택*을 피하고 한계 사용이 포함됩니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

WebStorm Mac 버전
유용한 JavaScript 개발 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

에디트플러스 중국어 크랙 버전
작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

VSCode Windows 64비트 다운로드
Microsoft에서 출시한 강력한 무료 IDE 편집기
