Sword Finger Data Warehouse-Hive01

1.レビュー

2、Hive01

3. Hiveのインストールとデプロイ

4、HiveのDDL操作

V.関与する可能性があるインタビューの質問

1.レビュー

Hadoop:
狭義:
広くApache Hadoopソフトウェア(最も重要な基盤の一部)を指します:Hadoopエコシステム:Hadoop、Hive、Sqoop、HBase ...

たとえば、HiveはSQLの分析エンジンであり、ビジネスシナリオを実現するには、複数のフレームワークに基づいて本番環境を組み合わせる必要があります。

問題をすばやく見つける方法は?そして、問題をすばやく解決する方法

たとえば、Hadoopでは、次のビジネスを処理する必要があります。

mapreduceプログラミングの場合、複雑さが非常に高くなります。
  • https://hadoop.apache.org/docs/stable/hadoop-mapreduce-client/hadoop-mapreduce-client-core/MapReduceTutorial.html
  • ローカルでの開発、テスト、パッケージ化、およびサーバーへのスローが必要で、後のメンテナンスは非常に面倒です

2.1、Hiveの背景(スキーマにつながる)

===>ハイブの背景

  • MapReduce指向のプログラミングは非常に面倒なので、たとえば、元々RDBMSリレーショナルデータベースに携わっていた実務家は、開発するのに非常に骨が折れるため
    、Hadoop MapReduceに基づいてビッグデータを処理する場合の欠点です。
スキーマ情報:
  • MySQLで理解できるのは、リレーショナルデータベースのテーブル名、列名、列タイプです。
  • MySQLまたはOracleでは、SQL統計を実行する場合、まずテーブル名、列名、列タイプなどを含むテーブルを作成し、
    次にSQLを使用して対応するビジネスの統計分析を実行する必要があります。

HDFS上のファイルは主に次のように分類されます:存在しないtxtテキスト形式、テーブル名、列名、列タイプ;テキスト形式について私たちができることは、区切り記号(\ t)に従うことです:最初の列を知ることそれは何ですか、2列目は何ですか

ソースデータとメタデータ:
源数据:HDFS上的数据
元数据:是描述数据的数据,比如数据的表名,列名,列类型

2.2、Hiveとの最初の知り合い

Hive公式ウェブサイト:hive.apache.org

