主頁 >  其他 > 大資料開發基礎入門與專案實戰(三)Hadoop核心及生態圈技術堆疊之3.資料倉庫工具Hive基礎

大資料開發基礎入門與專案實戰(三)Hadoop核心及生態圈技術堆疊之3.資料倉庫工具Hive基礎

2021-11-08 09:52:34 其他

文章目錄

  • 1.Hive概述
    • (1)數倉工具Hive的產生背景
    • (2)數倉工具Hive與RDBMS對比
    • (3)數倉工具Hive的優缺點
    • (4)數倉工具Hive的架構原理
  • 2.Hive安裝與配置
    • (1)安裝準備
    • (2)安裝MySQL元資料庫
    • (3)Hive的安裝與配置
    • (4)Hive安裝的注意事項
    • (5)引數配置
  • 3.資料型別與檔案格式
    • (1)基本資料型別及轉換
    • (2)集合資料型別
    • (3)Hive文本檔案資料編碼及讀時模式

1.Hive概述

(1)數倉工具Hive的產生背景

前面已經詳細講解了Hadoop框架的三大核心:

  • HDFS => 海量資料的存盤

  • MapReduce => 海量資料的分析和處理

  • Yarn => 集群資源的管理和作業調度

可以說,在面對海量資料時,已經有了一個相對完整的解決方案,

但是直接使用MapReduce處理大資料,存在以下問題:

  • MapReduce開發難度大,學習成本高

  • HDFS檔案沒有欄位名、沒有資料型別,不方便對資料進行有效的管理

  • 使用MapReduce框架開發,專案周期長、成本高

Hive是基于Hadoop的一個資料倉庫工具,可以將結構化的資料檔案 映射為一張表(類似于RDBMS中的表),并提供類SQL查詢功能;Hive是由Facebook開源,用于解決海量結構化日志的資料統計,

Hive本質是將SQL轉換為MapReduce的任務進行運算;

底層仍由HDFS來提供資料存盤;

可以將Hive理解為一個將SQL轉換為MapReduce任務的工具,

資料倉庫(Data Warehouse)由資料倉庫之父比爾·恩門于1991年提出,是一個面向主題的、集成的、相對穩定的、反映歷史變化的 資料集合,

資料倉庫的目的:

構建面向分析的、集成的資料集合;

為企業提供決策支持,

資料倉庫本身不產生資料,資料來源于外部;

數倉存盤了大量資料,對這些資料的分析和處理不可避免地用到Hive,

(2)數倉工具Hive與RDBMS對比

由于Hive采用了類似SQL的查詢語言HQL(Hive Query Language),因此很容易將Hive理解為資料庫,其實從結構上來看,Hive和傳統的關系資料庫除了擁有類似的查詢語言,再無類似之處,

兩者的對比如下:

  • 查詢語言相似(同)

????HQL與SQL高度相似,

????由于SQL被廣泛的應用在資料倉庫中,因此,專門針對Hive的特性設計了類SQL的查詢語言HQL,熟悉SQL開發的開發者可以很方便的使用Hive進行開發,

  • 資料規模(異)

????Hive存盤海量資料;RDBMS只能處理有限的資料集,

????由于Hive建立在集群上并可以利用MapReduce進行并行計算,因此可以支持很大規模的資料,

????而RDBMS可以支持的資料規模較小,

  • 執行引擎(異)

????Hive的引擎是MR/Tez/Spark/Flink;RDBMS使用自己的執行引擎,

????Hive中大多數查詢的執行是通過Hadoop提供的MapReduce來實作的,

????而RDBMS通常有自己的執行引擎,

  • 資料存盤(異)

????Hive保存在HDFS上;RDBMS保存在本地檔案系統或裸設備,
????

????Hive的資料都是存盤在HDFS中的,

????而RDBMS是將資料保存在本地檔案系統或裸設備中,

  • 執行速度(異)

????Hive相對慢(MR/資料量);RDBMS相對快,

????Hive存盤的資料量大,在查詢資料的時候,通常沒有索引,需要掃描整個表;加之Hive使用MapReduce作為執行引擎,這些因素都會導致較高的延遲,

????而RDBMS對資料的訪問通常是基于索引的,執行延遲較低,當然這個低是有條件的,即資料規模較小,當資料規模大到超過資料庫的處理能力的時候,Hive的并行計算顯然能體現出并行的優勢,

  • 可擴展性(異)

????Hive支持水平擴展;通常RDBMS支持垂直擴展,對水平擴展不友好,
????

????Hive建立在Hadoop之上,其可擴展性與Hadoop的可擴展性是一致的(Hadoop集群規模可以輕松超過1000個節點),

????而RDBMS由于ACID語意的嚴格限制,擴展行非常有限,目前最先進的并行資料庫Oracle在理論上的擴展能力也只有100臺左右,

  • 資料更新(異)

????Hive對資料更新不友好;RDBMS支持頻繁、快速資料更新,
????

????Hive是針對資料倉庫應用設計的,資料倉庫的內容是讀多寫少的,因此,Hive中不建議對資料的改寫,所有的資料都是在加載的時候確定好的,

????而RDBMS中的資料需要頻繁、快速地進行更新,

(3)數倉工具Hive的優缺點

Hive的優點如下:

  • 學習成本低

????Hive提供了類似SQL的查詢語言,開發人員能快速上手,

  • 處理海量資料

????底層執行的是MapReduce任務,

  • 系統可以水平擴展

????底層基于Hadoop,

  • 功能可以擴展

????Hive允許用戶自定義函式,

  • 良好的容錯性

????某個節點發生故障,HQL仍然可以正常完成,

  • 統一的元資料管理

????元資料包括有哪些表、表有什么欄位、欄位是什么型別等內容,

