hdfs文件導入到hive(帶資源)

前言

  hive是基於Hadoop的一個數據倉庫工具,用來進行數據提取、轉化、載入,這是一種可以存儲、查詢和分析存儲在Hadoop中的大規模數據的機制。hive數據倉庫工具能將結構化的數據文件映射為一張資料庫表,並提供SQL查詢功能,能將SQL語句轉變成MapReduce任務來執行,下面來介紹如何將結構化文檔數據導入hive。

一、安裝Hive

1.1 官網下載或到本章最後地址下載hive 安裝包

/opt/software 下新建hive 目錄 並將安裝包解壓至此

tar -xzvf /opt/software/apache-hive-3.1.2-bin.tar.gz -C  /opt/software/hive

解壓後的 hive 目錄結構如下

 1.2 添加環境變數

vim /etc/profile

 文件末尾加上下面兩行 分別為hive安裝路徑和引用

export HIVE_HOME=/usr/local/hive/apache-hive-3.1.2-bin
export PATH=$PATH:$HIVE_HOME/bin

使文件立即生效

source /etc/profile

1.3 進入hive 的jar包目錄lib文件夾下

cd /usr/local/hive/apache-hive-3.1.2-bin/lib/

1.3.1 解決 log4j jar 包衝突

mv log4j-slf4j-impl-2.10.0.jar log4j-slf4j-impl-2.10.0.jar.bak

1.3.2  hive de guava-xx.jar  的guava-xx.jar  和hadoop的guava-xx.jar  包衝突,需要同步高版本jar,並刪除低版本jar(兩個jar包分別在/opt/hive/lib/   以及 /opt/hadoop/share/hadoop/common/lib/)

1.3.3 添加mysql 驅動到hive 的 lib下(略)

1.4 修改配置文件

進入到hive安裝目錄conf下執行

mv hive-env.sh.template hive-env.sh

1.4.1  編輯hive-env.sh  配置hive_home

 這裡注意,如果hadoop和hive 不是安裝在同一台機器上,會報錯找不到hadoop_home,網上暫時沒有找到好方案,暫時只能裝在一起,所以這裡不用配置

 1.4.2 conf文件夾下配置hive-site.xml (如果無該文件,請自行創建 touch hive-site.xml)

<configuration>

<property>   
<name>hive.server2.active.passive.ha.enable</name> 
<value>true</value> </property> <!-- hive的相關HDFS存儲路徑配置 --> <property> <name>hive.exec.scratchdir</name> <value>/tmp/hive</value> </property> <property> <name>hive.metastore.warehouse.dir</name> <value>/user/hive/warehouse</value> </property> <property> <name>hive.metastore.schema.verification</name> <value>false</value> </property> <property> <name>hive.querylog.location</name> <value>/user/hive/log</value> </property> <!-- 以下是mysql相關配置 地址埠自行更改 --> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://ip:port/testhive?createDatabaseIfNotExist=true&characterEncoding=UTF-8&useSSL=false</value> </property> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.jdbc.Driver</value> </property>
<property> <name>javax.jdo.option.ConnectionUserName</name> <value>userName</value> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>PASSWORD</value> </property> <!-- hive UI地址,不配置的話,默認只會在本機可以訪問 --> <property> <name>hive.server2.thrift.bind.host</name> <value>0.0.0.0</value> </property> </configuration>

1.5 後台啟動hiveserver

nohup $HIVE_HOME/bin/hiveserver2 &

  

 1.6 啟動hive 自帶client

bin/hive

進入hive 客戶端

 1.7 執行sql測試

hive> create table emp(
      > id int,
      > name string);
hive> insert into emp values(1,"lisi");

hive> select * from emp;
OK
1       lisi
Time taken: 0.395 seconds, Fetched: 1 row(s)  

正常!

二 、 將hdfs中的文件導入hive

2.1 新建emp表,指定以空格切分欄位,以換行切分數據條數

hive> create table student(
    > id int,
    > name string)
    > row format delimited
    > fields terminated by ' '
    > lines terminated by '\n'; 

2.2 準備要導入的文件

先找到hdfs文件路徑

可以在Hadoop(Utilities-Browse the file system)上看到本次要導入的文件路徑為  /flume/20220113/13/logs-.1642052912087

2.3 執行導入命令

hive> load data inpath '/flume/20220113/13/logs-.1642052912087' INTO TABLE emp;
Loading data to table default.emp
OK  

執行查詢emp語句,可以看到數據以成功導入

 

下面為hdfs 源文件(test.log)

1 sam
2 lisi
3 tom
4 zhaoliu
5 wangfang

 到hadoop 控制台可以看到hive 的表文件

 

結束!

hive 安裝包下載地址 

鏈接://pan.baidu.com/s/1CIBq7V6m4yH7TYmI0tacRQ
提取碼:6666

 

Tags: