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