Hive的缺點如下:

  • HQL表達能力有限

  • 迭代計算無法表達

  • Hive的執行效率不高(基于MR的執行引擎)

  • Hive自動生成的MapReduce作業,某些情況下不夠智能

  • Hive的調優困難

(4)數倉工具Hive的架構原理

Hive的架構圖如下:

在這里插入圖片描述

其中:

  1. 用戶介面有3種:

????- CLI(Common Line Interface):Hive的命令列,用于接收HQL,并回傳結果;

????- JDBC/ODBC:是指Hive的java實作,與傳統資料庫JDBC類似;

????- WebUI:是指可通過瀏覽器訪問Hive,

  1. Thrift Server

????Hive可選組件,是一個軟體框架服務,允許客戶端使用包括Java、C++、Ruby和其他很多種語言,通過編程的方式遠程訪問Hive,

  1. 元資料管理(MetaStore)

????Hive將元資料存盤在關系資料庫中(如MySQL、derby);

????Hive的元資料包括:資料庫名、表名及型別、欄位名稱及資料型別、資料所在位置等,

  1. 驅動程式(Driver)

????- 決議器(SQLParser)

????????使用第三方工具(antlr)將HQL字串轉換成抽象語法樹(AST);對AST進行語法分析,比如欄位是否存在、SQL語意是否有誤、表是否存在,

????- 編譯器(Compiler)

????????將抽象語法樹編譯生成邏輯執行計劃,

????- 優化器(Optimizer)

????????對邏輯執行計劃進行優化,減少不必要的列、使用磁區等,

????- 執行器(Executor)

????????把邏輯執行計劃轉換成可以運行的物理計劃,

2.Hive安裝與配置

(1)安裝準備

與Hive相關的3個網站如下:

Hive官網:http://hive.apache.org;
下載網址:http://archive.apache.org/dist/hive/;
檔案網址:https://cwiki.apache.org/confluence/display/Hive/LanguageManual,

安裝Hive的前提:

準備好3臺虛擬機,同時安裝Hadoop,前面的階段已經完成該作業,

需要安裝的軟體包括Hive 2.3.7MySQL 5.7 (可以選擇5.7.26或5.7.35),

這里之所以需要安裝MySQL,是因為:

Hive的元資料默認存盤在自帶的 derby 資料庫中;

derby是Java語言開發的占用資源少,但是只支持單行程、單用戶,僅僅適用于個人的測驗;

生產中多采用MySQL,

各個節點安裝軟體的分布如下:

軟體node01node02node03
Hadoop
MySQL
Hive

需要準備的安裝包包括:

  • Hive安裝包

????可點擊http://archive.apache.org/dist/hive/hive-2.3.7/apache-hive-2.3.7-bin.tar.gz下載,

  • MySQL安裝包

????可點擊https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.26-1.el7.x86_64.rpm-bundle.tar下載,

  • MySQL的JDBC驅動程式

????可點擊https://cdn.mysql.com/archives/mysql-connector-java-5.1/mysql-connector-java-5.1.46.tar.gz下載,

這些安裝包可以在本地下載再通過工具上傳到虛擬機中,也可以在虛擬機上通過wget命令進行下載,

(2)安裝MySQL元資料庫

MySQL的安裝步驟一般如下:

  1. 環境準備

????1. 洗掉有沖突的依賴包

????2. 安裝必須的依賴包

  1. 安裝MySQL

  2. 在資料庫中創建hive用戶

因為前2步已經在2.6 Linux服務器中執行過,因此可以省略,直接創建hive用戶,

為了在開發階段密碼便于記憶和使用,在創建用戶時可以設定較簡單的密碼,此時就需要在創建用戶前修改密碼驗證策略和長度,如下:

mysql> set global validate_password_policy=0;
Query OK, 0 rows affected (0.00 sec)

mysql> set global validate_password_length=4;
Query OK, 0 rows affected (0.00 sec)


其中,validate_password_policy 表示密碼密碼策略,可配置的值如下:

  • 0 or LOW

????僅需需符合密碼長度,由引數validate_password_length指定,默認為8,

  • 1 or MEDIUM

????滿足LOW策略,同時還需滿足至少有1個數字、小寫字母、大寫字母和特殊字符,

  • 2 or STRONG

????滿足MEDIUM策略,同時密碼不能存在字典檔案(dictionary file)中,

說明:

個人開發環境,出于方便的目的可以設定比較簡單的密碼;生產環境一定要設定復雜密碼

再創建hive用戶,如下:

-- 創建用戶設定密碼
mysql> create user 'hive'@'%' identified by 'hive';
Query OK, 0 rows affected (0.02 sec)
-- 授權
mysql> grant all on *.* to 'hive'@'%';
Query OK, 0 rows affected (0.00 sec)
-- 重繪
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)


再退出MySQL使用hive用戶登錄驗證,如下:

[root@node03 ~]$ mysql -u hive -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 5.7.35 MySQL Community Server (GPL)

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| java_demo          |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

mysql> 

可以看到,成功登錄并進行了查看,

(3)Hive的安裝與配置

安裝和配置Hive的步驟如下:

(1)下載Hive軟體,并解壓縮

