2017-05-24 10 views
0

私はBig Dataの初心者です。sqoopを使用してOracleからHiveへ、そしてCloudera administrationを使用して、使用しているコマンドの例を移行しています。Sqoopを使用してOracleからHiveにビューを移行する

sqoop import -D mapred.child.java.opts="\-Djava.security.egd=file:/my_url" \ 
    -D mapreduce.map.memory.mb=9192 -D mapreduce.map.java.opts=-Xmx4096m \ 
    --connect jdbc:oracle:thin:@//my_url --username "my_user" \ 
    --password "my_password" --table my_view_name --compress \ 
    --compression-codec=snappy --as-parquetfile \ 
    --create-hive-table --hive-database my_db_name \ 
    --hive-table our_table_anme --hive-import \ 
    -m 8 --hive-overwrite \ 
    --map-column-java column_name=String,column_name=String,column_name=String,column_name=Float --split-by cloumn_name 

は、これまでのところ、それはいくつかの大きなボードと少し遅い、うまくいきました。

問題:より大きなテーブルでビューを移行する必要があり、問題が発生し、ハイブが負荷に耐えられないと考えられます。

この情報を読み込むための任意の提案はありますか?

注:テーブルのみをコピーしてビューを作成しようとすると、ビューがテーブルの属性や重い計算に複雑な変更を加え、インパラでこれを作成することは非常に複雑です。

+0

「HDFS」でのビューの作成は、オーバーヘッドのようなものです。 Hiveではビュー全体をテーブルとしてインポートしています。パフォーマンスを向上させるために使用できる最適化手法はほとんどありません。 –

答えて

0

非常に大きなテーブルをロードするためのテンプレート:where句を持つテーブルの代わりにクエリを使用して、パーティション + split-columnを使用します(一部の整数が均等に分布する列を検索してみてください)。 sqoopを並列または順次実行して、異なるパーティションをロードします。述語プッシュダウンがwhere節に従ってOracleで機能するのが理想的です。そうでない場合、Oracle側にボトルネックがある場合は、同一の手法を使用してテーブルを別々にロードします。ここで+ splitを実行し、追加のHiveプロセスを使用してビューを具体化します。

+0

ありがとう、実際に私たちはすでに--split-byを使用しています。私が与えた例で間違えて省略してしまったことを謝ります。 –

+0

はい、あります。 splitカラムと-mオプションを使用しない場合は例外です。 – leftjoin

関連する問題