初心者のHadoop-Hiveコマンドラインクライアントの使用

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によってガイドされる句にのみ表示されます。

おすすめ

転載: blog.csdn.net/qq_45154565/article/details/109194522