[root@node03 ~]$ cd /opt/packages/
[root@node03 packages]$ tar -xzvf apache-hive-2.3.7-bin.tar.gz -C ../software/
apache-hive-2.3.7-bin/LICENSE
apache-hive-2.3.7-bin/RELEASE_NOTES.txt
apache-hive-2.3.7-bin/NOTICE
apache-hive-2.3.7-bin/binary-package-licenses/com.thoughtworks.paranamer-LICENSE
apache-hive-2.3.7-bin/binary-package-licenses/org.codehaus.janino-LICENSE
...
apache-hive-2.3.7-bin/hcatalog/share/webhcat/svr/lib/wadl-resourcedoc-doclet-1.4.jar
apache-hive-2.3.7-bin/hcatalog/share/webhcat/svr/lib/commons-exec-1.1.jar
apache-hive-2.3.7-bin/hcatalog/share/webhcat/svr/lib/jetty-all-server-7.6.0.v20120127.jar
apache-hive-2.3.7-bin/hcatalog/share/webhcat/svr/lib/jul-to-slf4j-1.7.10.jar
apache-hive-2.3.7-bin/hcatalog/share/webhcat/java-client/hive-webhcat-java-client-2.3.7.jar
[root@node03 packages]$ cd ../software/
[root@node03 software]$ mv apache-hive-2.3.7-bin/ hive-2.3.7/
[root@node03 software]$ ls
hadoop-2.9.2  hive-2.3.7  java  tomcat
[root@node03 software]$ cd hive-2.3.7/
[root@node03 hive-2.3.7]$ pwd
/opt/software/hive-2.3.7


可以看到,最后得到了Hive的安裝路徑,

(2)修改環境變數

編輯/etc/profile檔案vim /etc/profile,添加如下內容:

# HIVE_HOME
export HIVE_HOME=/opt/software/hive-2.3.7
export PATH=$PATH:$HIVE_HOME/bin

保存退出后,執行source /etc/profile使環境變數生效,如下:

[root@node03 hive-2.3.7]$ source /etc/profile
[root@node03 hive-2.3.7]$ hive --version
Hive 2.3.7
Git git://Alans-MacBook-Air.local/Users/gates/git/hive -r xxxxxd88304034393d68cc31a95be24f5aaxxxxx
Compiled by gates on Tue Apr 7 12:42:45 PDT 2020
From source with checksum xxxxxe8ac4737126b00a1a47f66xxxxx

可以看到,環境變數配置生效,獲取到了Hive的版本資訊,

(3)修改 Hive 配置

進入Hive安裝目錄下的conf目錄:

[root@node03 hive-2.3.7]$ cd conf/
[root@node03 conf]$ ls
beeline-log4j2.properties.template    ivysettings.xml
hive-default.xml.template             llap-cli-log4j2.properties.template
hive-env.sh.template                  llap-daemon-log4j2.properties.template
hive-exec-log4j2.properties.template  parquet-logging.properties
hive-log4j2.properties.template


并創建檔案hive-site.xml,添加內容如下:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
    <!-- hive元資料的存盤位置 -->
    <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mysql://node03:3306/hivemetadata?createDatabaseIfNotExist=true&amp;useSSL=false</value>
        <description>JDBC connect string for a JDBC metastore
        </description>
    </property>
    <!-- 指定驅動程式 -->
    <property>
        <name>javax.jdo.option.ConnectionDriverName</name>
        <value>com.mysql.jdbc.Driver</value>
        <description>Driver class name for a JDBC metastore
        </description>
    </property>
    <!-- 連接資料庫的用戶名 -->
    <property>
        <name>javax.jdo.option.ConnectionUserName</name>
        <value>hive</value>
        <description>username to use against metastore database
        </description>
    </property>
    <!-- 連接資料庫的口令 -->
    <property>
        <name>javax.jdo.option.ConnectionPassword</name>
        <value>hive</value>
        <description>password to use against metastore database
        </description>
    </property>
</configuration>

退出并保存;

先通過javax.jdo.option.ConnectionURL引數指定了Hive元資料保存的資料庫的位置和資料庫,如果不存在則創建,同時指定連接時不加密,如果沒有useSSL=false會有大量警告, &amp;表示連接符&

再通過javax.jdo.option.ConnectionDriverName引數指定驅動程式;

同時指定登錄到MySQL的用戶名和密碼,

(4)準備MySQL的JDBC驅動程式

將MySQL的驅動程式移動到Hvie安裝目錄下的lib目錄下,如下:

[root@node03 conf]$ cd ..
[root@node03 hive-2.3.7]$ pwd
/opt/software/hive-2.3.7
[root@node03 hive-2.3.7]$ mv ../../packages/mysql-connector-java-5.1.46.jar lib/
[root@node03 hive-2.3.7]$ ls lib/ | grep mysql
mysql-connector-java-5.1.46.jar
mysql-metadata-storage-0.9.2.jar


(5)初始化元資料庫

執行schematool -dbType mysql -initSchema命令初始化源資料庫,其中-dbType選項用于指定資料庫,這里即MySQL,-initSchema用于指定執行的操作為初始化Schema,

如下:

[root@node03 hive-2.3.7]$ cd bin/
[root@node03 bin]$ ls
beeline  ext  hive  hive-config.sh  hiveserver2  hplsql  metatool  schematool
[root@node03 bin]$ schematool -dbType mysql -initSchema
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/opt/software/hive-2.3.7/lib/log4j-slf4j-impl-2.6.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/opt/software/hadoop-2.9.2/share/hadoop/common/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]
Metastore connection URL:        jdbc:mysql://node03:3306/hivemetadata?createDatabaseIfNotExist=true&useSSL=false
Metastore Connection Driver :    com.mysql.jdbc.Driver
Metastore connection User:       hive
Starting metastore schema initialization to 2.3.0
Initialization script hive-schema-2.3.0.mysql.sql
Initialization script completed
schemaTool completed

修改完成后,查看資料庫:

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| hivemetadata       |
| java_demo          |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
6 rows in set (0.01 sec)

