ハイブテーブルの場所がhttp JSON REST APIになるハイブテーブルを作成する方法はありますか? HDFSで毎回データをインポートする必要はありません。HIVEのREST APIのデータにアクセスする
答えて
私は数年前のプロジェクトで同様の状況に遭遇しました。これは、RestfulからHDFSへデータを取り込み、そしてHive分析を使用してビジネスロジックを実装するための低コストの方法です。コアJava、Map Reduceに慣れていることを望みます(Hortonworks Data Flow、 Hortonworksの製品であるHDF)。
手順1:データ処理ワークフローを、ビジネスロジックを含むHiveワークフローに関連付けるべきではありません。これは、お客様の要件(データフローのボリューム&のボリューム)に基づいて適時に独立して実行し、定期的に監視する必要があります。私はテキストエディタでこのコードを書いています。警告:コンパイルやテストはしていません!!
以下のコードは、URLを受け入れるか、調整してFSからのURLのリストを受け入れるMapperを使用しています。ペイロードまたは要求されたデータは、指定されたジョブ出力ディレクトリにテキストファイルとして保存されます(今回はデータの構造を忘れてしまいます)。
マッパークラス:
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.net.URLConnection;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;
public class HadoopHttpClientMap extends Mapper<LongWritable, Text, Text, Text> {
private int file = 0;
private String jobOutDir;
private String taskId;
@Override
protected void setup(Context context) throws IOException,InterruptedException {
super.setup(context);
jobOutDir = context.getOutputValueClass().getName();
taskId = context.getJobID().toString();
}
public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException{
Path httpDest = new Path(jobOutDir, taskId + "_http_" + (file++));
InputStream is = null;
OutputStream os = null;
URLConnection connection;
try {
connection = new URL(value.toString()).openConnection();
//implement connection timeout logics
//authenticate.. etc
is = connection.getInputStream();
os = FileSystem.getLocal(context.getConfiguration()).create(httpDest,true);
IOUtils.copyBytes(is, os, context.getConfiguration(), true);
} catch(Throwable t){
t.printStackTrace();
}finally {
IOUtils.closeStream(is);
IOUtils.closeStream(os);
}
context.write(value, null);
//context.write(new Text (httpDest.getName()), new Text (os.toString()));
}
}
マッパー唯一の仕事:
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.input.TextInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;
public class HadoopHttpClientJob {
private static final String data_input_directory = “YOUR_INPUT_DIR”;
private static final String data_output_directory = “YOUR_OUTPUT_DIR”;
public HadoopHttpClientJob() {
}
public static void main(String... args) {
try {
Configuration conf = new Configuration();
Path test_data_in = new Path(data_input_directory, "urls.txt");
Path test_data_out = new Path(data_output_directory);
@SuppressWarnings("deprecation")
Job job = new Job(conf, "HadoopHttpClientMap" + System.currentTimeMillis());
job.setJarByClass(HadoopHttpClientJob.class);
FileSystem fs = FileSystem.get(conf);
fs.delete(test_data_out, true);
job.setMapperClass(HadoopHttpClientMap.class);
job.setMapOutputKeyClass(Text.class);
job.setMapOutputValueClass(Text.class);
job.setInputFormatClass(TextInputFormat.class);
job.setOutputFormatClass(TextOutputFormat.class);
job.setNumReduceTasks(0);
FileInputFormat.addInputPath(job, test_data_in);
FileOutputFormat.setOutputPath(job, test_data_out);
job.waitForCompletion(true);
}catch (Throwable t){
t.printStackTrace();
}
}
}
ステップ2:HDFSディレクトリに基づいてハイブに外部表を作成します。 JSONデータ(あなたの場合)にHive SerDeを使用し、外部テーブルのデータを管理マスターテーブルにコピーすることを忘れないでください。
ステップ3:ビジネスニーズを実現するために、作成した可能性のあるハイブクエリをマスターテーブルにポイントします。
注:リアルタイム解析またはストリーミングAPIを参照している場合は、アプリケーションのアーキテクチャを変更する必要があります。あなたは建築上の質問をしてきたので、私はあなたをサポートするために私の最高の教育を受けた推測を使用しています。これを一度行ってください。アプリケーションでこれを実装できると思ったら、特定の質問をすることができます。私はそれらに対処するために最善を尽くします。
- 1. Rest API:派生データにアクセスするためのパス
- 2. 春データRESTは、REST APIの
- 3. クライアントによるREST APIアクセスの制限
- 4. REST APIへの不正アクセス
- 5. CORS Tomcat REST APIへのアクセス
- 6. REST APIへのアクセスを制限する
- 7. REST APIレスポンスでJSONプロパティにアクセスする
- 8. Amazon S3 REST APIにアクセスするためのiPhone API
- 9. 角4からREST APIデータにアクセスするためのパラメータを渡す方法
- 10. ビューのURLから渡されたデータにアクセスするDjango Rest Api
- 11. Ember ChartistとREST-APIのデータ
- 12. REST API - 「リアルタイム」データのベストプラクティス
- 13. c# - Woocommerce rest APIのデータ
- 14. Rest API-JIRAからデータにアクセスできない
- 15. カスタムREST APIエクステンションからBonita Engine APIにアクセスする方法
- 16. Rest APIアクセスとエンドユーザーのアプリケーションに関するCross Originsのアドバイス
- 17. REST APIを使用してbitbucketのソースコードにアクセスするには?
- 18. Codeigniterモバイル経由のREST APIアクセス
- 19. REST APIのサブリソース、返すデータは?
- 20. ノードjsアプリケーションからejabberd ReST APIにアクセス
- 21. Wowza REST APIにアクセスできない
- 22. iOSのmagento Rest APIにアクセスする - swift 3.0
- 23. JWTを使用してストリームREST APIにアクセスする際のエラー
- 24. REST ::クライアントとLWP :: UserAgent Google APIにアクセスするためのPerlクラス?
- 25. Canvas lms rest APIデータをエクスポートする
- 26. extjs REST APIを保存するデータ
- 27. REST API内のアイテムのユーザー固有データ
- 28. スタンダードSpringデータREST APIをオーバーライド
- 29. モバイルデバイスのみのREST APIへのアクセスを許可する
- 30. Jenkins v2.73.1にアクセスすると404を取得するcrumbIssuer REST API
Hive(またはHadoop)がHiveデータベース用のJSON REST APIを公開するかどうか尋ねていますか?私はその答えはノーだと思う。データの上にいくつかのJSON SerDeがなければ、JSONとして出てこないのです。 Hiveに接続するRESTful Webサービスを作成できない原因は何ですか? –
@ cricket_007以前はHIVEテーブルからデータにアクセスしていたHIVEジョブがたくさんあります。これらのハイブテーブルを置き換えるHTTP REST APIからデータを読み込むようにこれらのすべてのジョブをポイントする必要があります。あなたはそれを行う最も簡単な方法をお勧めしますか? – chanchal1987
申し訳ありませんが、私はあなたが何を求めているのか分かりません。私の意見では、REST APIはHiveの代替物ではありません。主に、Hiveは、格納しようとするデータの量が多少遅いためです。それほど多くのデータがない場合、基本的にMySQLデータベースの周りでRESTについて同じ質問をすることができます。 –