公式ウェブサイトはHiveについて説明しています:

  • Apache Hiveデータウェアハウスソフトウェアは
    SQLを使用して分散ストレージ(HDFS / S3)にある大規模なデータセットの読み取り、
    書き込み、
    管理を促進(促進

    します。


  • ユーザーをHiveに接続するためのコマンドラインツールとJDBCドライバーが提供されています。

翻訳:

  • Hiveは、分散ファイルシステムでSQLを使用して大規模なデータセットを読み取り、書き込み、管理できるデータウェアハウスです。
Hiveフレームワークの生成は、RDBMSの実践者にとって大きな恩恵です。SparkでもFlinkでも、それらはすべてバッチ処理を推進し​​ています。2つのフレームワークは接続されているので、学習するのにより便利です。
拡張:HiveはFacebookによってオープンソース化されており、大規模な構造化ログの統計的問題を解決するために使用されます。これは、さまざまなディメンションの統計分析のログに基づいています。Hiveは、Hadoop上に構築されたデータウェアハウスです。

1. Hiveのデータはhdfsに保存されます;
2. Hiveの基盤となる実行エンジンはMapReduce / Spark / Tezであり、変更する必要があるパラメーターは1つだけです。

(hive (ruozedata_hive)> set hive.execution.engine;
 hive.execution.engine=mr)

3. HiveジョブはYarnに送信されて実行されます;
4. HiveはSQLに似ていますが、完全に同じではないHiveQLクエリ言語を提供します。

インタビューの質問:HiveQLとSQLの関係は何ですか?
  • 回答:同様の構文を除いて、他の構文は完全に異なります
ビッグデータの「クラウド化」:リレーショナルデータベースをビッグデータプラットフォームに移行します。元のSQLを整理する必要があります。プラットフォームの交換では、構文の互換性を考慮し、ビジネスロジックを理解してから、HiveQLまたはSpark SQLを使用して完了する必要があります。これは大きなプロジェクトです。

Hiveはオフライン処理/バッチ処理(データのバッチを一度に処理)、リアルタイム処理/ストリーム処理に適しています。
これまでのところ:HDFS上のデータ:テキスト、圧縮、列ストレージ、Hiveはsqlを使用してhadoop上のデータを処理します。

SQL on Hadoop:Hive / Presto / Impala / Spark SQL。SQL構文にあまり互換性がない場合は、UDF関数をカスタマイズする必要があります。

Hiveの長所と短所:

利点:SQL(便利な処理、幅広いユーザー)

短所:Hiveの基盤となる実行エンジンがMapReduceである場合、その実行パフォーマンスは必ずしも高くありません。

2.3、Hiveアーキテクチャ

次の部分は、Hiveによって自動的に完成されます。

  • SQLは単なる通常の文字列であり、もう通常ではありません。SQLパーサー(SQLパーサー)を使用して、ドライバープログラムに入るときにSQLの構文を解析する必要があります->クエリオプティマイザー(>クエリオプティマイザー)->物理計画(論理実行計画)->構文がサポートしていない場合は、UDF関数をカスタマイズする必要があります-> SerDes(シリアライズ、デシリアライズ)->実行(実行)。

  • テーブルはどのDBに属しているか、テーブルはデフォルトでパス/ユーザー/ハイブ/ウェアハウスにHDFSに保存され、テーブルのフィールド情報->はMetaStoreに保存されます。この情報はMapReduceに知られている必要があります。赤いボックスのメタストアは非常に重要ですはい、メタデータはデフォルトでderbyとMySQLに保存されます。通常、derbyは使用されません。MySQLを使用します。MySQLはここで単一のポイントを使用できません。単一の障害点はサービス不能として表示され、プロダクションはMySQLマスターとバックアップメカニズムを使用しています。

Hiveアーキテクチャ

上記の画像の詳細については、

最初のレイヤーはユーザーインターフェイスレイヤーです。Linuxの黒いウィンドウを通じて、JDBC

2番目の層はドライバードライバーです。

SQL解析:SQL --> AST(antlr抽象语法树)
查询优化:逻辑/物理执行计划
UDF/SerDes:
Execution:执行

メタデータ:テーブル名、列(名前、タイプ、インデックス)、データベース、テーブルタイプ(内部および外部テーブル)、hdfs上のテーブルデータのパス:

インタビューの質問:HiveとRDBMSの関係は何ですか?

HiveとRDBMSの比較:


  • 類似点どちらもSQLを使用し、Hiveはトランザクション(通常は未使用、主な理由:Hiveはバッチ処理)を
    サポートしすべてが挿入、更新、削除をサポートします。
    オフラインHiveのデータウェアハウスの場合、書き込みコンテンツは比較的小さく、通常データをバッチでHiveにロードしてから、統計分析を実行します。

  • 相違点:質量:リレーショナルデータベースはページ上のボタンであり、ページにすぐに表示できます。Hiveのレイテンシは長くなります。また、Hiveのクラスターサイズにも反映されます(Hiveはより高いパフォーマンスでデプロイする必要があります)マシン上);

Hiveで実行してはならない操作の1つは、ページにボタンを作成し、Hiveジョブをバックグラウンドで実行することです。データ量は問題ありません。データ量が多い場合、このジョブは通常8時間または9時間実行されます。この方法は受け入れられません。 。

2.4、Hiveの挿入/更新/削除のどのバージョンが表示されるか

  • ウェブサイト:https://cwiki.apache.org/confluence/display/Hive#Home-UserDocumentation
注意すべきいくつかの点:

1.
Hive 0.14での挿入構文のサポート:2. Hive 0.14での更新構文の
サポート3. Hive 0.14での削除構文のサポート:
このHiveバージョンはApache Hiveを指します
ここに画像の説明を挿入

3. Hiveのインストールとデプロイメント

1.事前環境要件:
少なくともjdk1.7、Hadoop 2.x、メタデータ情報の保存場所に注意:MySQLを事前にデプロイする必要があります

2.インストールの2つの方法:

  • リリースバージョンをダウンロードし、インストールを解凍します。
  • Hiveソースコードからコンパイルする