mysql> use hivemetadata;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+---------------------------+
| Tables_in_hivemetadata    |
+---------------------------+
| AUX_TABLE                 |
| BUCKETING_COLS            |
| CDS                       |
| COLUMNS_V2                |
| COMPACTION_QUEUE          |
| COMPLETED_COMPACTIONS     |
| COMPLETED_TXN_COMPONENTS  |
| DATABASE_PARAMS           |
| DBS                       |
| DB_PRIVS                  |
| DELEGATION_TOKENS         |
| FUNCS                     |
| FUNC_RU                   |
| GLOBAL_PRIVS              |
| HIVE_LOCKS                |
| IDXS                      |
| INDEX_PARAMS              |
| KEY_CONSTRAINTS           |
| MASTER_KEYS               |
| NEXT_COMPACTION_QUEUE_ID  |
| NEXT_LOCK_ID              |
| NEXT_TXN_ID               |
| NOTIFICATION_LOG          |
| NOTIFICATION_SEQUENCE     |
| NUCLEUS_TABLES            |
| PARTITIONS                |
| PARTITION_EVENTS          |
| PARTITION_KEYS            |
| PARTITION_KEY_VALS        |
| PARTITION_PARAMS          |
| PART_COL_PRIVS            |
| PART_COL_STATS            |
| PART_PRIVS                |
| ROLES                     |
| ROLE_MAP                  |
| SDS                       |
| SD_PARAMS                 |
| SEQUENCE_TABLE            |
| SERDES                    |
| SERDE_PARAMS              |
| SKEWED_COL_NAMES          |
| SKEWED_COL_VALUE_LOC_MAP  |
| SKEWED_STRING_LIST        |
| SKEWED_STRING_LIST_VALUES |
| SKEWED_VALUES             |
| SORT_COLS                 |
| TABLE_PARAMS              |
| TAB_COL_STATS             |
| TBLS                      |
| TBL_COL_PRIVS             |
| TBL_PRIVS                 |
| TXNS                      |
| TXN_COMPONENTS            |
| TYPES                     |
| TYPE_FIELDS               |
| VERSION                   |
| WRITE_SET                 |
+---------------------------+
57 rows in set (0.00 sec)

mysql> 

可以看到,在執行初始化元資料庫的命令后,創建了hivemetadata資料庫,并在資料庫中創建了保存元資料所需要的表,

(6)執行命令啟動Hive

啟動Hive服務之前,請先啟動HDFS、Yarn的服務

如果沒有啟動HDFS,則需要在node01節點執行start-dfs.sh啟動HDFS;

如果沒有啟動Yarn,則需要在node03節點執行start-yarn.sh啟動Yarn,

然后等待一段時間,等待HDFS集群度過安全模式的時間(默認為30秒,不能進行操作),再啟動Hive,

啟動Hive直接使用命令hive即可,如下:

[root@node03 ~]$ hive
which: no hbase in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/opt/software/java/jdk1.8.0_231/bin:/opt/software/hadoop-2.9.2/bin:/opt/software/hadoop-2.9.2/sbin:/opt/software/hive-2.3.7/bin:/root/bin)
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/opt/software/hive-2.3.7/lib/log4j-slf4j-impl-2.6.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/opt/software/hadoop-2.9.2/share/hadoop/common/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]

Logging initialized using configuration in jar:file:/opt/software/hive-2.3.7/lib/hive-common-2.3.7.jar!/hive-log4j2.properties Async: true
Hive-on-MR is deprecated in Hive 2 and may not be available in the future versions. Consider using a different execution engine (i.e. spark, tez) or using Hive 1.X releases.
hive> show databases;
OK
default
Time taken: 6.42 seconds, Fetched: 1 row(s)
hive> create database test1;
OK
Time taken: 0.315 seconds
hive> show databases;
OK
default
test1
Time taken: 0.039 seconds, Fetched: 2 row(s)
hive> use test1;
OK
Time taken: 0.262 seconds
hive> 


可以看到,啟動Hive成功,與MySQL命令列類似,同時自帶默認資料庫default,

(4)Hive安裝的注意事項

可在 hive-site.xml 中增加一些常用配置,方便使用,例如設定資料在HDFS中的存盤位置、Hive命令列中顯示當前庫、顯示表頭資訊和本地模式等,在/opt/software/hive-2.3.7/conf目錄下編輯hive-site.xml,如下:

<!-- 資料存盤位置 -->
<property>
    <!-- 資料默認的存盤位置(HDFS) -->
    <name>hive.metastore.warehouse.dir</name>
    <value>/user/hive/warehouse</value>
    <description>location of default database for the warehouse</description>
</property>
<!-- 顯示當前庫 -->
<property>
    <!-- 在命令列中,顯示當前操作的資料庫 -->
    <name>hive.cli.print.current.db</name>
    <value>true</value>
    <description>Whether to include the current database in the Hive prompt.</description>
</property>
<!-- 顯示表頭屬性 -->
<property>
    <!-- 在命令列中,顯示資料的表頭 -->
    <name>hive.cli.print.header</name>
    <value>true</value>
</property>
<!-- 本地模式 -->
<property>
    <!-- 操作小規模資料時,使用本地模式,提高效率 -->
    <name>hive.exec.mode.local.auto</name>
    <value>true</value>
    <description>Let Hive determine whether to run in local mode automatically</description>
</property>

其中,本地模式的含義是:當 Hive 的輸入資料量非常小時,Hive通過本地模式在單臺機器上處理所有的任務,對于小資料集,執行時間會明顯被縮短,

當一個job滿足如下條件才能真正使用本地模式:

  • job的輸入資料量必須小于引數hive.exec.mode.local.auto.inputbytes.max的值(默認是128MB)

  • job的map數必須小于引數hive.exec.mode.local.auto.tasks.max的值(默認是4)

  • job的reduce數必須為0或者1

此時再重新啟動Hive,如下:

hive (default)> show databases;
OK
database_name
default
test1
Time taken: 8.184 seconds, Fetched: 2 row(s)
hive (default)> use test1;
OK
Time taken: 0.094 seconds
hive (test1)> 

可以看到,此時顯示了正在使用的資料庫,

