sqoopのインストールと簡単な使用

1つ:sqoopの概要:
Sqoopはオープンソースツールであり、主にHadoop(Hive)と従来のデータベース(mysql、postgresql ...)の間でデータを転送するために使用されます。リレーショナルデータベース(例:MySQL、Oracle)に接続できます。など)PostgresなどのデータはHadoopのHDFSにインポートされ、HDFSデータはリレーショナルデータベースにインポートすることもできます。

ここでは、データのインポートとエクスポートの概念を理解する必要があります。
データのインポート(インポート):非ビッグデータクラスター(mysql、sql Server)からビッグデータクラスター(HDFS、HIVE、HBASE)にデータを転送します。
データのエクスポート(エクスポート):ビッグデータクラスター(HDFS、HIVE、HBASE)から非ビッグデータクラスター(RDBMS)にデータを転送します。

2:sqoopのインストール
1. / opt / oftwareの下のtarパッケージを/ opt / moduleに解凍します。
ここではバージョン1.4.6を使用していますが、公式Webサイトには1.99.7と1.4が明確に示されているため、1.99シリーズバージョンをダウンロードしないようにしてください.7は互換性がなく、機能が完全ではないため、本番環境への展開には適していません

ここに画像の説明を挿入

tar -zxvf sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz -C /opt/module/

2.モジュールディレクトリを入力し、sqoop-1.4.6.bin__hadoop-2.0.4-alphaディレクトリ名をsqoopに変更します

mv sqoop-1.4.6.bin__hadoop-2.0.4-alpha/   sqoop

3. / opt / module / sqoop / confの下のsqoop-env-template.shをsqoop-env.shに変更し、このファイルの最後の行に次のコンテンツを追加した後、保存して終了します(hadoop、zkと同様)インストールディレクトリは、実際のインストールパスに応じて調整できます)。

mv sqoop-env-template.sh sqoop-env.sh
export HADOOP_COMMON_HOME=/opt/module/hadoop-2.7.2
export HADOOP_MAPRED_HOME=/opt/module/hadoop-2.7.2
export HIVE_HOME=/opt/module/hive
export ZOOKEEPER_HOME=/opt/module/zookeeper-3.4.10
export ZOOCFGDIR=/opt/module/zookeeper-3.4.10
export HBASE_HOME=/opt/module/hbase

4. mysql-connector-java-5.1.27-bin.jarのjarパッケージをsqoopのlibディレクトリにコピーします。このjarパッケージがない場合は、インターネットにアクセスしてダウンロードします。基本的には5です。 xバージョンを使用できます。

[root @ hadoop102 sqoop] #cp /opt/software/mysql-libs/mysql-connector-java-5.1.27/mysql-connector-java-5.1.27-bin.jar ./lib/

上記はsqoopのインストールプロセス全体です。この時点で、sqoopの構成が正しいかどうかを確認しましょう。
[root @ hadoop102 sqoop] #bin / sqoophelpを実行します。

[root@hadoop102 sqoop]# bin/sqoop help
Warning: /opt/module/sqoop/bin/../../hcatalog does not exist! HCatalog jobs will fail.
Please set $HCAT_HOME to the root of your HCatalog installation.
Warning: /opt/module/sqoop/bin/../../accumulo does not exist! Accumulo imports will fail.
Please set $ACCUMULO_HOME to the root of your Accumulo installation.
20/07/30 19:14:15 INFO sqoop.Sqoop: Running Sqoop version: 1.4.6
usage: sqoop COMMAND [ARGS]

Available commands:
  codegen            Generate code to interact with database records
  create-hive-table  Import a table definition into Hive
  eval               Evaluate a SQL statement and display the results
  export             Export an HDFS directory to a database table
  help               List available commands
  import             Import a table from a database to HDFS
  import-all-tables  Import tables from a database to HDFS
  import-mainframe   Import datasets from a mainframe server to HDFS
  job                Work with saved jobs
  list-databases     List available databases on a server
  list-tables        List available tables in a database
  merge              Merge results of incremental imports
  metastore          Run a standalone Sqoop metastore
  version            Display version information

See 'sqoop help COMMAND' for information on a specific command.
[root@hadoop102 sqoop]#

上記の警告は無視してかまいません。上記の内容は、sqoopが正常にインストールおよび構成されたことを示しています。

Sqoopがデータベースに正常に接続できるかどうかをテストし、独自の設定に従ってmysqlパスワードに注意を払います。その後、私のホスト名はhadoop102になります。

bin/sqoop list-databases --connect jdbc:mysql://hadoop102:3306/ --username root --password 123456

ここに画像の説明を挿入

上記の内容は、Sqoopがデータベースに正常に接続できることを示しています。

3:sqoopの簡単な使用法:
使用する前に、まずmysqlでデータベースを作成し、次にこのデータベースにテーブルを作成して関連コンテンツを追加します。
mysql -uroot -p123456
mysql> create database company;
mysql> create table company.staff(id int(4)primary key not null auto_increment、name varchar(255)、sex varchar(255));
mysql> insert into company.staff (name、sex)values( 'Thomas'、 'Male');
mysql> insert into company.staff(name、sex)values( 'Catalina'、 'FeMale');