ここに解凍してインストールすることを選択し
ます。Hadoopのバージョンはhadoop2.6.0-cdh5.16.2であるため、hive-1.1.0-cdh5.16.2バージョンのHiveを使用します。wgetダウンロードを使用します。wgethttp://archive.cloudera com / cdh5 / cdh / 5 / hive-1.1.0-cdh5.16.2.tar.gz、国内ダウンロードは非常に遅く、海外サーバーを購入することができます。

CDHバージョンのURLをダウンロードします。http://archive.cloudera.com/cdh5/cdh/5/

1、下载并且解压:
[hadoop@hadoop001 software]$ tar -xzvf hive-1.1.0-cdh5.16.2.tar.gz -C /home/hadoop/app/ 

2、配置环境变量:vi ~/.bashrc
export HIVE_HOME=/home/hadoop/app/hive
export PATH=${HIVE_HOME}/bin:$PATH

3、生效环境变量:
source ~/.bashrc

4、生效完后记得which一下:
[hadoop@hadoop001 app]$ which hive
~/app/hive/bin/hive
HIVE_HOMEディレクトリの説明:

bin:スクリプト
lib:依存パッケージ
conf:設定ファイル

3、配置$ HIVE_HOME / conf / hive-site.zml

  • デフォルトでは、このディレクトリには4つのファイルしかありません。新しいhive-site.xmlを作成する必要があります。ファイルの内容は次のとおりです。

  • hive-site.xml構成コンテンツの分析:接続URL(hadoop001マシンのmysqlデータベースのポート3306、ruozedata_hiveを手動で作成する必要はありません。ライブラリが存在しない場合は作成されます)、ドライバー名(mysqlドライバーパッケージ)、ユーザー名(mysqlユーザー名) 、パスワード(mysqlパスワード);

      <?xml version="1.0"?>
      <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
      
      <configuration>
      <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mysql://hadoop001:3306/ruozedata_hive?createDatabaseIfNotExist=true</value>
      </property>
      
      <property>
        <name>javax.jdo.option.ConnectionDriverName</name>
        <value>com.mysql.jdbc.Driver</value>
      </property>
    
      <property>
        <name>javax.jdo.option.ConnectionUserName</name>
        <value>root</value>
      </property>
    
      <property>
        <name>javax.jdo.option.ConnectionPassword</name>
        <value>xxxx</value>
      </property>	
    
      <property>
      	<name>hive.cli.print.current.db</name>
      	<value>true</value>
      </property>
      //打印出来当前的数据库名称
      
      <property>
      	<name>hive.cli.print.header</name>
      	<value>true</value>
      </property>
      //打印数据库表内容中的头部信息
    

4. MySQLドライバーパッケージを$ HIVE_HOME / confディレクトリにアップロードします。

  • 公式サイトのMavenウェアハウスにダウンロードして、mysql-connector-java-5.1.47.jarを使用できます。

5.ハイブ、start-dfs.shを開始する前にhdfsを開始する必要があります

3.1 Hive起動プロセスの問題

最初のエラー:SSL認証の問題
Fri Mar 27 22:18:58 CST 2020 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.

翻译:不建议不使用服务器身份验证建立SSL连接;
解决:在尾部添加useSSL=true;
<value>jdbc:mysql://hadoop001:3306/ruozedata_hive?createDatabaseIfNotExist=true&amp;useSSL=true</value>
2番目のエラー:メタデータに問題があることを提案します(ログログの表示方法を学ぶため)
hive (default)> use default;
FAILED: SemanticException org.apache.hadoop.hive.ql.metadata.HiveException: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient

まず最初に、エラーが発生した場合、Baiduのソリューションが適用できない可能性があることを知っておく必要があります。ログログ、ハイブログログのパスを表示する方法を学ぶ必要があります:/ tmp / {user name} /hive.log

1、日志路径如下:
[root@hadoop001 hadoop]# pwd
/tmp/hadoop
[root@hadoop001 hadoop]# ll
total 5508
drwx------ 2 hadoop hadoop    4096 Mar 27 22:27 34490222-9c95-43ba-a00f-e0dddee5cd14
-rw-rw-r-- 1 hadoop hadoop       0 Mar 27 22:27 34490222-9c95-43ba-a00f-e0dddee5cd146362926509336115670.pipeout
-rw-rw-r-- 1 hadoop hadoop       0 Mar 27 22:27 34490222-9c95-43ba-a00f-e0dddee5cd147456770903589387510.pipeout
-rw-rw-r-- 1 hadoop hadoop 5621893 Mar 27 22:46 hive.log