同時從前面可以看到,在啟動Hive的時候,會提示Hive和Hadoop中SLF4J(一個日志標準)的版本沖突的問題,此時可以洗掉Hive中的SLF4J、而保留Hadoop中的版本,此時Hive在啟動時就會自動使用Hadoop中的版本,根據提示資訊中的路徑來洗掉即可,例如rm -f /opt/software/hive-2.3.7/lib/log4j-slf4j-impl-2.6.2.jar,洗掉后再重新執行就不會有SLF4J沖突的提示了,

Hive的日志默認存放在/tmp/root目錄下(root表示當前用戶名),可以查看如下:

[root@node03 ~]$ ll -ht /tmp/root/
總用量 20K
-rw-r--r-- 1 root root 4.8K 921 09:13 hive.log
-rw-r--r-- 1 root root 2.9K 921 09:12 hive.log.2021-09-20
-rw-r--r-- 1 root root 6.3K 920 22:06 stderr

在遇到錯誤、需要排查時就可以查看這個路徑下的hive.log檔案,

這個位置是在Hive安裝路徑下的conf目錄下的hive-log4j2.properties.template檔案定義的,也可以修改,hive-log4j2.properties.template是一個模板檔案,可以cp hive-log4j2.properties.template hive-log4j2.properties新建一個檔案,并在hive-log4j2.properties中修改,其中property.hive.log.dir = {sys:java.io.tmpdir}/{sys:user.name},可以根據自己的需要進行修改,

在實際的開發和使用程序中,要對埠號敏感,例如前面啟動Hive使如果報錯和9000埠相關,說明可能是HDFS未啟動或者有例外,因為之前在配置HDFS時,core-site.xml檔案中設定的fs.defaultFS值就是hdfs://node01:9000(埠指定9000),如果這里不指定9000,就會使用默認的埠,Hadoop 2.x 中 NameNode RPC預設的埠號是8020,

在實際的生產程序中,可能需要使用第三方賬號,用于保證安全性,因此需要添加第三方用戶,

如下:

# 添加組
[root@node03 ~]$ groupdel hadoop
# 添加用戶
[root@node03 ~]$ useradd -m hadoop -g hadoop -s /bin/bash
# 設定用戶密碼
[root@node03 ~]$ passwd hadoop
更改用戶 hadoop 的密碼 ,
新的 密碼:
無效的密碼: 密碼少于 8 個字符
重新輸入新的 密碼:
passwd:所有的身份驗證令牌已經成功更新,
# 切換用戶
[root@node03 ~]$ su hadoop
# 啟動Hive
[hadoop@node03 root]$ hive
which: no hbase in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/opt/software/java/jdk1.8.0_231/bin:/opt/software/hadoop-2.9.2/bin:/opt/software/hadoop-2.9.2/sbin:/opt/software/hive-2.3.7/bin:/root/bin)

Logging initialized using configuration in file:/opt/software/hive-2.3.7/conf/hive-log4j2.properties Async: true
Hive-on-MR is deprecated in Hive 2 and may not be available in the future versions. Consider using a different execution engine (i.e. spark, tez) or using Hive 1.X releases.
hive (default)> show databases;
OK
database_name
default
test1
Time taken: 7.132 seconds, Fetched: 2 row(s)
hive (default)> exit;

其中,useradd命令的常用選項如下:

選項含義
-m自動建立用戶的登入目錄
-g指定用戶所屬的起始群組
-G<群組>指定用戶所屬的附加群組
-s指定用戶登入后所使用的Shell

建議現階段還是使用root用戶即可,

(5)引數配置

Hive中查看引數配置資訊的方式如下:

-- 查看全部引數
hive (default)> set;
_hive.hdfs.session.path=/tmp/hive/root/97a4196d-bd8d-4c40-b736-de3061563bf7
_hive.local.session.path=/tmp/root/97a4196d-bd8d-4c40-b736-de3061563bf7
_hive.tmp_table_space=/tmp/hive/root/97a4196d-bd8d-4c40-b736-de3061563bf7/_tmp_space.db
datanode.https.port=50475
datanucleus.cache.level2=false
...
system:user.dir=/root
system:user.home=/root
system:user.language=zh
system:user.name=root
system:user.timezone=Asia/Shanghai
-- 查看某個引數
hive (default)> set hive.exec.mode.local.auto;
hive.exec.mode.local.auto=true
hive (default)> 

引數配置有3種方式,如下:

  • 用戶自定義組態檔(hive-site.xml)

  • 啟動Hive時指定引數(-hiveconf)

  • Hive命令列指定引數(set)

其中默認組態檔是hive-default.xml,用戶自定義組態檔是hive-site.xml,后者優先級大于前者;

組態檔中的設定對本機啟動的所有Hive行程有效;

也可以啟動Hive時,在命令列添加-hiveconf param=value來設定引數,這些設定僅對本次啟動有效;

還可以在 Hive 命令列中使用SET關鍵字設定引數,同樣僅對本次啟動有效,

現在使用如下:

[root@node03 ~]$ hive
which: no hbase in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/opt/software/java/jdk1.8.0_231/bin:/opt/software/hadoop-2.9.2/bin:/opt/software/hadoop-2.9.2/sbin:/opt/software/hive-2.3.7/bin:/root/bin)

Logging initialized using configuration in file:/opt/software/hive-2.3.7/conf/hive-log4j2.properties Async: true
Hive-on-MR is deprecated in Hive 2 and may not be available in the future versions. Consider using a different execution engine (i.e. spark, tez) or using Hive 1.X releases.
hive (default)> set hive.exec.mode.local.auto;
hive.exec.mode.local.auto=true
hive (default)> exit;
[root@node03 ~]$ hive -hiveconf hive.exec.mode.local.auto=false
which: no hbase in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/opt/software/java/jdk1.8.0_231/bin:/opt/software/hadoop-2.9.2/bin:/opt/software/hadoop-2.9.2/sbin:/opt/software/hive-2.3.7/bin:/root/bin)