1. mysqlデータをHDFSにインポートします(hadoopはここで開始する必要があります

1)すべてをインポートします(ここでの\は、1行に書かれたすべての読みやすさが低下するため、改行文字を意味します。以下と同じです)

パラメータの解釈:
ユーザー名:mysql接続ユーザー名
パスワード:mysqlパスワード
テーブル:インポート
するテーブルデータtarget-dir:指定したデータがHDFSにインポートされる場所を表示します。デフォルトの保存パスは/ user / {現在のユーザー} / {です。テーブル名} / tableデータファイル
delete-target-dir:インポート中に既存のHDFSファイルを削除する必要がある場合は、deleteパラメーターを使用できます。

bin/sqoop import \
--connect jdbc:mysql://hadoop102:3306/company \
--username root \
--password 123456 \
--table staff \
--target-dir /user/company \
--delete-target-dir \
--num-mappers 1 \
--fields-terminated-by "\t"

実行後、ファイルpart-m-00000が/ user / companyディレクトリに生成されていることがわかり、ファイルをローカルにダウンロードすると、ファイルが「\ t」に従って分割されていることがわかります。

ここに画像の説明を挿入

2)クエリのインポート:
クエリ:SQLステートメントにwhere句を選択して追加できます。$ CONDITIONSは、インポートの順序を変更しないことを意味します。
このキーワードを追加する必要があります。

bin/sqoop import \
--connect jdbc:mysql://hadoop102:3306/company \
--username root \
--password 123456 \
--target-dir /user/company \
--delete-target-dir \
--num-mappers 1 \
--fields-terminated-by "\t" \
--query 'select name,sex from staff where id <=1 and $CONDITIONS;'

生成されたファイルをダウンロードすると、出力が期待どおりであることがわかります。

ここに画像の説明を挿入

3)指定された列をインポートします

注:複数の列が列に含まれている場合は、それらをコンマで区切り、区切るときにスペースを追加しないでください

bin/sqoop import \
--connect jdbc:mysql://hadoop102:3306/company \
--username root \
--password 123456 \
--target-dir /user/company \
--delete-target-dir \
--num-mappers 1 \
--fields-terminated-by "\t" \
--columns id,sex \
--table staff

ここに画像の説明を挿入
4)sqoopキーワードフィルタークエリを使用してデータをインポートする

bin/sqoop import \
--connect jdbc:mysql://hadoop102:3306/company \
--username root \
--password 123456 \
--target-dir /user/company \
--delete-target-dir \
--num-mappers 1 \
--fields-terminated-by "\t" \
--table staff \
--where "id=1"

ここに画像の説明を挿入

2.mysqlデータをhiveに
インポートします* hiveにテーブルを手動で作成せずに、コマンドラインで直接テーブル名をhiveにインポートします。
*プロセスは2つのステップに分かれています。最初のステップはデータをHDFSにインポートすることであり、2番目のステップはHDFSにインポートされたデータをHiveウェアハウスに移行することです。最初のステップでは、デフォルトの一時ディレクトリは/ user /です。ルート/テーブル名。

bin/sqoop import \
--connect jdbc:mysql://hadoop102:3306/company \
--username root \
--password 123456 \
--table staff \
--num-mappers 1 \
--hive-import \
--fields-terminated-by "\t" \
--hive-overwrite \
--hive-table staff_hive

ここに画像の説明を挿入

3.mysqlデータをhbase
-hbase-create-tableにインポートします。指定されている場合は、欠落しているHBaseテーブルを作成します(mysqlとhbaseのバージョンには互換性がないため、テーブル自体は次のコマンドで作成できます。そして今、それは必要ですhbaseで手動でテーブルを作成します)-split
-by:ワークユニットを分割するために使用されるテーブルの列

bin/sqoop import \
--connect jdbc:mysql://hadoop102:3306/company \
--username root \
--password 123456 \
--table staff \
--columns "id,name,sex" \
--column-family "info" \
--hbase-create-table \
--hbase-row-key "id" \
--hbase-table "hbase_company" \
--num-mappers 1 \
--split-by id

ここでは、hbaseのテーブルをスキャンして、データがインポートされていることを確認します。

ここに画像の説明を挿入

データのエクスポート(エクスポート)。エクスポートする場合、mysqlへのhbaseエクスポートはサポートされませんが、mysqlへのhiveまたはhadoopエクスポートはサポートされることに注意してください注:ここにセパレーターを追加する必要があります

bin/sqoop export \
--connect jdbc:mysql://hadoop102:3306/company \
--username root \
--password 123456 \
--table staff1 \
--num-mappers 1 \
--export-dir /user/hive/warehouse/staff_hive \
--input-fields-terminated-by "\t"

注Mysqlは、テーブルが存在しない場合、
ここで自動的に作成さません。staff1テーブルのmysqlにデータをエクスポートしたいのですが、staff1テーブルが作成されない場合、次のエラーが報告されます。

ここに画像の説明を挿入

テーブルを再度作成してステートメントを実行すると、データがハイブからmysqlにインポートされていることがわかります。

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/weixin_44080445/article/details/107696096
おすすめ