2、tail -F hive.log --> 实时查看hive.log打印出来的日志信息,发现有如下两行信息:
Caused by: java.sql.SQLException: Unable to open a test connection to the given database. JDBC url = jdbc:mysql://hadoop001:3306/ruozedata_hive?createDatabaseIfNotExist=true&useSSL=true, username = root. Terminating connection pool (set lazyInit to true if you expect to start your database after your app). Original Exception: ------
java.sql.SQLException: Access denied for user 'root'@'hadoop001' (using password: YES)

//提示访问受限,哭了,原来是账号密码设置错了;还有可能的情况,注意mysql数据库有没有允许其它地址的主机去访问它,也就是一个“%”权限。

3.2、Hiveの基本的なSQLコマンド

1、展示所有数据库:
hive (default)> show databases;
OK
database_name
default
Time taken: 0.03 seconds, Fetched: 1 row(s)

2、使用default数据库:
hive (default)> use default;
OK
Time taken: 0.025 seconds

3、展示数据表:
hive (default)> show tables;
OK
tab_name
Time taken: 0.128 seconds

4、在default数据库下创建stu表:
hive (default)> create table stu(id int,name string,age int);
OK
Time taken: 0.363 seconds

5、描述stu表:
hive (default)> desc stu;
OK
col_name        data_type       comment
id                      int                                         
name                    string                                      
age                     int                                         
Time taken: 0.175 seconds, Fetched: 3 row(s)

6、查看表结构:
- desc stu;
- desc extended stu;
- desc formatted stu;		//这种方式更好一些
hive (default)> desc formatted stu;
OK
col_name        data_type       comment
# col_name              data_type               comment             
                 
id                      int                                         
name                    string                                      
age                     int                                         
                 
# Detailed Table Information             
Database:               default                  
OwnerType:              USER                     
Owner:                  hadoop                   
CreateTime:             Fri Mar 27 23:29:21 CST 2020     
LastAccessTime:         UNKNOWN                  
Protect Mode:           None                     
Retention:              0                        
Location:               hdfs://hadoop001:9000/user/hive/warehouse/stu    
Table Type:             MANAGED_TABLE            
Table Parameters:                
        transient_lastDdlTime   1585322961          
                 
# Storage Information            
SerDe Library:          org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe       
InputFormat:            org.apache.hadoop.mapred.TextInputFormat         
OutputFormat:           org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat     
Compressed:             No                       
Num Buckets:            -1                       
Bucket Columns:         []                       
Sort Columns:           []                       
Storage Desc Params:             
        serialization.format    1                   
Time taken: 0.138 seconds, Fetched: 29 row(s)

6、展示建表语句:show create table stu;
hive (default)> show create table stu;
OK
createtab_stmt
CREATE TABLE `stu`(
  `id` int, 
  `name` string, 
  `age` int)
ROW FORMAT SERDE 
  'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe' 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.mapred.TextInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
  'hdfs://hadoop001:9000/user/hive/warehouse/stu'
TBLPROPERTIES (
  'transient_lastDdlTime'='1585322961')
Time taken: 0.133 seconds, Fetched: 14 row(s)

7、插入语句:千万不要这么用(仅仅做演示)
insert into stu values(1,'john',24);

8、select * from stu;
データを挿入するのが最も簡単な場合でも、mapreduceジョブを実行するため、挿入を使用しないでください。
1、insert插入数据,还会跑mapreduce
hive (default)> insert into stu values(1,"john",24);
Query ID = hadoop_20200327233535_a0100136-77e5-4d07-ad69-de835ec91403
Total jobs = 3
Launching Job 1 out of 3
Number of reduce tasks is set to 0 since there's no reduce operator

3.3。Hiveのいくつかのパラメーターとコマンド

1. hdfsのHiveストレージディレクトリ:
作成したstu テーブル、hdfsのデフォルトのストレージディレクトリは次のとおりです:場所:hdfs:// hadoop001:9000 / user / hive / Warehouse / stu