Logging initialized using configuration in file:/opt/software/hive-2.3.7/conf/hive-log4j2.properties Async: true
Hive-on-MR is deprecated in Hive 2 and may not be available in the future versions. Consider using a different execution engine (i.e. spark, tez) or using Hive 1.X releases.
hive (default)> set hive.exec.mode.local.auto;
hive.exec.mode.local.auto=false
hive (default)> set hive.exec.mode.local.auto=true;
hive (default)> set hive.exec.mode.local.auto;
hive.exec.mode.local.auto=true
hive (default)> 

可以總結,各個配置方式的優先級如下:

set > -hiveconf > hive-site.xml > hive-default.xml

可以查看Hive命令的幫助檔案,如下:

[root@node03 ~]$ hive -help
which: no hbase in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/opt/software/java/jdk1.8.0_231/bin:/opt/software/hadoop-2.9.2/bin:/opt/software/hadoop-2.9.2/sbin:/opt/software/hive-2.3.7/bin:/root/bin)
usage: hive
 -d,--define <key=value>          Variable substitution 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 substitution 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)

其中,-e選項用于不進入Hive互動視窗、直接執行SQL陳述句,如下:

[root@node03 ~]$ hive -e "show databases;"
which: no hbase in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/opt/software/java/jdk1.8.0_231/bin:/opt/software/hadoop-2.9.2/bin:/opt/software/hadoop-2.9.2/sbin:/opt/software/hive-2.3.7/bin:/root/bin)

Logging initialized using configuration in file:/opt/software/hive-2.3.7/conf/hive-log4j2.properties Async: true
OK
database_name
default
test1
Time taken: 6.09 seconds, Fetched: 2 row(s)

-f引數用于執行腳本中SQL陳述句,

先創建檔案vim hdfsfile1.sql,內容如下:

show databases;

執行如下:

# 執行檔案中的SQL陳述句
[root@node03 ~]$ hive -f hdfsfile1.sql 
which: no hbase in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/opt/software/java/jdk1.8.0_231/bin:/opt/software/hadoop-2.9.2/bin:/opt/software/hadoop-2.9.2/sbin:/opt/software/hive-2.3.7/bin:/root/bin)

Logging initialized using configuration in file:/opt/software/hive-2.3.7/conf/hive-log4j2.properties Async: true
OK
database_name
default
test1
Time taken: 5.97 seconds, Fetched: 2 row(s)
# 執行檔案中的SQL陳述句,并將結果寫入檔案
[root@node03 ~]$ hive -f hdfsfile1.sql >> result.log
which: no hbase in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/opt/software/java/jdk1.8.0_231/bin:/opt/software/hadoop-2.9.2/bin:/opt/software/hadoop-2.9.2/sbin:/opt/software/hive-2.3.7/bin:/root/bin)

Logging initialized using configuration in file:/opt/software/hive-2.3.7/conf/hive-log4j2.properties Async: true
OK
Time taken: 7.183 seconds, Fetched: 2 row(s)
[root@node03 ~]$ cat result.log 
database_name
default
test1


和MySQL類似,退出Hive命令列可以使用exit;或者quit;命令,

還可以在命令列執行Shell命令和HDFS命令如下:

# 操作節點本地
hive (default)> ! ls;
111
123abc
aaa
abc.txt
anaconda-ks.cfg
bbb
cba.txt
hdfsfile1.sql
lxDemo
result.log
# 操作HDFS
hive (default)> dfs -ls /;
Found 13 items
drwxrwxrwx   - root supergroup          0 2021-09-01 17:59 /api_test
drwxrwxrwx   - root supergroup          0 2021-08-26 19:22 /cl
drwxr-xr-x   - root supergroup          0 2021-09-06 10:14 /collect_log
drwxr-xr-x   - root supergroup          0 2021-09-02 18:37 /demo
drwxr-xr-x   - root supergroup          0 2021-09-02 18:29 /output
-rw-r--r--   1 root supergroup     281214 2021-09-02 12:43 /packet.txt
drwxr-xr-x   - root supergroup          0 2021-09-02 18:14 /test
drwxrwxrwx   - root supergroup          0 2021-09-20 15:33 /tmp
-rw-r--r--   1 root supergroup         18 2021-09-02 11:12 /tmp.txt
drwxrwxrwx   - root supergroup          0 2021-09-21 11:08 /user
drwxr-xr-x   - root supergroup          0 2021-09-04 11:00 /wc_output
drwxrwxrwx   - root supergroup          0 2021-08-25 22:33 /wcinput
drwxrwxrwx   - root supergroup          0 2021-09-07 18:52 /wcoutput
hive (default)> dfs -ls /user;
Found 2 items
drwxrwxrwx   - root supergroup          0 2021-09-20 18:52 /user/hive
drwxrwxrwx   - root supergroup          0 2021-09-02 22:01 /user/root
hive (default)> 

3.資料型別與檔案格式

Hive支持關系型資料庫的絕大多數基本資料型別,同時也支持4種集合資料型別,

(1)基本資料型別及轉換

Hive類似和Java語言中一樣,會支持多種不同長度的整型和浮點型別資料,同時也支持布爾型別、字串型別,時間戳資料型別以及二進制陣列資料型別等,具體如下:

  • Integers(整型)

????- TINYINT—1位元組的有符號整數

????- SMALLINT—2位元組的有符號整數
????

????- INT—4位元組的有符號整數
????

????- BIGINT—8位元組的有符號整數
????

  • Floating point numbers(浮點數)

????- FLOAT—單精度浮點數

????- DOUBLE—雙精度浮點數
????

  • Fixed point numbers(定點數)

????- DECIMAL—17位元組,任意精度數字,通常用戶自定
????義decimal(12, 6)
????

  • String(字串)

