hive中用load data local inpath載入本地數(shù)據(jù)時出錯氧腰,報錯找不到路徑,原因:
我本地路徑用的是自己電腦上的路徑蝗敢,但是Hive本地裝載數(shù)據(jù)中的"本地"指的是服務器的本地,而非我們電腦所在的“本地”。
如果是學習hive慷妙,在自己電腦上搭建練習環(huán)境,可能需要了解如何將“本機”(電腦)上的數(shù)據(jù)載入到hive允悦。網(wǎng)上一些教程沒有說明本地指“服務器”的原因是因為分布式計算所用到的數(shù)據(jù)量非常大膝擂,在實際操作中不太可能存在自己的電腦上,因此本地默認指服務器是合理的隙弛。但是對于非計算機背景的初學者架馋,我們往往會把教程中的“本地”當做自己電腦上的本地。
折騰了半天全闷,想把整個過程寫出來叉寂,希望能幫助需要的人。
-
想好要把數(shù)據(jù)存儲在服務器的什么位置
假設現(xiàn)在已經(jīng)啟動hadoop总珠,但是沒有進入hive屏鳍】贝浚可以在服務器界面輸入
ls /
看一下有哪些目錄,例如我的界面就是:
在服務器界面的所有操作都會用到linux代碼钓瞭,包括如何移動文件夾驳遵、創(chuàng)建文件夾、訪問文件山涡、修改保存文件等堤结,如果這方面不是很清楚,可以去百度下linux的常用代碼鸭丛。對于Mac用戶來說竞穷,平時在terminal中操作用到的代碼就是linux代碼)
看到目錄后,想好你想把數(shù)據(jù)存在服務器的哪個位置系吩。比如来庭,我想存儲在home這個文件夾中:
上面的代碼意思是,移動到home文件夾中的hadoop文件夾中穿挨,用ls指令看下該文件夾下有什么文件月弛,結(jié)果發(fā)現(xiàn)有datas怎么一個文件夾。我準備把數(shù)據(jù)存到這個文件夾下科盛。
2. 把本機文件上傳到服務器
打開terminal帽衙,輸入
scp '文件在計算機上的路徑' root@服務器IP:服務器中的存儲位置
例如,我要把電腦桌上上的csv文件存入到服務器的home/hadoop/datas文件夾中贞绵,我的服務器IP是111.112.113.114厉萝,那么我應該輸入:
scp '/Users/name/Desktop/model2_datas.csv' root@111.112.113.114:/home/hadoop/datas/
接下來會要求你輸入服務器的密碼,輸入就可以榨崩。如果成功加載數(shù)據(jù)會在界面顯示加載進度谴垫,例如:
3. 重新回到服務器界面,我們可以看到數(shù)據(jù)已經(jīng)加載成功
[hadoop@node100 data]$ cd /home/hadoop/datas
[hadoop@node100 data]$ ls
model2_datas.csv --返回的結(jié)果
上面可以看到datas文件夾中已經(jīng)有我們載入的csv數(shù)據(jù)
4. 將數(shù)據(jù)載入到hive表
1)首先進入hive的界面母蛛,進入你的數(shù)據(jù)庫翩剪,然后根據(jù)你的數(shù)據(jù)創(chuàng)建一個表
create table 表名
(字段 字段類型,
字段2 字段類型2彩郊,
....)
row format delimited fields terminated by ',' --指定字段間的分隔符
tblproperties(
"skip.header.line.count"="1" --跳過文件行首1行
)
2)將服務器本地的數(shù)據(jù)載入hive表
load data local inpath '服務器中的文件路徑' into table 表名
例如我剛才的例子前弯,代碼就是
load data local inpath '/home/hadoop/datas/model2_datas.csv' into table model2_datas.csv
參考資料
拉勾數(shù)據(jù)分析訓練營資料
百度linux代碼資料