では、このhdfsのデフォルトのストレージディレクトリを変更するにはどうすればよいでしょうか。

  • このページは次のとおりです。https://cwiki.apache.org/confluence/display/Hive/Configuration+Properties

見つかったストレージディレクトリのパラメータは次のとおりです。

Hive.metastore.warehouse.dir
Default Value: /user/hive/warehouse
Added In: Hive 0.2.0
Location of default database for the warehouse.

2. Hiveログファイルストレージディレクトリ:

1、路径如下:
[hadoop@hadoop001 conf]$ pwd
/home/hadoop/app/hive/conf

2、拷贝一份配置文件:
[hadoop@hadoop001 conf]$ cp hive-log4j.properties.template hive-log4j.properties

3、编辑这份配置文件:vi hive-log4j.properties
hive.log.dir=${java.io.tmpdir}/${user.name}
hive.log.file=hive.log

因为linux定期清理规则,所以/tmp下的文件建议进行修改:
hive.log.dir=/home/hadoop/tmp/hive

3. Hive構成プロパティー:
グローバル:$ HIVE_HOME / conf / hive-site.xml

一時的/現在のセッション:
現在の属性を表示:キーを
設定現在の属性を設定:キーを設定=値

1、查看这个显示数据库的参数开关是否打开,发现未打开
hive> set hive.cli.print.current.db;
hive.cli.print.current.db=false

2、显示数据库的参数打开:
hive> set hive.cli.print.current.db=true;
hive (default)> 

//注意:临时session只对当前窗口有效,新开窗口后就是无效的

4. Hiveでファイルストレージパスを表示します。

hive (default)> dfs -ls /user/hive/warehouse;
Found 1 items
drwx------   - hadoop supergroup          0 2020-03-27 23:36 /user/hive/warehouse/stu

3.4、Hiveのインタラクティブコマンド

ハイブコマンドのヘルプを表示します。

[hadoop@hadoop001 conf]$ hive -help
which: no hbase in (/home/hadoop/app/hive/bin:/home/hadoop/app/hadoop/bin:/home/hadoop/app/hadoop/sbin:/usr/java/jdk1.8.0_45/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/hadoop/bin)
20/03/28 00:13:46 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
usage: hive
 -d,--define <key=value>          Variable subsitution to apply to hive
                                  commands. e.g. -d A=B or --define A=B
    --database <databasename>     Specify the database to use
 -e <quoted-query-string>         SQL from command line
 -f <filename>                    SQL from files
 -H,--help                        Print help information
    --hiveconf <property=value>   Use value for given property
    --hivevar <key=value>         Variable subsitution to apply to hive
                                  commands. e.g. --hivevar A=B
 -i <filename>                    Initialization SQL file
 -S,--silent                      Silent mode in interactive shell
 -v,--verbose                     Verbose mode (echo executed SQL to the
                                  console)
1. Hive -eを使用すると、SQLステートメントに従って、hiveコマンドラインを入力せずにクエリを実行できます。
  • hive -e“ select * from stu;”

      [hadoop@hadoop001 conf]$ hive -e "select * from stu;"
      which: no hbase in (/home/hadoop/app/hive/bin:/home/hadoop/app/hadoop/bin:/home/hadoop/app/hadoop/sbin:/usr/java/jdk1.8.0_45/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/hadoop/bin)
      20/03/28 00:13:04 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
      
      Logging initialized using configuration in file:/home/hadoop/app/hive-1.1.0-cdh5.16.2/conf/hive-log4j.properties
      OK
      stu.id  stu.name        stu.age
      1       john    24
      Time taken: 6.21 seconds, Fetched: 1 row(s)
    
Hive -f:指定されたファイルを実行します(ファイルの内容はSQLステートメントである必要があります)
1、在ruoze.log中写入如下这句话:
[hadoop@hadoop001 data]$ cat ruoze.log 
select * from stu;

2、使用hive -f运行:
[hadoop@hadoop001 data]$ hive -f ruoze.log 
which: no hbase in (/home/hadoop/app/hive/bin:/home/hadoop/app/hadoop/bin:/home/hadoop/app/hadoop/sbin:/usr/java/jdk1.8.0_45/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/hadoop/bin)
20/03/28 00:17:36 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