????- STRING—可指定字符集的不定長字串
????

????- VARCHAR—1-65535長度的不定長字串
????

????- CHAR—1-255定長字串
????

  • Datetime(時間日期型別)

????- TIMESTAMP—時間戳(納秒精度)
????

????- DATE—時間日期型別
????

  • Boolean(布爾型別)

????- BOOLEAN—TRUE / FALSE
????

  • Binary types(二進制型別)

????- BINARY—位元組序列

這些型別名稱都是 Hive 中保留字,

這些基本的資料型別都是 Java 中的介面進行實作的,因此與 java 中資料型別是基本一致的,具體如下:

Hive資料型別Java資料型別長度樣例
TINYINTbyte1位元組有符號整數20
SMALLINTshort2位元組有符號整數30
INTint4位元組有符號整數40
BIGINTlong8位元組有符號整數50
BOOLEANboolean布爾型別true、false
FLOATfloat單精度浮點數3.14159
DOUBLEdouble雙精度浮點型2.71828
STRINGString字符序列,可指定字符集;可以使用單引號或雙引號‘The Apache Hive data warehouse software facilitates’
TIMESTAMP時間型別
BINARY字符陣列

Hive的資料型別是可以進行隱式轉換 的,類似于Java的型別轉換,如用戶在查詢中將一種浮點型別和另一種浮點型別的值做對比,Hive會將型別轉換成兩個浮點型別中值較大的那個型別,即:將FLOAT型別轉換成DOUBLE型別;當然如果需要的話,任意整型會轉化成DOUBLE型別, Hive 中基本資料型別遵循以下層次結構:

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-IpLZRV5C-1636255026508)(image/image_1.png)]

按照這個層次結構,子型別到祖先型別允許隱式轉換,

總的來說資料轉換遵循以下規律:

任何整數型別都可以隱式轉換為一個范圍更廣的型別,例如tinyInt => Int、int => bigint;

所有整數型別、float、string(都是數字)都可以隱式轉換為Double;
tinyint、 smallint、int => float;
boolean不能轉換,

使用如下:

hive (default)> select "1.0" + 2;
OK
_c0
3.0
Time taken: 1.69 seconds, Fetched: 1 row(s)
hive (default)> select "111" > 112;
OK
_c0
false
Time taken: 0.199 seconds, Fetched: 1 row(s)
hive (default)> select "111" > 110;
OK
_c0
true
Time taken: 0.089 seconds, Fetched: 1 row(s)
hive (default)> select "1" > true;
OK
_c0
false
Time taken: 0.142 seconds, Fetched: 1 row(s)
hive (default)> select "1" + true;
FAILED: SemanticException [Error 10014]: Line 1:7 Wrong arguments 'true': No matching method for class org.apache.hadoop.hive.ql.udf.generic.GenericUDFOPNumericPlus with (string, boolean)

使用cast函式進行強制型別轉換 ;如果強制型別轉換失敗,回傳NULL,

使用如下:

hive (default)> select cast('111a' as int);
OK
_c0
NULL
Time taken: 0.119 seconds, Fetched: 1 row(s)
hive (default)> select cast('111' as int);
OK
_c0
111
Time taken: 0.177 seconds, Fetched: 1 row(s)
hive (default)> 

(2)集合資料型別

Hive支持集合資料型別,包括array、map、struct、union等型別,分別如下:

型別含義字面量示意
ARRAY有序的相同資料型別的集合array(1,2)
MAPkey-value對,其中key必須是基本資料型別、value不限map(‘a’, 1, ‘b’,2)
STRUCT不同型別欄位的集合,類似于C語言的結構體struct(‘1’,1,1.0);
named_struct(‘col1’, ‘1’, ‘col2’, 1, ‘clo3’, 1.0)
UNION不同型別的元素存盤在同一欄位的不同行中create_union(1, ‘a’, 63)

和基本資料型別一樣,這些型別的名稱同樣是保留字;

ARRAY 和 MAP 與 Java 中的 Array 和 Map 類似;

STRUCT 與 C 語言中的 Struct 類似,它封裝了一個命名欄位集合,復雜資料型別允許任意層次的嵌套,

使用如下:

-- array
hive (default)> select array(1, 2, 3, 4, 5) as myarr;
OK
myarr
[1,2,3,4,5]
Time taken: 6.692 seconds, Fetched: 1 row(s)
hive (default)> select myarr from (select array(1, 2, 3, 4, 5) as myarr) tmp;
OK
myarr
[1,2,3,4,5]
Time taken: 0.128 seconds, Fetched: 1 row(s)
hive (default)> select myarr[0] from (select array(1, 2, 3, 4, 5) as myarr) tmp;
OK
_c0
1
Time taken: 0.112 seconds, Fetched: 1 row(s)
hive (default)> select myarr[4] from (select array(1, 2, 3, 4, 5) as myarr) tmp;
OK
_c0
5
Time taken: 0.137 seconds, Fetched: 1 row(s)
hive (default)> select myarr[5] from (select array(1, 2, 3, 4, 5) as myarr) tmp;
OK
_c0
NULL
Time taken: 0.113 seconds, Fetched: 1 row(s)
-- map
hive (default)> select map("a", 10, "b", 20, "c", 30, "d", 40, "e", 50) mymap;
OK
mymap
{"a":10,"b":20,"c":30,"d":40,"e":50}
Time taken: 0.12 seconds, Fetched: 1 row(s)
hive (default)> select mymap["a"] from (select map("a", 10, "b", 20, "c", 30, "d", 40, "e", 50) mymap) tmp;
OK
_c0
10
Time taken: 0.126 seconds, Fetched: 1 row(s)
hive (default)> select mymap["e"] from (select map("a", 10, "b", 20, "c", 30, "d", 40, "e", 50) mymap) tmp;
OK
_c0
50
Time taken: 0.116 seconds, Fetched: 1 row(s)
hive (default)> select mymap["f"] from (select map("a", 10, "b", 20, "c", 30, "d", 40, "e", 50) mymap) tmp;
OK
_c0
NULL
Time taken: 0.1 seconds, Fetched: 1 row(s)
-- struct
hive (default)> select struct("Corley", 18, 190) as userinfo;
OK
userinfo
{"col1":"Corley","col2":18,"col3":190}
Time taken: 0.082 seconds, Fetched: 1 row(s)
hive (default)> select named_struct("name", "Jack", "age", 30, "height", 170) as userinfo2;
OK
userinfo2
{"name":"Jack","age":30,"height":170}
Time taken: 0.125 seconds, Fetched: 1 row(s)
hive (default)> select userinfo2.name, userinfo2.age, userinfo2.height from (select named_struct("name", "Jack", "age", 30, "height", 170) as userinfo2) t1;
OK
name    age     height
Jack    30      170
Time taken: 0.111 seconds, Fetched: 1 row(s)
-- union
hive (default)> select create_union(0, "Corley", 18, 20900) as myunion;
OK
myunion
{0:"Corley"}
Time taken: 0.509 seconds, Fetched: 1 row(s)
hive (default)> select myunion from (select create_union(0, "Corley", 18, 20900) as myunion) tmp; 
OK
myunion
{0:"Corley"}
Time taken: 0.095 seconds, Fetched: 1 row(s)
hive (default)> 


