通過Sqoop實現Mysql / Oracle 與HDFS / Hbase互導資料
下文將重點說明通過Sqoop實現Mysql與HDFS互導資料,Mysql與Hbase,Oracle與Hbase的互導最後給出命令。
一、Mysql與HDFS互導資料
環境:
宿主機器作業系統為Win7,Mysql安裝在宿主機上,宿主機地址為192.168.66.96
3臺虛擬機器作業系統為Ubuntu-12.04.1-32位
三臺虛擬機器已成功安裝Hadoop,並實現免金鑰互訪,配hosts為:
192.168.66.91 masternode
192.168.66.92 slavenode1
192.168.66.93 slavenode2
/etc/profile已配置好必備環境變數HADOOP_HOME,JAVA_HOME
實驗在masternode上進行,已成功連線mysql
步驟一,下載安裝包:
我安裝的Hadoop版本是原生hadoop-0.20.203.0,SQOOP不支援此版本,可使用CDH3版本hadoop,也可以通過拷貝相應的包到sqoop-1.2.0-CDH3B4/lib下,依然可以使用。
下載相關檔案:
http://archive.cloudera.com/cdh/3/hadoop-0.20.2-CDH3B4.tar.gz
http://archive.cloudera.com/cdh/3/sqoop-1.2.0-CDH3B4.tar.gz
sqoop-1.2.0-CDH3B4依賴hadoop-core-0.20.2-CDH3B4.jar,所以你需要下載hadoop- 0.20.2-CDH3B4.tar.gz,解壓縮後將hadoop-0.20.2-CDH3B4/hadoop-core-0.20.2-
CDH3B4.jar複製到sqoop-1.2.0-CDH3B4/lib中。
另外,sqoop匯入mysql資料執行過程中依賴mysql-connector-java-*.jar,所以你需要下載mysql-connector-java-*.jar並複製到sqoop-1.2.0-CDH3B4/lib中。
步驟二,相關配置:
修改SQOOP的檔案configure-sqoop,註釋掉hbase和zookeeper檢查(除非你準備使用HABASE等HADOOP上的元件) #if [ ! -d "${HBASE_HOME}" ]; then
# echo “Error: $HBASE_HOME does not exist!”
# echo ‘Please set $HBASE_HOME to the root of your HBase installation.’
# exit 1
#fi
#if [ ! -d "${ZOOKEEPER_HOME}" ]; then
# echo “Error: $ZOOKEEPER_HOME does not exist!”
# echo ‘Please set $ZOOKEEPER_HOME to the root of your ZooKeeper installation.’
# exit 1
#fi
修改/etc/profile環境變數檔案(su root之後,sudo gedit /etc/profile):
新增 export SQOOP_HOME=/home/grid/sqoop
在原有PATH後新增 :$SQOOP_HOME/bin
步驟三,在mysql中建立測試使用者,測試表和資料,並測試sqoop連線mysql:
建立使用者sqoop並授權:
grant all privileges on *.* to 'sqoop'@'%' identified by 'sqoop' with grant option;
建立表空間(schema)sqoop,並建立測試表:
create table students (
id int not null primary key,
name varchar(20),
age int)
插入測試資料:
insert into students values('10001','liyang',29);
insert into students values('10002','lion',28);
insert into students values('10003','leon',26);
在masternode測試sqoop能否成功連線宿主機器上的mysql:
sqoop list-tables --connect jdbc:mysql://192.168.66.96:3306/sqoop --username sqoop --password sqoop
如果能正確顯示出sqoop表空間中的students表,就說明sqoop已經可以成功連線mysql!
步驟四,將mysql中sqoop表空間的students表的三行資料匯入HDFS:
啟動hadoop:
start-all.sh
用jps驗證啟動是否成功
顯示正在執行以下程式即為啟動成功:
2820 SecondaryNameNode
4539 Jps
2887 JobTracker
2595 NameNode
從mysql匯入資料,執行如下命令:
sqoop import --connect jdbc:mysql://192.168.66.96:3306/sqoop --username sqoop --password sqoop --table students -m 1
驗證匯入資料是否成功:
若匯入成功,執行 hadoop dfs -ls 將能看到根目錄/user/grid/下有以表名命名的資料夾students
執行 hadoop dfs -ls /user/grid/students 能看到該資料夾中包含檔案:/user/grid/students/part-m-00000
執行 hadoop dfs -cat /user/grid/students/part-m-00000 就能看到該檔案已經包含mysql中students表的三行資料:
10001,liyang,29
10002,lion,28
10003,leon,26
步驟五,將HDFS中的資料匯入Mysql的students表中:
首先將mysql的students表資料清空:
delete from students;
然後在masternode上執行匯出資料命令:
sqoop export --connect jdbc:mysql://192.168.66.96:3306/sqoop --username sqoop --password sqoop --table students --export-dir hdfs://masternode:9000/user/grid/students/part-m-00000
若成功,在mysql中會看到students表中的資料恢復了!
注意:過程中可能會因為slavenode的50010埠沒開啟而報錯,需用root使用者通過sudo ufw allow 50010命令開啟埠!
二、Mysql與Hbase互導資料
將mysql的資料匯入hbase的命令格式為:
sqoop import --connect jdbc:mysql://mysqlserver_IP/databaseName --username --password password --table datatable --hbase-create-table --hbase-table hbase_tablename --column-family
col_fam_name --hbase-row-key key_col_name
其中 ,databaseName 和datatable 是mysql的資料庫和表名,hbase_tablename是要導成hbase的表名,key_col_name可以指定datatable中哪一列作為hbase新表的rowkey,col_fam_name是除rowkey之外的所有列的列族名
例如:可通過如下命令將Mysql中的students表匯入到Hbase中:
/home/grid/sqoop/bin/sqoop import --connect jdbc:mysql://192.168.66.96/sqoop --username sqoop --password liyang16 --table students --hbase-create-table --hbase-table students --column-family stuinfo --hbase-row-key id
成功執行後,可在hbase中用以下命令檢視結果:
hbase(main):011:0> scan 'students'
ROW COLUMN+CELL
10001 column=stuinfo:age, timestamp=1356759994058, value=29
10001 column=stuinfo:name, timestamp=1356759994058, value=liyang
10002 column=stuinfo:age, timestamp=1356760044478, value=28
10002 column=stuinfo:name, timestamp=1356760044478, value=lion
10003 column=stuinfo:age, timestamp=1356760044478, value=26
10003 column=stuinfo:name, timestamp=1356760044478, value=leon
3 row(s) in 0.0900 seconds
三、Oracle與Hbase互導資料
將Oracle中的dept表(列為id,name,addr)匯出至hbase中的dept表(行鍵為id,列族為deptinfo)
sqoop import --append --connect jdbc:oracle:thin:@192.168.66.90:1521:orcl --username test --password test --m 1 --table dept --columns id,name,addr --hbase-create-table --hbase-table dept --hbase-row-key id --column-family
deptinfo
-------------------------------------------------------------------------------------
注:以上所有命令均實測通過,只需修改引數即可執行!
相關文章
- sqoop從hdfs導資料至oracle資料庫OOPOracle資料庫
- HIVE之 Sqoop 1.4.6 安裝、hive與oracle表互導HiveOOPOracle
- sqoop導oracle資料庫的資料到hiveOOPOracle資料庫Hive
- 案例:通過shell指令碼實現mysql資料備份與清理指令碼MySql
- Sqoop1.99.6 Install And From MySQL To HdfsOOPMySql
- 通過sysbench工具實現MySQL資料庫的效能測試MySql資料庫
- Sqoop解決關係型資料庫與HDFS之間進行資料轉換OOP資料庫
- 通過memberlist庫實現gossip管理叢集以及叢集資料互動Go
- mysql通過kafka實現資料實時同步(三)——es叢集配置MySqlKafka
- 用 Phoenix 通過 SQL 語句更新操作 HBase 資料SQL
- 使用perl通過thrift連線hbase讀取資料
- 如果通過流資料實現實時分析?
- sqoop用法之mysql與hive資料匯入匯出OOPMySqlHive
- 資料匯入終章:如何將HBase的資料匯入HDFS?
- Sqoop import載入HBase過程中,遇到Permission denied: user=root, access=WRITE, inode="/user":hdfs:supergroup:drwxr-xr-xOOPImport
- 通過Vue的過濾器實現資料的資料脫敏Vue過濾器
- Java通過Mybatis實現批量插入資料到Oracle中JavaMyBatisOracle
- Sqoop1 From PostgreSQL to HdfsOOPSQL
- mysql 資料sqoop到hive 步驟MySqlOOPHive
- Laravel 通過 Macros 實現列印原生 MySQLLaravelMacROSMySql
- 【分散式鎖】通過MySQL資料庫的表來實現-V1分散式MySql資料庫
- 大資料學習(hbase,hive,sqoop2對資料的簡單操作)大資料HiveOOP
- MySQL資料庫5:Go與MySQL的互動MySql資料庫Go
- MySQL MaxCompute與AnalyticDB實現資料處理與轉換過程MySql
- python與mysql資料庫互動PythonMySql資料庫
- EMQ X 與 HStreamDB 整合實踐:通過規則引擎實現資料儲存MQ
- 用java的api將資料從HDFS上存到HBASE中JavaAPI
- 通過Oracle來輔助MySQL資料問題的恢復OracleMySql
- oracle通過expdp的remap_data實現簡單的資料脫敏OracleREM
- Flutter | 通過 ServiceLocator 實現無 context 導航FlutterContext
- 通過Websocket與gRPC互動 | gRPC雙向資料流的互動控制系列(2)WebRPC
- Restcloud ETl資料通過時間戳實現增量資料同步RESTCloud時間戳
- hbase與phoenix整合(使用phoenix操作hbase資料)
- 如何透過輕易雲實現旺店通與金蝶雲資料整合
- MySQL 通過 binlog 恢復資料MySql
- 通過 Swoole\Table 實現 Swoole 多程式資料共享
- Mysql資料庫是如何通過索引定位資料MySql資料庫索引
- 大資料謝列3:Hdfs的HA實現大資料