1

HDP 2.4 および HAWQ 2.0 の使用

HDFS パスに保持されている json データを HAWQ 外部テーブルに読み込みたいですか?

以下の手順に従って、新しい json プラグインを PXF に追加し、データを読み取ります。

  1. https://bintray.com/big-data/maven/pxf-plugins/view#からプラグイン「json-pxf-ext-3.0.1.0-1.jar」をダウンロードし ます

  2. プラグインをパス /usr/lib/pxf にコピーします。

  3. 外部テーブルの作成

    CREATE EXTERNAL TABLE ext_json_mytestfile ( created_at テキスト、id_str テキスト、テキスト テキスト、ソース テキスト、「user.id」INTEGER、「user.location」テキスト、「coordinates.type」テキスト、「coordinates.coordinates[0]」 DOUBLE PRECISION、座標.座標[1]" DOUBLE PRECISION) LOCATION ('pxf://localhost:51200/tmp/hawq_test.json' '?FRAGMENTER=org.apache.hawq.pxf.plugins.hdfs.HdfsDataFragmenter' '&ACCESSOR=org. apache.hawq.pxf.plugins.json.JsonAccessor''&RESOLVER=org.apache.hawq.pxf.plugins.json.JsonResolver''&ANALYZER=org.apache.hawq.pxf.plugins.hdfs.HdfsAnalyzer') FORMAT 'CUSTOM ' (FORMATTER='pxfwritable_import') LOG ERRORS INTO err_json_mytestfile SEGMENT REJECT LIMIT 10 ROWS;

上記の DDL テーブルを実行すると、正常に作成されます。その後、選択クエリを実行しようとしています

select * from ext_json_mytestfile;

しかし、エラーが発生しています: -

エラー: 'localhost:51200' からのリモート コンポーネント エラー (500): タイプ例外レポート メッセージ java.lang.ClassNotFoundException: org.apache.hawq.pxf.plugins.json.JsonAccessor の説明 サーバーで内部エラーが発生したため、実行できませんでしたこのリクエスト。例外 javax.servlet.ServletException: java.lang.ClassNotFoundException: org.apache.hawq.pxf.plugins.json.JsonAccessor (libchurl.c:878) (seg4 sandbox.hortonworks.com:40000 pid=117710) (dispatcher.c :1801) 詳細: 外部テーブル ext_json_mytestfile

どんな助けでも大歓迎です。

4

5 に答える 5

1

参照されているjarファイルには、com.pivotal.*という古いパッケージ名が付いているようです。JSON PXF 拡張機能はまだ準備中です。jar pxf-json-3.0.0.jar は JDK 1.7 用にビルドされています。これは、単一ノードの HDB VM が JDK 1.7 を使用しており、ドロップボックスにアップロードされているためです。

https://www.dropbox.com/s/9ljnv7jiin866mp/pxf-json-3.0.0.jar?dl=0

上記のコメントの詳細をエコーし​​て、手順が正しく実行され、PXF サービスが jar ファイルを認識できるようにします。以下の手順では、Hawq/HDB が Ambari によって管理されていることを前提としています。そうでない場合は、以前の更新で説明した手動の手順が機能するはずです。

  1. pxf-json-3.0.0.jar をすべての HAWQ ノード (マスターおよびセグメント) の /usr/lib/pxf/ にコピーします。

  2. Ambari マネージド PXF で、Ambari Admin -> PXF -> Advanced pxf-public-classpath に移動して、以下の行を追加します。

/usr/lib/pxf/pxf-json-3.0.0.jar

  1. Ambari マネージド PXF で、Ambari Admin -> PXF -> Advanced pxf-profiles に移動して、このスニペットを pxf プロファイル xml の最後に追加します。

<profile>
  <name>Json</name>
  <description>
    JSON Accessor</description>
  <plugins>
    <fragmenter>org.apache.hawq.pxf.plugins.hdfs.HdfsDataFragmenter</fragmenter>
    <accessor>org.apache.hawq.pxf.plugins.json.JsonAccessor</accessor>
    <resolver>org.apache.hawq.pxf.plugins.json.JsonResolver</resolver>
  </plugins>
</profile>

  1. Ambari 経由で PXF サービスを再起動する
于 2016-07-14T15:56:48.167 に答える
0

はい、 https: //bintray.com/big-data/maven/pxf-plugins/view# の jar json-pxf-ext-3.0.1.0-1.jar" の古いパッケージ名は com.pivotal.* です。以前の更新では、ドロップボックスから正しい jar をダウンロードするための詳細が編集されています。

于 2016-07-15T19:23:22.697 に答える
0

クラスパスにjson jarを追加していない可能性があります。Create External Table DDL は単なる定義であるため、常に成功します。クエリを実行するときのみ、HAWQ は実行時の jar 依存関係をチェックします。

于 2016-07-14T17:15:41.123 に答える
0

試しましたか:

  • PXF JSON jar ファイルを /usr/lib/pxf にコピーする
  • /etc/pxf/conf/pxf-profiles.xml を更新して、まだ存在しない場合は Json プラグイン プロファイルを含めます。
  • (上記のコメントによる) /etc/pxf/conf/pxf-public.classpath の更新
  • Ambari またはコマンド ラインを介して PXF サービスを再起動する (sudo service pxf-service restart)
于 2016-07-14T15:29:26.323 に答える
0

jar ファイルの場所を /etc//conf/pxf-public.classpath に追加しましたか?

于 2016-07-14T14:15:17.060 に答える