1.ハイブの紹介
Hiveは、HDFSとMapReduceに基づく分散データウェアハウスシステムであり、テーブル形式でユーザーデータを管理します。ユーザーは、MRを使用してHDFSに保存されたデータを計算するためにHQLステートメントを記述するだけで済みます(HiveはHQLステートメントを自動的に変換します) MRジョブは実行のためにMRに送信されます)。これにより、学習コストが削減されます。この実験では、Hiveが提供するコマンドラインクライアントを使用してHiveServerに接続し、HQLステートメントを使用してデータを作成、削除、変更、インポート、エクスポートし、内部テーブル、外部テーブル、パーティションテーブルとバケットテーブルのデータをクエリする方法をユーザーに説明します。
2、ハイブのインストール
(1)ハイブソースプログラムをダウンロードして解凍します
仮想マシンに直接URLを入力します。HiveソースプログラムURL
ダウンロードHiveソースプログラム
(2)ソースプログラムを解凍します
ターミナルで次のコマンドを入力します。
sudo tar -zxvf ./apache-hive-1.2.1-bin.tar.gz -C /usr/local # 解压到/usr/local中
cd /usr/local/
sudo mv apache-hive-1.2.1-bin hive # 将文件夹名改为hive
sudo chown -R hadoop: hadoop hive # 修改文件权限
(3)環境変数を構成する
使いやすくするために、hiveコマンドを環境変数に追加し、vimエディターを使用して.bashrcファイルを開きます。コマンドは次のとおりです。
vim ~/.bashrc
追加されたコンテンツは次のとおりです。
export HIVE_HOME=/usr/local/hive
export PATH=$PATH:$HIVE_HOME/bin
export HADOOP_HOME=/usr/local/Hadoop
保存して終了したら、次のコマンドを実行して、構成をすぐに有効にします。
source ~/.bashrc
(4)/ usr / local / hive / confの下のhive-site.xmlを変更します
次のコマンドを実行します。
cd /usr/local/hive/conf
mv hive-default.xml.template hive-default.xml
上記のコマンドは、hive-default.xml.templateの名前をhive-default.xmlに変更します。次に、vimエディターを使用して新しい構成ファイルhive-site.xmlを作成します。コマンドは、次のとおりです。
cd /usr/local/hive/conf
vim hive-site.xml
3、mysqlをインストールして構成します
Hive独自のダービーを使用してメタデータを保存する代わりに、MySQLデータベースを使用してHiveメタデータを保存します。
(1)MySQLをダウンロードしてインストールする
次のコマンドを使用してmysqlをインストールします。インストールする前に、ソフトウェアソースを更新して最新バージョンを取得してください。
sudo apt-get update #更新软件源
sudo apt-get install mysql-server #安装mysql
(2)mysqlサーバーを起動して閉じます
service mysql start
service mysql stop
(3)起動が成功したかどうか、mysqlノードがLISTEN状態にあるかどうかを確認し、起動が成功したことを示します。
sudo netstat -tap |grep mysql
(4)mysqlシェルインターフェイスに入ります
mysql -u root -p
4、MySQLの一般的な操作
MySQLのすべてのコマンドは、英語のセミコロンで終了する必要があります。
(1)データベースの表示
show databases;
(2)データベース内のテーブルを表示します
use mysql; //打开库,对每个库进行操作就要打开此库
showtables;
(3)データテーブルの構造を表示する
describe 表名;
(4)テーブルのレコードを表示します
select * from 表名;
例:mysqlライブラリのuserテーブルのレコードを表示します。MySQLユーザーを操作できるすべてのユーザーがこの表に含まれています。
select * from user;
(5)データベースを構築する
create database 库名;
(6)テーブルを作成する
use 库名;
create table 表名 (字段设定列表);
例:新しく作成されたaaaライブラリにテーブルpersonを作成します。id(シリアル番号、自動拡張)、xm(名前)、xb(性別)、csny(生年月日)の4つのフィールドがあります。
use aaa;
create table person (id int(3) auto_increment not null primary key, xm varchar(10),xb varchar(2),csny date);
describeコマンドを使用して、新しく作成されたテーブル構造を表示できます。
describe person;
(7)レコードを追加する
例:関連するレコードをいくつか追加します。
mysql>insert into person values(001,’张三’,’男’,’1997-01-02′);
mysql>insert into person values(002,’李四’,’女’,’1996-12-02′);
注:フィールドの値(「ZhangSan」、「Male」、「1997-01-02」)は、英語では2つの単一のアポストロフで囲まれており、背面でも同じことが言えます。
テーブルの作成時にidauto-incrementが設定されるため、idフィールドを挿入する必要はなく、代わりにnullを使用します。
(8)レコードを変更する
Update 表名 set
例:張さんの生年月日を1971-01-10に変更します
update person set csny=’1971-01-10′ where xm=’张三’;
(9)レコードを削除する
delete from 表名 where
例:ZhangSanのレコードを削除します。
delete from person where xm=’张三’;
(10)データベースの削除とテーブルの削除
drop database 库名;
drop table 表名;
(11)mysqlバージョンを表示する
mysql5.0のコマンドは次のとおりです。
show variables like ‘version’;
または:
select version();
5. mysqljdbcパッケージをダウンロードします
ダウンロードアドレス:mysqljdbcパッケージアドレスをダウンロードします
tar -zxvf mysql-connector-java-5.1.40.tar.gz #解压
cp mysql-connector-java-5.1.40/mysql-connector-java-5.1.40-bin.jar /usr/local/hive/lib
#将mysql-connector-java-5.1.40-bin.jar拷贝到/usr/local/hive/lib目录下
6つ目は、mysqlシェルを起動してログインすることです。
service mysql start #启动mysql服务
mysql -u root -p #登陆shell界面
7、新しいHiveデータベースを作成します
create database hive;
#这个hive数据库与hive-site.xml中localhost:3306/hive的hive对应,用来保存hive元数据
ハイブアクセスを許可するようにmysqlを構成します。
grant all on *.* to hive@localhost identified by 'hive';
#将所有数据库的所有表的所有权限赋给hive用户,后面的hive是配置hive-site.xml中配置的连接密码
flush privileges; #刷新mysql系统权限关系表
ハイブを開始します。
ハイブを開始する前に、hadoopクラスターを開始してください。
start-all.sh #启动hadoop
hive #启动hive
8.ハイブを使用する
(1)準備作業
HDFSでHiveに必要なパス/ tmpおよび/ user / hive / warehouseを作成します
hadoop fs -mkdir /tmp
hadoop fs -mkdir /user/hive/warehouse
上記のパスのアクセス許可を変更して、ユーザーグループに書き込み許可を持たせます。
hadoop fs -chmod g+w /tmp
hadoop fs -chmod g+w /user/hive/warehouse
ハイブを開始します。
ハイブを終了します。
exit;
(2)一般的なハイブコマンド
①ハイブデータベースに入る
最初にHadoopを開始する必要があります:
Start-all.Sh
次に、ハイブデータベースに入ります。
hive
②ハイブ内のすべてのデータベースを表示する
show databases;
③データベースを利用する
use 数据库名;
④すべてのテーブルを表示
show tables;
⑤お問い合わせ表の構成
desc 表名;
⑥クエリテーブルデータ
select * from 表名;
✓データベースを作成する
CREATE SCHEMA userdb;
⑧データベーステーブルを確認する
SHOW DATABASES;
⑨データベースを削除する
DROP DATABASE IF EXISTS userdb;
DROP SCHEMA userdb;
⑩テーブル従業員を作成する
create table if not exists employee (eid int,name String,salary String,destination String)
comment 'employee details'
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\n'
STORED AS TEXTFILE;
(3)ハイブの基本データタイプ
Hiveは、基本データタイプと複合タイプをサポートしています。基本データタイプには、主に数値タイプ(INT、FLOAT、DOUBLE)、ブール値、文字列が含まれます。複合タイプには、ARRAY、MAP、STRUCTの3つのタイプがあります。
a。基本的なデータタイプ
TINYINT:1バイト
SMALLINT:2バイト
INT:4バイト
BIGINT:8バイト
BOOLEAN:TRUE / FALSE
FLOAT:4バイト、単精度浮動小数点型
DOUBLE:8バイト、倍精度浮動小数点STRING文字列
b。複雑なデータタイプ
ARRAY:順序付きフィールド
MAP:順序なしフィールド
STRUCT:名前付きフィールドのセット
(4)一般的に使用されるHiveQL操作コマンド
Hiveで一般的に使用されるHiveQL操作コマンドには、主にデータ定義とデータ操作が含まれます。
①データ定義:主にデータベース、テーブル、ビュー、関数、およびインデックスを作成、変更、および削除するために使用されます。
データベースの作成、変更、および削除:
create database if not exists hive;
#创建数据库
show databases;
#查看Hive中包含数据库
show databases like 'h.*';
#查看Hive中以h开头数据库
describe databases;
#查看hive数据库位置等信息
alter database hive set dbproperties;
#为hive设置键值对属性
use hive;
#切换到hive数据库下
drop database if exists hive;
#删除不含表的数据库
drop database if exists hive cascade;
#删除数据库和它中的表
注:
dbpropertiesプロパティを除いて、データベース名やデータベースが配置されているディレクトリの場所など、データベースのメタデータ情報は変更できません。データベースプロパティを削除またはリセットする方法はありません。
テーブルの作成、変更、および削除:
create table if not exists hive.usr(
name string comment 'username',
pwd string comment 'password',
address struct<street:string,city:string,state:string,zip:int>,
comment 'home address',
identify map<int,tinyint> comment 'number,sex')
comment 'description of the table'
tblproperties('creator'='me','time'='2016.1.1');
#创建外部表
create external table if not exists usr2(
name string,
pwd string,
address struct<street:string,city:string,state:string,zip:int>,
identify map<int,tinyint>)
row format delimited fields terminated by ','
location '/usr/local/hive/warehouse/hive.db/usr';
#创建分区表
create table if not exists usr3(
name string,
pwd string,
address struct<street:string,city:string,state:string,zip:int>,
identify map<int,tinyint>)
partitioned by(city string,state string);
ビューとインデックスの作成、変更、削除:
create view view_name as....; #创建视图
alter view view_name set tblproperties(…); #修改视图
ビューは読み取り専用であるため、メタデータのtblproperties属性のみをビューに対して変更できます。
#删除视图
drop view if exists view_name;
②ユーザー定義機能:
新しいユーザー定義関数(UDF)メソッドを作成する前に、Hiveに付属する関数について学習しましょう。show Functions;コマンドは、Hiveのすべての関数名を表示します。
特定の関数の使用法を確認する場合は、次を使用できます。describefunction function name:
③データ操作
主な実現方法は、SQL言語と同様に、データをテーブルにロード(またはテーブルからエクスポート)して、対応するクエリ操作を実行することです。
テーブルにデータをロードします。
ここでは、例として2つの属性のみを持つ単純なテーブルを取り上げます。最初にテーブルstuとcourseを作成し、stuには2つの属性idとnameがあり、courseには2つの属性cidとsidがあります。
create table if not exists hive.stu(id int,name string)
row format delimited fields terminated by '\t';
create table if not exists hive.course(cid int,sid int)
row format delimited fields terminated by '\t';
テーブルにデータをロードするには、ファイルからインポートする方法と、クエリステートメントを介して挿入する方法の2つがあります。
a。ファイルからインポート:
このテーブルのレコードがファイルstu.txtに保存されている場合、ファイルの保存パスは/usr/local/hadoop/examples/stu.txtであり、内容は次のとおりです。
このファイルのデータをテーブルstuにロードします。操作は次のとおりです。
load data local inpath '/usr/local/hadoop/examples/stu.txt' overwrite into table stu;
stu.txtファイルがHDFSに保存されている場合、localキーワードは必要ありません。
b。クエリステートメントで挿入:
次のコマンドを使用して、stuテーブルと同じ属性を持つstu1テーブルを作成します。stuテーブルからクエリされたデータをstu1に挿入する必要があります。
create table stu1 as select id,name from stu;
上記は、テーブルを作成し、新しいテーブルに直接データを挿入するためのものです。テーブルがすでに存在する場合は、データをテーブルに挿入して、次のコマンドを実行します。
insert overwrite table stu1 select id,name from stu where(条件);
ここでのキーワードoverwriteの機能は、テーブル(またはパーティション)内の元のデータをintoキーワードに置き換えて、元のコンテンツに直接追加することです。
④テーブルからデータをエクスポートする
a。ファイルまたはフォルダを簡単にコピーできます。
hadoop fs -cp source_path target_path;
a。一時ファイルを書き込む:
insert overwrite local directory '/usr/local/hadoop/tmp/stu' select id,name from stu;
⑤クエリ操作
これはSQLクエリとまったく同じなので、ここでは繰り返しません。主にselect ... from ... where ...やその他のステートメントを、キーワードgroup
by、have、like、rlikeなどの操作と組み合わせて使用します。
これは、SQLにないケース...いつ...その後...文のパターン、結合操作、およびサブクエリ操作の簡単な紹介です。
case ... when ... then ...文は、単一の列のクエリ結果を処理するために使用されるif条件ステートメントに似ています。ステートメントは次のとおりです。
select id,name,
case
when id=1 then 'first'
when id=2 then 'second'
else 'third'
end from stu
⑥接続
結合とは、共通のデータ項目で一致する2つのテーブルの行をマージすることです
。HiveQLの結合は、内部結合、左外部結合、右外部結合、完全外部結合、および半結合の5つのタイプに分けられます。
a。内部接続(同等の接続)
内部結合は、比較演算子を使用して、各テーブルに共通の列の値に基づいて2つのテーブルの行を照合します。
まず、最初に次のコンテンツをコーステーブルに挿入します。
stuテーブルとcourseテーブルで同じ中学校番号を持つすべての行をクエリするには、コマンドは次のとおりです。
select stu.*, course.* from stu join course on(stu .id=course .sid);
b。左接続
左結合の結果セットには、結合列と一致する行だけでなく、「LEFTOUTER」句で指定された左テーブルのすべての行が含まれます。左側のテーブルの行の右側のテーブルに一致する行がない場合、関連する結果セットの右側のテーブルで選択されているすべての列がnullになります。コマンドは次のとおりです。
select stu.*, course.* from stu left outer join course on(stu .id=course .sid);
c。正しい接続
右接続は、左から外への接続の逆接続であり、右テーブルのすべての行を返します。右側のテーブルの行の左側のテーブルに一致する行がない場合、左側のテーブルにnull値が返されます。コマンドは次のとおりです。
select stu.*, course.* from stu right outer join course on(stu.id=course .sid);
d。完全に接続されている
完全結合は、左右のテーブルのすべての行を返します。行に別のテーブルに一致する行がない場合、他のテーブルの選択リストにはnull値が含まれます。テーブル間に一致する行がある場合、結果セット全体にベーステーブルのデータ値が含まれます。コマンドは次のとおりです。
select stu.*, course.* from stu full outer join course on(stu .id=course .sid);
e。半接続
半結合はHiveに固有です。Hiveは操作をサポートしていませんが、代替ソリューションがあります。半結合と呼ばれる左半結合では、結合されたテーブルをクエリ列に含めることはできず、on句にのみ含めることができます。に。コマンドは次のとおりです。
select stu.* from stu left semi join course on(stu .id=course .sid);
ʻサブクエリ
標準のSQLサブクエリは、ネストされたselect句をサポートします。HiveQLでは、サブクエリのサポートが非常に制限されています。サブクエリは、fromによってガイドされる句にのみ表示されます。