hdfs導入資料庫
❶ 怎麼使用java代碼直接將從外部拿到的數據存入hdfs
存入HDFS有好幾種數據格式,我這里給你列出一種格式的存儲,sequence的
publicclassSeqWrite{
privatestaticfinalString[]data={"a,b,c,d,e,f,g","h,i,j,k,l,m,n","o,p,q,r,s,t","u,v,w,x,y,z","0,1,2,3,4","5,6,7,8,9"};
publicstaticvoidmain(String[]args)throwsIOException,Exception{
Configurationconfiguration=newConfiguration();
//這里是你主機的地址
configuration.set("fs.defaultFS","192.168.51.140");
//這個是存儲的路徑
Pathpath=newPath("/tmp/test1.seq");
Optionoption=SequenceFile.Writer.file(path);
OptionoptKey=SequenceFile.Writer.keyClass(IntWritable.class);
OptionoptValue=SequenceFile.Writer.valueClass(Text.class);
SequenceFile.Writerwriter=null;
IntWritablekey=newIntWritable(10);
Textvalue=newText();
writer=SequenceFile.createWriter(configuration,option,optKey,optValue);
for(inti=0;i<data.length;i++){
key.set(i);
value.set(data[i]);
writer.append(key,value);
writer.hsync();
Thread.sleep(10000L);
}
IOUtils.closeStream(writer);
}
}
❷ 使用sqoop將hive中的數據導入關系型資料庫怎麼去重
直接導入hive表
sqoop import --connect jdbc:postgresql://ip/db_name--username user_name --table table_name --hive-import -m 5
內部執行實際分三部,1.將數據導入hdfs(可在hdfs上找到相應目錄),2.創建hive表名相同的表,3,將hdfs上數據傳入hive表中
sqoop根據postgresql表創建hive表
sqoop create-hive-table --connect jdbc:postgresql://ip/db_name --username user_name --table table_name --hive-table hive_table_name( --hive-partition-key partition_name若需要分區則加入分區名稱)
導入hive已經創建好的表中
sqoop import --connect jdbc:postgresql://ip/db_name --username user_name --table table_name --hive-import -m 5 --hive-table hive_table_name (--hive-partition-key partition_name --hive-partition-value partititon_value);
使用query導入hive表
sqoop import --connect jdbc:postgresql://ip/db_name --username user_name --query "select ,* from retail_tb_order where \$CONDITIONS" --hive-import -m 5 --hive-table hive_table_name (--hive-partition-key partition_name --hive-partition-value partititon_value);
注意:$CONDITIONS條件必須有,query子句若用雙引號,則$CONDITIONS需要使用\轉義,若使用單引號,則不需要轉義。
❸ 關系資料庫數據導入hdfs,是用sqoop還是用shell,ke
1.jpg sqoop是關系型資料庫與非關系型資料庫之間轉換數據,hdfs二者都不屬於,所以sqoop不能轉換hdfs的數據。支持條件過濾,但是並不是你所說的條件select into,而是另外的一種形式。詳細可以參考下面帖子:sqoop、sqoop2介紹及如何使用高可用性:Sqoop工具import和export使用詳解
❹ 怎麼通過sqoop將hdfs上數據導入到mysql
sqoop是一個能把數據在關系型資料庫和HDFS之間互相傳輸的工具。在這里,我寫一下用java 程序來實現sqoop把數據從HDFS寫入到MYSQL。
在接觸sqoop之前,我自己寫了一個傳輸類來實現數據從HDFS到MYSQL。這里簡單說一下時間的思想:
1、在MYSQL中創建一個參數表A,用來記錄要傳輸的表的表名B和欄位。
2、HDFS上的數據的格式和MYSQL中參數表A中B表的欄位的數量一樣。
3、從MYSQL的參數表A中,讀取要傳輸的表B。把這些欄位拼湊成一個insert語句,例如
,拼湊為insert into b(column1,column2..) values(value1,value2...)
4、從HDFS相應的目錄逐行讀取數據,通過JDBC,把數據批量導入到MYSQL的B表中。
我現在用sqoop來代替原來傳輸的那個功能。先做一下准備工作:
1、hadoop的每個節點下lib文件夾中要有mysql的jar包和sqoop的jar包。
2、在HDFS的某個目錄上的數據格式和MYSQL相應的表中的欄位數量一致。
實現類如下:
package sqoop;
import java .util.ArrayList;
import java.util.List;
import org.apache.hadoop.conf.Configuration;
import org.apache.sqoop.Sqoop;
import org.apache.sqoop.tool.ExportTool;
/**
* 用SQOOP來把數據從HDFS導入到MYSQL。
* */
public class Test {
public static void main(String[] args) {
List<String> generatedJarsList = new ArrayList<String>();
Configuration conf = new Configuration();
conf.set("fs.default.name", "hdfs://master:9000");
conf.set("hadoop.job.ugi", "hadooper,hadoopgroup");
conf.set("mapred.job.tracker", "master:9001");
ArrayList<String> list = new ArrayList<String>(); //定義一個list
list.add("--table");
list.add("a_baat_client"); //mysql中的表。將來數據要導入到這個表中。
list.add("--export-dir");
list.add("/tmp/datathree/"); //hdfs上的目錄。這個目錄下的數據要導入到a_baat_client這個表中。
list.add("--connect");
list.add("jdbc:mysql://192.168.1.10:3306/report"); //mysql的鏈接
list.add("--username");
list.add("root"); //mysql的用戶名
list.add("--password");
list.add("root"); //mysql的密碼
list.add("--lines-terminated-by");
list.add("\\n"); //數據的換行符號
list.add("-m");
list.add("1");//定義maprece的數量。
String[] arg = new String[1];
ExportTool exporter = new ExportTool();
Sqoop sqoop = new Sqoop(exporter);
sqoop.setConf(conf);
arg = list.toArray(new String[0]);
int result = Sqoop.runSqoop(sqoop, arg);
System.out.println("res:" + result); //列印執行結果。
}
}
這個導出類執行過程中,可以在瀏覽器中看一下http://master:50030頁面。會發現導出數據也是一個把任務轉換為maprece執行的過程。
當然,上面的java代碼,也可以用命令行來實現。命令如下:
bin/sqoop export --connect jdbc:mysql://192.168.1.10:3306/report \
--table a_baat_client --username root --password root \
--export-dir /tmp/datathree/ -m 1
關於sqoop把數據從HDFS導入到MYSQL就說這么多。把數據從HIVE導入到MYSQL,其實可以理解為把HIVE表所對應的HDFS路徑的數據導入到MYSQL,這里就不多說了。
❺ mysql導入到hive hdfs上顯示又數據了 hive表裡面什麼都沒有
hdfs顯示但是hive裡面沒有的話,很可能hive配置使用的是自帶的deby資料庫。hive的配置文件弄好,如果用sqoop的話,把hive的配置文件hive-site.sh拷貝一份到sqoop的conf目錄下,讓sqoop知道保存的數據是到mysql元資料庫的hive。