其中,array和map通過中括號[]訪問元素,struct通過列名.欄位名訪問具體資訊;

如果要訪問的元素不存在時,回傳NULL,而不會報錯,

(3)Hive文本檔案資料編碼及讀時模式

Hive表中的資料在存盤在檔案系統上,Hive定義了默認的存盤格式,也支持用戶自定義檔案存盤格式,

Hive默認使用幾個很少出現在欄位值中的控制字符,來表示替換默認分隔符的字符,Hive默認分隔符及其含義如下:

分隔符名稱含義
\n換行符用于分隔行:每一行是一條記錄,使用換行符分割資料
^A+A用于分隔欄位:在CREATE TABLE陳述句中使用八進制編碼\001表示
^B+B用于分隔 ARRAY、MAP、STRUCT 中的元素:在CREATE TABLE陳述句中使用八進制編碼\002表示
^C+CMap中 key、value之間的分隔符:在CREATE TABLE陳述句中使用八進制編碼\003表示

先舉例如下:

有一個表的欄位如下:

id   name    age hobby(array) score(map)

先創建表:

create table s1(
    id int,
    name string,
    age int,
    hobby array<string>,
    score map<string, int>
);

再在本地的/home/hadoop/data目錄(不存在則先創建)下創建資料檔案vi s1.dat,輸入s1表的資料,內容如下:

666^ACorley^A18^Aread^Bmusic^Ajava^C97^Bhadoop^C87
777^AJack^A30^Aread^Bgame^Amath^C73^^Bpython^C67

在 vi 中輸入特殊字符即分隔符時,不能直接輸入^,而是需要使用快捷鍵,3個分隔符的快捷鍵如下:

(Ctrl + v) + (Ctrl + a) => ^A
(Ctrl + v) + (Ctrl + b) => ^B
(Ctrl + v) + (Ctrl + c) => ^C

需要注意,在輸入分隔符的時候需要確保快捷鍵Ctrl+v沒有被占用,

同時,^A^B^C 都是特殊的控制字符,直接使用more、cat命令是看不見的,可以使用cat -A s1.dat進行查看,如下:

[root@node03 data]$ cat -A s1.dat 
666^ACorley^A18^Aread^Bmusic^Ajava^C97^Bhadoop^C87$
777^AJack^A30^Aread^Bgame^Amath^C73^^Bpython^C67$

再加載本地資料和查詢,如下所示:

hive (default)> load data local inpath '/home/hadoop/data/s1.dat' into table s1;
Loading data to table default.s1
OK
Time taken: 0.681 seconds
hive (default)> select * from s1;
OK
s1.id   s1.name s1.age  s1.hobby        s1.score
666     Corley  18      ["read","music"]        {"java":97,"hadoop":87}
777     Jack    30      ["read","game"] {"math":null,"python":67}
Time taken: 1.924 seconds, Fetched: 2 row(s)
hive (default)> 

可以看到,匯入和查詢出了資料,

默認的分隔符因為使用極少,在資料中一般不會出現,所以不會干擾資料的分割;

當然,一般情況下不會采用默認的分隔符,因為可讀性太差,同時輸入也比較麻煩;

Hive 中沒有定義專門的資料格式,資料格式可以由用戶指定,用戶定義資料格式需要指定三個屬性,即列分隔符(通常為空格、"\t"、"\x001")、行分隔符("\n")以及讀取檔案資料的方法;

在加載資料的程序中,Hive 不會對資料本身進行任何修改,而只是將資料內容復制或者移動到相應的 HDFS 目錄中;

將 Hive 資料匯出到本地時,系統默認的分隔符是A、B、^C這些特殊字符,使用cat或者vim是看不到的,

寫時模式:

在傳統資料庫(RDBMS)中,在加載時發現資料不符合表的定義,則拒絕加載資料,資料在寫入資料庫 時對照表模式進行檢查,這種模式稱為寫時模式 (schema on write),

讀時模式:

Hive 中資料加載程序采用讀時模式 (schema on read),加載資料時不進行資料格式的校驗,讀取資料 時如果不合法則顯示NULL;

這種模式的優點是加載資料迅速,問題是格式不一致時很多資料都讀為NULL,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/352183.html

標籤:其他

上一篇:基于SSM實作在線洗衣平臺

下一篇:【一】JAVA基本概念

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more