2017-09-22 10 views
0

こんにちは私は、ハイブを使用するときにS3をデフォルトのファイルシステムとして使用しようとしています。 私が設定している:私は、データベースを作成することができます// mybucket デフォルトのファイルシステムとしてS3を使用

  • fs.s3.awsAccessKeyId = MYID
  • fs.awsSecretAccessKey = mysecretkey
  • と:

    • fs.defaultFS = S3をテーブルと私のs3のバケツに表示されます。 これらのテーブルを使用しようとすると、問題が発生します。私はエラーを取得する:

      Incomplete HDFS URI, no host: hdfs:/tmp/hive/hadoop/dir/filename 
      

      問題は、それはまだ代わりにS3のHDFSを使用することで他に何私はハイブとMapReduceのはFSとしてS3を使用するために設定する必要がありますか?

    +0

    テーブルを読み書きしようとしていますか?もしそうなら、 'CREATE EXTERNAL TABLE'がS3を使用する最良の方法です。または、パスを介して実際のファイルを参照する必要がありますか? –

    +0

    こんにちはHDFSの代わりにs3バケットを使用したいと思います。分割されていないデータがあるソースバケットから外部テーブルを作成し、パーケットファイルを分割した新しいs3バケットにそのデータを挿入したいと思います。だから、私はMapReduceをS3のメモリとして使用し、HDFSでは使用しないようにしたいと思います。なぜなら、私はそのアプローチで無制限のメモリを持つからです。 –

    答えて

    0

    ハイブとAmazon S3を使用する最も簡単な方法は、Amazon EMRクラスタを起動して外部テーブルをS3に保存して使用することです。例えば

    、この文はS3に格納されるテーブルを作成します。

    CREATE EXTERNAL TABLE parquet_hive (
        requestBeginTime string, 
        adId string, 
        impressionId string, 
        referrer string, 
        userAgent string, 
        userCookie string, 
        ip string 
    ) 
    STORED AS PARQUET 
    LOCATION 's3://myBucket/myParquet/'; 
    

    あなたはそれにデータを挿入できます。

    INSERT OVERWRITE TABLE parquet_hive 
    SELECT 
        requestbegintime, 
        adid, 
        impressionid, 
        referrer, 
        useragent, 
        usercookie, 
        ip 
    FROM impressions; 
    

    参照:Converting to Columnar Formats

    をあなたの場合Amazon S3の代わりに独自のHadoopクラスタを使用している場合、はS3(e gはs3n:またはs3a:を使用)。

    +0

    はい、私はただ1つの追加の設定、つまり挿入操作を実行するときにデフォルトのファイルシステムとしてs3を使用するようMapReduceを強制するだけです。処理したいデータの量を処理するのに十分なスペースがHDFSにない。私は[ここ](https://community.hortonworks.com/articles/87256/using-s3-as-defaultfs.html)で定義された手順に従った。外部テーブルと新しいデータベースを作成すると、すべての一時ファイルは既定のFSとして指定されたバケットに保存されますが、挿入時にMapReduceを使用する時点になると、hdfsからs3からではなく一時ファイルを取得しようとします。 –

    関連する問題