A. 如何向 hadoop 導入數據
1.2
使用Hadoop
shell命令導入和導出數據到HDFS
實驗准備
實例需要用到的數據-weblog_entries.txt
在namenode創建2個文件夾用來存放實驗用的數據
mkdir
/home/data
1
mkdir
/home/data_download1
將weblog_entries.txt上傳到namenode里的/home/data文件夾(我使用SecureFXPortable.exe
工具)
註:以下命令都是在namenode節點運行的
實驗過程
1.在HDFS中創建一個新的文件夾,用於保存weblog_entries.txt
hadoop
fs
-mkdir
/data/weblogs1
2.將weblog_entries.txt文件從本地文件系統復制到HDFS剛創建的新文件夾下
cd
/home/data1
hadoop
fs
-FromLocal
weblog_entries.txt
/data/weblogs1
3.列出HDFS上weblog_entries.txt文件的信息:
hadoop
fs
–ls
/data/weblogs/weblog_entries.txt
1
4.將HDFS上的weblog_entries.txt文件復制到本地系統的當前文件夾下
cd
/home/data_download1
hadoop
fs
-ToLocal
/data/weblogs/weblog_entries.txt
./weblog_entries.txt
1
最後用
ls
命令檢驗下時候將weblog_entries.txt
下載到本地
B. 如何實現讓用戶在網頁中上傳下載文件到HDFS中
hadoop計算需要在hdfs文件系統上進行,文件上傳到hdfs上通常有三種方法:a hadoop自帶的dfs服務,put;b hadoop的API,Writer對象可以實現這一功能;c 調用OTL可執行程序,數據從資料庫直接進入hadoop
hadoop計算需要在hdfs文件系統上進行,因此每次計算之前必須把需要用到的文件(我們稱為原始文件)都上傳到hdfs上。文件上傳到hdfs上通常有三種方法:
a hadoop自帶的dfs服務,put;
b hadoop的API,Writer對象可以實現這一功能;
c 調用OTL可執行程序,數據從資料庫直接進入hadoop
由於存在ETL層,因此第三種方案不予考慮
將a、b方案進行對比,如下:
1 空間:方案a在hdfs上佔用空間同本地,因此假設只上傳日誌文件,則保存一個月日誌文件將消耗掉約10T空間,如果加上這期間的各種維表、事實表,將佔用大約25T空間
方案b經測試,壓縮比大約為3~4:1,因此假設hdfs空間為100T,原來只能保存約4個月的數據,現在可以保存約1年
2 上傳時間:方案a的上傳時間經測試,200G數據上傳約1小時
方案b的上傳時間,程序不做任何優化,大約是以上的4~6倍,但存在一定程度提升速度的餘地
3 運算時間:經過對200G數據,大約4億條記錄的測試,如果程序以IO操作為主,則壓縮數據的計算可以提高大約50%的速度,但如果程序以內存操作為主,則只能提高5%~10%的速度
4 其它:未壓縮的數據還有一個好處是可以直接在hdfs上查看原始數據。壓縮數據想看原始數據只能用程序把它導到本地,或者利用本地備份數據
壓縮格式:按照hadoop api的介紹,壓縮格式分兩種:BLOCK和RECORD,其中RECORD是只對value進行壓縮,一般採用BLOCK進行壓縮。
對壓縮文件進行計算,需要用SequenceFileInputFormat類來讀入壓縮文件,以下是計算程序的典型配置代碼:
JobConf conf = new JobConf(getConf(), log.class);
conf.setJobName(」log」);
conf.setOutputKeyClass(Text.class);//set the map output key type
conf.setOutputValueClass(Text.class);//set the map output value type
conf.setMapperClass(MapClass.class);
//conf.setCombinerClass(Rece.class);//set the combiner class ,if havenot, use Recuce class for default
conf.setRecerClass(Rece.class);
conf.setInputFormat(SequenceFileInputFormat.class);//necessary if use compress
接下來的處理與非壓縮格式的處理一樣
C. 怎樣把oracle中數據遷移到hadoop
大講台hadoop 在線學習為你解答:通過使用MapRece的方式,使Hadoop可以直接訪問Oracle,並將相關的數據寫入到HDFS文件當中。 從而可以順利地將Oracle中的數據遷移到Hadoop文件系統中。
D. 數據採集卡採集的數據如何寫入hadoop
Hadoop集群功能測試
以下是分別就配置了機架感知信息和沒有配置機架感知信息的hadoopHDFS啟動instance進行的數據上傳時的測試結果。
寫入數據
當沒有配置機架信息時,所有的機器hadoop都默認在同一個默認的機架下,名為「/default-rack」,這種情況下,任何一台datanode機器,不管物理上是否屬於同一個機架,都會被認為是在同一個機架下,此時,就很容易出現之前提到的增添機架間網路負載的情況。例如,對沒有機架信息的hadoopHDFS啟動instance上傳一個文件,其block信息如下:
從上圖可以看出,在沒有機架信息的情況下,namenode默認將所有的slaves機器全部默認為在/default-rack下,根據hadoop代碼的分析也能知道哦啊,此時在寫block時,三個datanode機器的選擇完全是隨機的。
E. 怎樣通過web前端把數據傳至hadoop里
hadoop跑在伺服器上,屬於後台。
web前端屬於前台。
首先得把數據從前台傳到後台,然後再從後台傳入hadoop是這么個思路。
從前台傳入後台,就是標準的web傳值,表單也好ajax也好,然後後台用個struts的action啊或者servelt么得接收一下。
然後傳入hadoop就好辦了,寫入文件么的都可以,後台就簡單了,不多說了。
F. canal如何將數據寫入hadoop
安裝組件。
可以安裝開源組件組件支持多種數據源插件化開發,如果對數據傳輸實時性要求較高的話可以使用多種組件組合使用,多種組件組合使用可以實現增量數據訂也可使用其它方法如代碼寫入等。
代碼實現針對代碼中進行資料庫的增刪改操作,這些操作如果都是單條數據的操作,是很容易處理的。但是,實際開發中,總是會有一些批量的更新或者刪除操作,這時候,就很難進行處理了。Aop實現不管是通過哪種Aop方式,根據制定的規則,如規范方法名,註解等進行切面處理,但依然還是會出現無法處理批量操作數據的問題。安裝組件是一個較為常用的方法。
G. hive中怎樣將本地數據放到hadoop中
你的意思是說hive 的load 吧 就是把本地文件load到hive 表中,也就相當於上傳到hadoop中
LOAD DATA LOCAL INPATH '/home/hadoop/hfxdoc/ticket.txt' OVERWRITE INTO TABLE ticket; 按照這個例子寫吧
H. 怎麼將本地的.sql文件導入hadoop master
完成sqoop的安裝後,可以這樣測試是否可以連接到mysql(注意:mysql的jar包要放到 SQOOP_HOME/lib 下):
sqoop list-databases --connect jdbc:mysql://192.168.1.109:3306/ --username root --password 19891231
結果如下
即說明sqoop已經可以正常使用了。
下面,要將mysql中的數據導入到hadoop中。
我准備的是一個300萬條數據的身份證數據表:
先啟動hive(使用命令行:hive 即可啟動)
然後使用sqoop導入數據到hive:
sqoop import --connect jdbc:mysql://192.168.1.109:3306/hadoop --username root --password 19891231 --table test_sfz --hive-import
sqoop 會啟動job來完成導入工作。
完成導入用了2分20秒,還是不錯的。
在hive中可以看到剛剛導入的數據表:
我們來一句sql測試一下數據:
select * from test_sfz where id < 10;
可以看到,hive完成這個任務用了將近25秒,確實是挺慢的(在mysql中幾乎是不費時間),但是要考慮到hive是創建了job在hadoop中跑,時間當然多。
接下來,我們會對這些數據進行復雜查詢的測試:
我機子的配置如下:
hadoop 是運行在虛擬機上的偽分布式,虛擬機OS是ubuntu12.04 64位,配置如下:
TEST 1 計算平均年齡
測試數據:300.8 W
1. 計算廣東的平均年齡
mysql:select (sum(year(NOW()) - SUBSTRING(borth,1,4))/count(*)) as ageAvge from test_sfz where address like '廣東%';
用時: 0.877s
hive:select (sum(year('2014-10-01') - SUBSTRING(borth,1,4))/count(*)) as ageAvge from test_sfz where address like '廣東%';
用時:25.012s
2. 對每個城市的的平均年齡進行從高到低的排序
mysql:select
address, (sum(year(NOW()) - SUBSTRING(borth,1,4))/count(*)) as ageAvge
from test_sfz GROUP BY address order by ageAvge desc;
用時:2.949s
hive:select
address, (sum(year('2014-10-01') - SUBSTRING(borth,1,4))/count(*)) as
ageAvge from test_sfz GROUP BY address order by ageAvge desc;
用時:51.29s
可以看到,在耗時上面,hive的增長速度較mysql慢。
TEST 2
測試數據:1200W
mysql 引擎: MyISAM(為了加快查詢速度)
導入到hive:
1. 計算廣東的平均年齡
mysql:select (sum(year(NOW()) - SUBSTRING(borth,1,4))/count(*)) as ageAvge from test_sfz2 where address like '廣東%';
用時: 5.642s
hive:select (sum(year('2014-10-01') - SUBSTRING(borth,1,4))/count(*)) as ageAvge from test_sfz2 where address like '廣東%';
用時:168.259s
2. 對每個城市的的平均年齡進行從高到低的排序
mysql:select
address, (sum(year(NOW()) - SUBSTRING(borth,1,4))/count(*)) as ageAvge
from test_sfz2 GROUP BY address order by ageAvge desc;
用時:11.964s
hive:select
address, (sum(year('2014-10-01') - SUBSTRING(borth,1,4))/count(*)) as
ageAvge from test_sfz2 GROUP BY address order by ageAvge desc;
用時:311.714s
I. 怎麼將mysql數據導入hadoop
通過Map/Rece進行批處理遞送到Apache
Hadoop仍然是中樞環節。,但隨著要從「超思維速度「分析方面獲取競爭優勢的壓力遞增,因此Hadoop(分布式文件系統)自身經歷重大的發展。科技的發展允許實時查詢,如Apache
Drill,Cloudera
Impala和Stinger
Initiative正脫穎而出,新一代的資源管理Apache
YARN
支持這些。
為了支持這種日漸強調實時性操作,發布一個新MySQL
Applier
for
Hadoop(用於Hadoop的MySQL
Applier)組件。它能夠把MySQL中變化的事務復制到Hadoop
/
Hive
/
HDFS。Applier
組件補充現有基於批處理Apache
Sqoop的連接性。
這個組件(MySQL
Applier
for
Hadoop)的復制是通過連接MySQL主服務,一旦二進制日誌被提交,就讀取二進制日誌事務,並且把它們寫到HDFS.
這個組件使用libhdfs提供的API,一個C庫操作HDFS中的文件。這庫由Hadoop版本預編譯生成的。
它連接MySQL主服務讀二進制日誌,然後提取發生在主服務上的行插入事件,解碼事件,提取插入到行的每個欄位的數據,並使用滿意的處理程序得到被要求的格式數據。把它追加到HDFS
中一個文本文件。
資料庫被映射為單獨的目錄,它們的表映射為子目錄,保存在數據倉庫目錄。每個表的數據被寫到Hive/
HDFS中文本文件(稱為datafile1.txt)。數據可以用逗號格式分隔;或其他格式,那可用命令行參數來配置的。