Logging initialized using configuration in file:/home/hadoop/app/hive-1.1.0-cdh5.16.2/conf/hive-log4j.properties
OK
stu.id  stu.name        stu.age
1       john    24
Time taken: 5.523 seconds, Fetched: 1 row(s)
拡張:Hiveベースのオフライン統計/データウェアハウス
  • SQLをHiveと統合し、SQLをシェルスクリプトにカプセル化し、hive -e "query sql ..."を使用する方法
  • スケジュールされたスケジューリング:crontab

3.5、Hiveでのデータ抽象化

Hiveのテーブル(stu)はデータベースに属している必要があります(デフォルト)

ここに画像の説明を挿入

質問:バケットはHiveファイルまたはフォルダーにありますか?

4、HiveでのDDL操作

データベースDatabaseには0〜N個のテーブルが含まれ、各dbはHDFS上のフォルダーに対応しています。

データベースの作成構文:
1、官方提供的语法:
CREATE (DATABASE|SCHEMA) [IF NOT EXISTS] database_name
  [COMMENT database_comment]
  [LOCATION hdfs_path]
  [WITH DBPROPERTIES (property_name=property_value, ...)];

2、小括号()有竖线是二选一,中括号[]是可有可无;测试使用如下语句创建数据库:
create database ruozedata_hive;

3、数据库创建好后去hdfs目录上查询目录,发现目录的命名就是:数据库名字加上后缀db
[hadoop@hadoop001 data]$ hdfs dfs -ls /user/hive/warehouse/
20/03/28 00:37:04 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Found 2 items
drwx------   - hadoop supergroup          0 2020-03-28 00:36 /user/hive/warehouse/ruozedata_hive.db
drwx------   - hadoop supergroup          0 2020-03-27 23:36 /user/hive/warehouse/stu

4、建议创建数据库的时候加上if not exists;
hive (default)> create database ruozedata_hive;
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. Database ruozedata_hive already exists
hive (default)> create database IF NOT EXISTS ruozedata_hive;
OK
Time taken: 0.014 seconds

2.データベースの作成時にデフォルトの/ user / hive / warehosueディレクトリを使用する代わりに、ディレクトリを自分で指定します。

  • 存在しない場合はデータベースを作成するruozedata_hive LOCATION '/ wordcount'

3.自分でディレクトリを指定することと、デフォルトのストレージディレクトリを使用して表示することの違い:

1、ruozedata_hive2是自己指定的目录,这个库是看不见的
hive (ruozedata_hive2)> desc database ruozedata_hive2;
OK
db_name comment location        owner_name      owner_type      parameters
ruozedata_hive2         hdfs://hadoop001:9000/wordcount hadoop  USER
Time taken: 0.019 seconds, Fetched: 1 row(s)

2、ruozedata_hive3是使用的默认目录:
hive (ruozedata_hive2)> desc database ruozedata_hive3;
OK
db_name comment location        owner_name      owner_type      parameters
ruozedata_hive3         hdfs://hadoop001:9000/user/hive/warehouse/ruozedata_hive3.db  hadoop   USER
Time taken: 0.017 seconds, Fetched: 1 row(s)

4. ruozedata_hive3を作成するときに属性を追加します。

hive (ruozedata_hive2)> create database if not exists ruozedata_hive3 COMMENT 'this is your first created database' WITH DBPROPERTIES('creator'='pk','date'='2020-03-29');
OK
Time taken: 0.049 seconds
hive (ruozedata_hive2)> desc database ruozedata_hive3;
OK
db_name comment location        owner_name      owner_type      parameters
ruozedata_hive3 this is your first created database     hdfs://hadoop001:9000/user/hive/warehouse/ruozedata_hive3.db   hadoop  USER
Time taken: 0.056 seconds, Fetched: 1 row(s)
データベースの変更:
ALTER (DATABASE|SCHEMA) database_name SET DBPROPERTIES (property_name=property_value, ...);   -- (Note: SCHEMA added in Hive 0.14.0)
 
ALTER (DATABASE|SCHEMA) database_name SET OWNER [USER|ROLE] user_or_role;   -- (Note: Hive 0.13.0 and later; SCHEMA added in Hive 0.14.0)
  
ALTER (DATABASE|SCHEMA) database_name SET LOCATION hdfs_path; -- (Note: Hive 2.2.1, 2.4.0 and later)
データベースの削除:
1、在ruozedata_hive3数据库下创建测试表test
hive (ruozedata_hive2)> use ruozedata_hive3;
OK
Time taken: 0.012 seconds
hive (ruozedata_hive3)> create table test(id int,name string);
OK
Time taken: 0.16 seconds
hive (ruozedata_hive3)> show tables;
OK
tab_name
test
Time taken: 0.026 seconds, Fetched: 1 row(s)

2、此时ruozedata_hive3数据库下存在数据表test,我们使用drop删除,提示数据库下存在表就无法删除:
hive (ruozedata_hive3)> drop database if exists ruozedata_hive3;
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. InvalidOperationException(message:Database ruozedata_hive3 is not empty. One or more tables exist.)

3、直接加上cascade,就是级联删除,直接删除数据库下的所有表:
hive (ruozedata_hive3)> drop database if exists ruozedata_hive3 cascade;
OK
Time taken: 1.783 seconds

CASCADE:1 dbから多くのテーブル

本番環境ではCASCADEを慎重に使用してください

4.1、Hiveの基本的なデータ型

データ型:
HDFS上のファイルの場合:文字列型

データ型の公式Webサイトページ:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Types

1.数値型の場合:より高い精度を必要とするint、bigint、float、double、およびbankプロジェクトは、decimalを使用します

2.ブール型boolean:true / false-> PKプロダクションでブール型をTINYINTに置き換えます

3.文字列タイプ:文字列生成の少なくとも90%がこれを使用します

4.日付タイプ:日付、タイムスタンプ...->文字列タイプで置き換えることもできます

4.2 Hiveのスプリッター

スプリッター:

デリミタ コード 解説
^ A \ 001 フィールドとフィールド区切り
\ n \ n 行間区切り
^ B \ 002 ARRAY / STRUCT(Hiveの複雑なデータ型)
^ C \ 003 MAPのキー/値(Hiveの複雑なデータ型)
我们可以自己定义分割符,但是分割符别与字段内容相重合
1,pk,30
1$$$pk$$$30


1、create table stu2(id int, name string, age int) row format delimited fields terminated by ',';

2、暂时不用load data的方式,采用insert插入的方式:
insert into stu2 values(1,'john','24');

3、查询数据是否写进去了:
hive (ruozedata_hive)> select * from stu2;
OK
stu2.id stu2.name       stu2.age
1       john    24
Time taken: 0.065 seconds, Fetched: 1 row(s)

4、直接查看hdfs目录上的文件内容是不是以逗号分割:
hive (ruozedata_hive)> dfs -ls /user/hive/warehouse/ruozedata_hive.db/stu2;
Found 1 items
-rwxrwxrwx   1 hadoop supergroup         10 2020-03-28 14:47 /user/hive/warehouse/ruozedata_hive.db/stu2/000000_0
hive (ruozedata_hive)> dfs -cat /user/hive/warehouse/ruozedata_hive.db/stu2/000000_0;
1,john,24
Hiveクライアントで直接表示しない場合は、次の方法で表示することもできます。
1、把这张表的数据下载到data目录下:
[hadoop@hadoop001 data]$ hdfs dfs -get /user/hive/warehouse/ruozedata_hive.db/stu2/000000_0 ./
20/03/28 14:52:36 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
[hadoop@hadoop001 data]$ ll
total 44
-rw-r--r-- 1 hadoop hadoop    10 Mar 28 14:52 000000_0
-rw------- 1 hadoop hadoop 32768 Mar 26 13:39 15074
-rw-r--r-- 1 hadoop hadoop    14 Mar 28 14:11 ruoze.log
-rw-rw-r-- 1 hadoop hadoop    35 Mar 24 23:23 wordcount.log

2、使用cat查看一下内容:
[hadoop@hadoop001 data]$ cat 000000_0
1,john,24

5.関与する可能性のあるインタビューの質問

1.ハイブは挿入をサポートしますか?

2. HiveQLとSQLの関係は何ですか?Hiveの理解を教えてください。

元の記事を23件公開しました 賞賛されました0 訪問数755

おすすめ

転載: blog.csdn.net/SparkOnYarn/article/details/105140753